importjava.awt.AlphaComposite;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.RenderingHints;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjava.io.FilenameFilter;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.List;importjavax.imageio.ImageIO;importjavax.swing.ImageIcon;/*******************************************************************************
* Description: 图片水印工具类
*@authorzengshunyao
*@version1.0*/
public classImageRemarkUtil {//水印透明度
private static float alpha = 0.5f;//水印横向位置
private static int positionWidth = 400;//水印纵向位置
private static int positionHeight = 200;//水印文字字体
private static Font font = new Font("宋体", Font.BOLD, 72);//水印文字颜色
private static Color color =Color.red;/***
*@paramalpha
* 水印透明度
*@parampositionWidth
* 水印横向位置
*@parampositionHeight
* 水印纵向位置
*@paramfont
* 水印文字字体
*@paramcolor
* 水印文字颜色*/
public static void setImageMarkOptions(float alpha, intpositionWidth,intpositionHeight, Font font, Color color) {if (alpha != 0.0f)
ImageRemarkUtil.alpha=alpha;if (positionWidth != 0)
ImageRemarkUtil.positionWidth=positionWidth;if (positionHeight != 0)
ImageRemarkUtil.positionHeight=positionHeight;if (font != null)
ImageRemarkUtil.font=font;if (color != null)
ImageRemarkUtil.color=color;
}/*** 给图片添加水印图片
*
*@paramiconPath
* 水印图片路径
*@paramsrcImgPath
* 源图片路径
*@paramtargerPath
* 目标图片路径*/
public static voidmarkImageByIcon(String iconPath, String srcImgPath,
String targerPath) {
markImageByIcon(iconPath, srcImgPath, targerPath,null);
}/*** 给图片添加水印图片、可设置水印图片旋转角度
*
*@paramiconPath
* 水印图片路径
*@paramsrcImgPath
* 源图片路径
*@paramtargerPath
* 目标图片路径
*@paramdegree
* 水印图片旋转角度*/
public static voidmarkImageByIcon(String iconPath, String srcImgPath,
String targerPath, Integer degree) {
OutputStream os= null;try{
Image srcImg= ImageIO.read(newFile(srcImgPath));
BufferedImage buffImg= new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);//1、得到画笔对象
Graphics2D g =buffImg.createGraphics();//2、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);//3、设置水印旋转
if (null !=degree) {
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2,
(double) buffImg.getHeight() / 2);
}//4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度
ImageIcon imgIcon = newImageIcon(iconPath);//5、得到Image对象。
Image img =imgIcon.getImage();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));//6、水印图片的位置
g.drawImage(img, positionWidth, positionHeight, null);
g.drawImage(img, positionWidth+10, positionHeight+10, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));//7、释放资源
g.dispose();//8、生成图片
os = newFileOutputStream(targerPath);
ImageIO.write(buffImg,"JPG", os);
System.out.println("图片完成添加水印图片");
}catch(Exception e) {
e.printStackTrace();
}finally{try{if (null !=os)
os.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}/*** 给图片添加水印文字
*
*@paramlogoText
* 水印文字
*@paramsrcImgPath
* 源图片路径
*@paramtargerPath
* 目标图片路径*/
public static voidmarkImageByText(String logoText, String srcImgPath,
String targerPath) {//markImageByText(logoText, srcImgPath, targerPath, null);
}/*** 给图片添加水印文字、可设置水印文字的旋转角度
*
*@paramlogoText
*@paramsrcImgPath
*@paramtargerPath
*@paramdegree*/
public static voidmarkImageByText(String logoText, String srcImgPath,
String targerPath, Integer degree,int positionWidth, intpositionHeight) {
InputStream is= null;
OutputStream os= null;try{//1、源图片
Image srcImg = ImageIO.read(newFile(srcImgPath));
BufferedImage buffImg= new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);//2、得到画笔对象
Graphics2D g =buffImg.createGraphics();//3、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);//4、设置水印旋转
if (null !=degree) {
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2,
(double) buffImg.getHeight() / 2);
}//5、设置水印文字颜色
g.setColor(color);//6、设置水印文字Font
g.setFont(font);//7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));//8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
g.drawString(logoText, positionWidth, positionHeight);//9、释放资源
g.dispose();//10、生成图片
os = newFileOutputStream(targerPath);
ImageIO.write(buffImg,"JPG", os);
System.out.println("图片完成添加水印文字");
}catch(Exception e) {
e.printStackTrace();
}finally{try{if (null !=is)
is.close();
}catch(Exception e) {
e.printStackTrace();
}try{if (null !=os)
os.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}public static ListfindFiles(String dirPath) {
List fileList = new ArrayList();//获得指定文件对象
File file = newFile(dirPath);//获得该文件夹内的所有文件
File[] array =file.listFiles();for(int i=0;i
fileList.add(array[i].getAbsolutePath());
}
}returnfileList;
}public static voidmain(String[] args) {
String srcImgPath= "F:/test/";
String targetImgPath= "F:/test/result/";
String logoText= "水 印 标 识";
String logoTest2= "复 印 无 效";
List fileList =findFiles(srcImgPath);
System.out.println(fileList);
System.out.println("给图片添加水印文字开始...");for(String srcFile : fileList) {
System.out.println(srcFile);
System.out.println(srcImgPath);
String targetFile= srcImgPath + srcFile.substring(srcFile.lastIndexOf("\\"), srcFile.indexOf(".jpg")) + "_Temp.jpg";//给图片添加水印文字,水印文字旋转-45
markImageByText(logoText, srcFile, targetFile, -45, positionWidth, positionHeight);//targetFile = srcFile.substring(0, srcFile.indexOf(".jpg")) + "_rotate.jpg";
markImageByText(logoTest2, targetFile, targetImgPath + srcFile.substring(srcFile.lastIndexOf("\\")), -45, positionWidth+200, positionHeight+200);
File file= newFile(targetFile);
file.delete();
}
System.out.println("给图片添加水印文字结束...");
}//public static void main(String[] args) {//String srcImgPath = "F:/test/1.jpg";//String logoText = "复 印 无 效";//String iconPath = "F:/test/2.jpg";//
//String targerTextPath = "F:/test/qie_text.jpg";//String targerTextPath2 = "F:/test/qie_text_rotate.jpg";//
//String targerIconPath = "F:/test/qie_icon.jpg";//String targerIconPath2 = "F:/test/qie_icon_rotate.jpg";//
//System.out.println("给图片添加水印文字开始...");// //给图片添加水印文字//markImageByText(logoText, srcImgPath, targerTextPath);// //给图片添加水印文字,水印文字旋转-45//markImageByText(logoText, srcImgPath, targerTextPath2, -45);//System.out.println("给图片添加水印文字结束...");//
//System.out.println("给图片添加水印图片开始...");//setImageMarkOptions(0.3f, 1, 1, null, null);// //给图片添加水印图片//markImageByIcon(iconPath, srcImgPath, targerIconPath);// //给图片添加水印图片,水印图片旋转-45//markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);//System.out.println("给图片添加水印图片结束...");//}
}