Java 给图片增加 水印图片 水印文字

很多时候会用到给图片增加水印,这个时候我推荐利用“光影魔术手”,它完成水印的功能非常强大,而且也可以批处理,不过Java也可以非常轻松的完成这些事情,但效果也打点折扣,坦诚点说吧,java在图像处理方面确实不如c++,不过这本来就不是java的强项,都可以理解。 

利用Java给图片增加水印道理很简单:利用Java在内存中加载一副图片,然后在此基础上加载第二幅图片,而这叠加就成了水印,同时第二幅图片您可以控制图片的透明度。水印文字也一个道理。利用这个道理,你甚至可以做到组合图片等等操作,只有想不到,没有做不到。 

代码正在整理最近随后放上去。这里就把算法说一下。 
水印图片的方法是:Graphics2D的drawImage(waterImage, x, y, width, height, null); 
水印文字的方法是:Graphics2D的drawString(pressText, x, y); 

Java代码    收藏代码
  1. /** 
  2.      * 添加图片水印 
  3.      *  
  4.      * @param targetImg 
  5.      *            目标图片路径,如:C:\\kutuku.jpg 
  6.      * @param waterImg 
  7.      *            水印图片路径,如:C:\\kutuku.png 
  8.      * @param x 
  9.      *            水印图片距离目标图片左侧的偏移量,如果x<0, 则在正中间 
  10.      * @param y 
  11.      *            水印图片距离目标图片上侧的偏移量,如果y<0, 则在正中间 
  12.      * @param alpha 
  13.      *            透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明) 
  14.      */  
  15.     public final static void pressImage(String targetImg, String waterImg,  
  16.             int x, int y, float alpha) {  
  17.         try {  
  18.             // 加载目标图片  
  19.             File file = new File(targetImg);  
  20.             Image image = ImageIO.read(file);  
  21.             int width = image.getWidth(null);  
  22.             int height = image.getHeight(null);  
  23.               
  24.             // 将目标图片加载到内存。  
  25.             BufferedImage bufferedImage = new BufferedImage(width, height,  
  26.                     BufferedImage.TYPE_INT_RGB);  
  27.             Graphics2D g = bufferedImage.createGraphics();  
  28.             g.drawImage(image, 00, width, height, null);  
  29.   
  30.             // 加载水印图片。  
  31.             Image waterImage = ImageIO.read(new File(waterImg));  
  32.             int width_1 = waterImage.getWidth(null);  
  33.             int height_1 = waterImage.getHeight(null);  
  34.             // 设置水印图片的透明度。  
  35.             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
  36.                     alpha));  
  37.   
  38.             // 设置水印图片的位置。  
  39.             int widthDiff = width - width_1;  
  40.             int heightDiff = height - height_1;  
  41.             if (x < 0) {  
  42.                 x = widthDiff / 2;  
  43.             } else if (x > widthDiff) {  
  44.                 x = widthDiff;  
  45.             }  
  46.             if (y < 0) {  
  47.                 y = heightDiff / 2;  
  48.             } else if (y > heightDiff) {  
  49.                 y = heightDiff;  
  50.             }  
  51.               
  52.             // 将水印图片“画”在原有的图片的制定位置。  
  53.             g.drawImage(waterImage, x, y, width_1, height_1, null);  
  54.             // 关闭画笔。  
  55.             g.dispose();  
  56.               
  57.             // 保存目标图片。  
  58.             ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);  
  59.         } catch (IOException e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.     }  
  63.   
  64.     /** 
  65.      * 添加文字水印 
  66.      *  
  67.      * @param targetImg 
  68.      *            目标图片路径,如:C:\\kutoku.jpg 
  69.      * @param pressText 
  70.      *            水印文字, 如:kutuku.com 
  71.      * @param fontName 
  72.      *            字体名称, 如:宋体 
  73.      * @param fontStyle 
  74.      *            字体样式,如:粗体和斜体(Font.BOLD|Font.ITALIC) 
  75.      * @param fontSize 
  76.      *            字体大小,单位为像素 
  77.      * @param color 
  78.      *            字体颜色 
  79.      * @param x 
  80.      *            水印文字距离目标图片左侧的偏移量,如果x<0, 则在正中间 
  81.      * @param y 
  82.      *            水印文字距离目标图片上侧的偏移量,如果y<0, 则在正中间 
  83.      * @param alpha 
  84.      *            透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明) 
  85.      */  
  86.     public static void pressText(String targetImg, String pressText,  
  87.             String fontName, int fontStyle, int fontSize, Color color, int x,  
  88.             int y, float alpha) {  
  89.         try {  
  90.             // 加载目标图片  
  91.             File file = new File(targetImg);  
  92.             Image image = ImageIO.read(file);  
  93.             int width = image.getWidth(null);  
  94.             int height = image.getHeight(null);  
  95.               
  96.             // 将目标图片加载到内存。  
  97.             BufferedImage bufferedImage = new BufferedImage(width, height,  
  98.                     BufferedImage.TYPE_INT_RGB);  
  99.             Graphics2D g = bufferedImage.createGraphics();  
  100.             g.drawImage(image, 00, width, height, null);  
  101.             g.setFont(new Font(fontName, fontStyle, fontSize));  
  102.             g.setColor(color);  
  103.             // 设置水印图片的透明度。  
  104.             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
  105.                     alpha));  
  106.   
  107.             // 设置水印图片的位置。  
  108.             int width_1 = fontSize * getLength(pressText);  
  109.             int height_1 = fontSize;  
  110.             int widthDiff = width - width_1;  
  111.             int heightDiff = height - height_1;  
  112.             if (x < 0) {  
  113.                 x = widthDiff / 2;  
  114.             } else if (x > widthDiff) {  
  115.                 x = widthDiff;  
  116.             }  
  117.             if (y < 0) {  
  118.                 y = heightDiff / 2;  
  119.             } else if (y > heightDiff) {  
  120.                 y = heightDiff;  
  121.             }  
  122.   
  123.             // 将水印文字“写”在原有的图片的制定位置。  
  124.             g.drawString(pressText, x, y + height_1);  
  125.             // 关闭画笔。  
  126.             g.dispose();  
  127.               
  128.             // 保存目标图片。  
  129.             ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);  
  130.         } catch (Exception e) {  
  131.             e.printStackTrace();  
  132.         }  
  133.     }  


文章地址: http://javapub.iteye.com/blog/711045 

相关文章 
Java图像图片 边缘检测  http://javapub.iteye.com/blog/685468 
Java图像变灰  http://javapub.iteye.com/blog/687082 
Java 给图片增加 水印图片 水印文字 [url]Java 给图片增加 水印图片 水印文字[/url] 
Java图像渐变  http://javapub.iteye.com/blog/736799 
Java将大图片转成小图片  http://javapub.iteye.com/blog/666607
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值