java 给图片添加暗水印_java实现给图片添加水印

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("给图片添加水印图片结束...");//}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值