java给图片加水印效果代码

以前用到的java给图片加水印效果代码都有些小问题,今天我们修正了里面的问题 增加了补白的功能 重构了代码

import java.awt.alphacomposite;
import java.awt.color;
import java.awt.font;
import java.awt.graphics2d;
import java.awt.image;
import java.awt.geom.affinetransform;
import java.awt.image.affinetransformop;
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.ioexception;
import javax.imageio.imageio;
/**
 * @author eric xu
 *
 */
public final class imageutils {
 /**
  * 图片水印
  * @param pressimg 水印图片
  * @param targetimg 目标图片
  * @param x 修正值 默认在中间
  * @param y 修正值 默认在中间
  * @param alpha 透明度
  */
 public final static void pressimage(string pressimg, string targetimg, int x, int y, float alpha) {
  try {
   file img = new file(targetimg);
   image src = imageio.read(img);
   int wideth = src.getwidth(null);
   int height = src.getheight(null);
   bufferedimage image = new bufferedimage(wideth, height, bufferedimage.type_int_rgb);
   graphics2d g = image.creategraphics();
   g.drawimage(src, 0, 0, wideth, height, null);
   //水印文件
   image src_biao = imageio.read(new file(pressimg));
   int wideth_biao = src_biao.getwidth(null);
   int height_biao = src_biao.getheight(null);
   g.setcomposite(alphacomposite.getinstance(alphacomposite.src_atop, alpha));
   g.drawimage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wi             deth_biao, height_biao, null);
   //水印文件结束
   g.dispose();
   imageio.write((bufferedimage) image, "jpg", img);
  } catch (exception e) {
   e.printstacktrace();
  }
 }
 /**
  * 文字水印
  * @param presstext 水印文字
  * @param targetimg 目标图片
  * @param fontname 字体名称
  * @param fontstyle 字体样式
  * @param color 字体颜色
  * @param fontsize 字体大小
  * @param x 修正值
  * @param y 修正值
  * @param alpha 透明度
  */
 public static void presstext(string presstext, string targetimg, string fontname, int fontstyle,    color color, int fontsize, int x, int y, float alpha) {
  try {
   file img = new file(targetimg);
   image src = imageio.read(img);
   int width = src.getwidth(null);
   int height = src.getheight(null);
   bufferedimage image = new bufferedimage(width, height, bufferedimage.type_int_rgb);
   graphics2d g = image.creategraphics();
   g.drawimage(src, 0, 0, width, height, null);
   g.setcolor(color);
   g.setfont(new font(fontname, fontstyle, fontsize));
   g.setcomposite(alphacomposite.getinstance(alphacomposite.src_atop, alpha));
   g.drawstring(presstext, (width - (getlength(presstext) * fontsize)) / 2 + x, (he             ight - fontsize) / 2 + y);
   g.dispose();
   imageio.write((bufferedimage) image, "jpg", img);
  } catch (exception e) {
   e.printstacktrace();
  }
 }
 /**
  * 缩放
  * @param filepath 图片路径
  * @param height 高度
  * @param width 宽度
  * @param bb 比例不对时是否需要补白
  */
 public static void resize(string filepath, int height, int width, boolean bb) {
  try {
   double ratio = 0.0; //缩放比例
   file f = new file(filepath);
   bufferedimage bi = imageio.read(f);
   image itemp = bi.getscaledinstance(width, height, bi.scale_smooth);
   //计算比例
   if ((bi.getheight() > height) || (bi.getwidth() > width)) {
    if (bi.getheight() > bi.getwidth()) {
     ratio = (new integer(height)).doublevalue() / bi.getheight();
    } else {
     ratio = (new integer(width)).doublevalue() / bi.getwidth();
    }
    affinetransformop op = new                affinetransformop(affinetransform.getscaleinstance(ratio, ratio), null);
    itemp = op.filter(bi, null);
   }
   if (bb) {
    bufferedimage image =
                 new bufferedimage(width, height, bufferedimage.type_int_rgb);
    graphics2d g = image.creategraphics();
    g.setcolor(color.white);
    g.fillrect(0, 0, width, height);
    if (width == itemp.getwidth(null))
     g.drawimage(itemp, 0, (height - itemp.getheight(null)) / 2,                   itemp.getwidth(null), itemp.getheight(null), color.white, null);
    else
  g.drawimage(itemp, (width - itemp.getwidth(null)) / 2, 0, itemp.getwidth(null), i                    temp.getheight(null), color.white, null);
    g.dispose();
    itemp = image;
   }
   imageio.write((bufferedimage) itemp, "jpg", f);
  } catch (ioexception e) {
   e.printstacktrace();
  }
 }
 public static void main(string[] args) throws ioexception {
  pressimage("g:imgtestsy.jpg", "g:imgtesttest1.jpg", 0, 0, 0.5f);
  presstext("我是文字水印", "g:imgtesttest1.jpg", "黑体", 36, color.white, 80, 0, 0, 0.3f);
  resize("g:imgtesttest1.jpg", 500, 500, true);
 }
 public static int getlength(string text) {
  int length = 0;
  for (int i = 0; i < text.length(); i++) {
   if (new string(text.charat(i) + "").getbytes().length > 1) {
    length += 2;
   } else {
    length += 1;
   }
  }
  return length / 2;
 }
}

                        getlength 这个方法用来得到文字的长度 全角一个字 半角算半个字 但是感觉这种方法不太好

时间: 2024-10-26 14:28:19

java给图片加水印效果代码的相关文章

PHP给图片加水印实例代码

  PHP给图片加水印实例代码: 这也是一个比较常用的功能,用PHP给上传图片加水印的程序,是通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring(),或是原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面.主要运用了PHP的GD库. 参数说明:   $max_file_size : 上传文件大小限制, 单位BYTE   $destination_folder : 上传文件路径   $watermark :

jquery 图片加载效果代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-

asp.net C#可设置透明度的图片加水印标记代码(1/3)

/// <summary>   /// creating a watermarked photograph with gdi+ for .net   /// </summary>   /// <param name="rsrcimgpath">原始图片的物理路径</param>   /// <param name="rmarkimgpath">水印图片的物理路径</param>   /// &l

java 图片加水印实例代码_java

复制代码 代码如下: try {            String targetImg = "D:/Blue hills.jpg";//          String pressImg = "D:/20130311220300.jpg";            String pressImg = "D:/html_original.jpg";             File f1 = new File(targetImg);        

干货:给图片加水印效果的自定义控件LabelImageView

转载请著名出处:王亟亟的大牛之路 这两天不知道给Soyi加些什么东西,那就慢慢的往CodeActivity里加东西吧,所以就写了这么个简单的自定义控件LabelImageView. HOW to do? 0,获取一大堆参数,没有传就用默认的. 1,设置传来的image_src作为底版,在onDraw方法中 canvas.drawBitmap(bitmap, 0, 0, paint); 2,根据textLocation参数判断位置,默认右下 switch (textLocation) { case

js图片加载效果代码

提示:您可以先修改部分代码再运行 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"><head

用PHP代码给图片加水印_php技巧

先找好一张图片,更名为face.jpeg,创建watermark.php: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/29 * Time: 22:27 */ $img = imagecreatefromjpeg('face.jpeg');//根据已有的JPG创建image header('Content-type:image/jpeg');//设置mime type imagestring($img

php 图片加水印与上传图片加水印php类_php技巧

一个正规的网站,在需要上传图片时,往往都会需要在图片上增加自己网站的LOGO水印.那么如何实现这一步骤呢?首先让我们来了解PHP图片加水印的原理. 通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是在原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面.以下是PHP图片加水印的转载! 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folde

用PHP代码给图片加水印

  这篇文章主要介绍了用PHP代码给图片加水印的相关资料,需要的朋友可以参考下 先找好一张图片,更名为face.jpeg,创建watermark.php: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/29 * Time: 22:27 */ $img = imagecreatefromjpeg('face.jpeg');//根据已有的JPG创建i