微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java图片添加水印实例代码分享

本文为大家介绍了java图片添加水印实例代码,java实现水印还是非常方便的,水印可以是图片或者文字,具体内容如下

package michael.io.image; 
import java.awt.AlphaComposite; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGimagedecoder; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 
 
/** 
 * 图片水印 
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */ 
public class ImageMarklogoByIcon { 
 
 /** 
  * @param args 
  */ 
 public static void main(String[] args) { 
  String srcImgPath = "d:/test/michael/myblog_01.png"; 
  String iconPath = "d:/test/michael/blog_logo.png"; 
  String targerPath = "d:/test/michael/img_mark_icon.jpg"; 
  String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg"; 
  // 给图片添加水印 
  ImageMarklogoByIcon.markImageByIcon(iconPath,srcImgPath,targerPath); 
  // 给图片添加水印,水印旋转-45 
  ImageMarklogoByIcon.markImageByIcon(iconPath,targerPath2,-45); 
 
 } 
 
 /** 
  * 给图片添加水印 
  * @param iconPath 水印图片路径 
  * @param srcImgPath 源图片路径 
  * @param targerPath 目标图片路径 
  */ 
 public static void markImageByIcon(String iconPath,String srcImgPath,String targerPath) { 
  markImageByIcon(iconPath,targerPath,null); 
 } 
 
 /** 
  * 给图片添加水印、可设置水印图片旋转角度 
  * @param iconPath 水印图片路径 
  * @param srcImgPath 源图片路径 
  * @param targerPath 目标图片路径 
  * @param degree 水印图片旋转角度 
  */ 
 public static void markImageByIcon(String iconPath,String targerPath,Integer degree) { 
  OutputStream os = null; 
  try { 
   Image srcImg = ImageIO.read(new File(srcImgPath)); 
 
   BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null),BufferedImage.TYPE_INT_RGB); 
 
   // 得到画笔对象 
   // Graphics g= buffImg.getGraphics(); 
   Graphics2D g = buffImg.createGraphics(); 
 
   // 设置对线段的锯齿状边缘处理 
   g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
 
   g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),srcImg 
     .getHeight(null),Image.SCALE_SMOOTH),null); 
 
   if (null != degree) { 
    // 设置水印旋转 
    g.rotate(Math.toradians(degree),(double) buffImg.getWidth() / 2,(double) buffImg 
        .getHeight() / 2); 
   } 
 
   // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度 
   ImageIcon imgIcon = new ImageIcon(iconPath); 
 
   // 得到Image对象。 
   Image img = imgIcon.getimage(); 
 
   float alpha = 0.5f; // 透明度 
   g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha)); 
 
   // 表示水印图片的位置 
   g.drawImage(img,150,300,null); 
 
   g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); 
 
   g.dispose(); 
 
   os = new FileOutputStream(targerPath); 
 
   // 生成图片 
   ImageIO.write(buffImg,"JPG",os); 
 
   System.out.println("图片完成添加Icon印章。。。。。。"); 
  } catch (Exception e) { 
   e.printstacktrace(); 
  } finally { 
   try { 
    if (null != os) 
     os.close(); 
   } catch (Exception e) { 
    e.printstacktrace(); 
   } 
  } 
 } 
} 

再为大家分享一例:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
public final class ImageUtils {
 public ImageUtils() {
 
 }
 
 /**
  * public final static String getPressImgPath() { return ApplicationContext
  * .getRealPath("/template/data/util/shuiyin.gif"); }
  */
 
 /**
  * 把图片印刷到图片上
  * 
  * @param pressImg --
  *   水印文件
  * @param targetImg --
  *   目标文件
  * @param x
  *   --x坐标
  * @param y
  *   --y坐标
  */
 public final static void pressImage(String pressImg,String targetImg,int x,int y) {
  try {
   //目标文件
   File _file = new File(targetImg);
   Image src = ImageIO.read(_file);
   int wideth = src.getWidth(null);
   int height = src.getHeight(null);
   BufferedImage image = new BufferedImage(wideth,height,BufferedImage.TYPE_INT_RGB);
   Graphics g = image.createGraphics();
   g.drawImage(src,wideth,null);
 
   //水印文件
   File _filebiao = new File(pressImg);
   Image src_biao = ImageIO.read(_filebiao);
   int wideth_biao = src_biao.getWidth(null);
   int height_biao = src_biao.getHeight(null);
   g.drawImage(src_biao,(wideth - wideth_biao) / 2,(height - height_biao) / 2,wideth_biao,height_biao,null);
   //水印文件结束
   g.dispose();
   FileOutputStream out = new FileOutputStream(targetImg);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(image);
   out.close();
  } catch (Exception e) {
   e.printstacktrace();
  }
 }
 
 /**
  * 打印文字水印图片
  * 
  * @param presstext
  *   --文字
  * @param targetImg --
  *   目标图片
  * @param fontName --
  *   字体名
  * @param fontStyle --
  *   字体样式
  * @param color --
  *   字体颜色
  * @param fontSize --
  *   字体大小
  * @param x --
  *   偏移量
  * @param y
  */
 
 public static void presstext(String presstext,String fontName,int fontStyle,int color,int fontSize,int y) {
  try {
   File _file = new File(targetImg);
   Image src = ImageIO.read(_file);
   int wideth = src.getWidth(null);
   int height = src.getHeight(null);
   BufferedImage image = new BufferedImage(wideth,null);
    
   g.setColor(Color.RED);
   g.setFont(new Font(fontName,fontStyle,fontSize));
 
   g.drawString(presstext,wideth - fontSize - x,height - fontSize
     / 2 - y);
   g.dispose();
   FileOutputStream out = new FileOutputStream(targetImg);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(image);
   out.close();
  } catch (Exception e) {
   System.out.println(e);
  }
 }
 
 public static void main(String[] args) {
  pressImage("F:/logo.png","F:/123.jpg",0);
 }
}

希望本文所述对大家用java语言实现图片添加水印有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐