Java图片水印生成器代码 - 批量给自己的网站图片加水印
最近在做一款APP,App中的图片是自己一个个的画出来的,为了保证图片不被盗用和处理,所以就需要加上水印防盗。这跟CSDN一样。
注意事项:1. 我是在window7 + eclipse 下完成的
2. eclipse中项目的JRE System Library需要配置为JDK,要不然会提示缺少类库
3. 我之所以用图片水印而不是文字水印,是因为文字水印太麻烦且得不到想要的效果。
4. 用图片水印时,需要将文字改成图片的解决方案是通过网上搜索,搜索在线水印生成就可以了。我推荐这个网站:http://www.qt86.com/changyong.php
需求:将一个文件夹内的所有图片加上水印输出到另外一个文件夹。
设计:开发一个Java类,输入目录地址、输出目录地址、水印文件、水印旋转角度,将一个目录的所有图片加上水印后存储到另外一个目录。
实现:
登录:http://www.qt86.com 网站,例如输入:软考大师 www.ruankaods.com看看格式,最好能用多排,并错开,这样在合并文件的时候,看到的效果是最好的。
注意,在点击生成前,请在【背景栏】选择透明背景,字色也应该选一个灰色的,如果一行内容太多就要选择小型字,要不生成的图片中水印文字会自动换行,导致水印文件会很难看。当然,具体的内容还是要自己根据需求调整了。
下面的代码是批量将一个目录中的文件都加水印,如果你只是改一个文件也可以实现。
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.FileOutputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class ImageWatermark {
/**
* 给图片添加水印
* @param watermarkFilePath 水印图片路径
* @param srcImagePath 源图片路径
* @param targerImagePath 目标图片路径
* @param degree 水印图片旋转角度
*/
public static void addImageWatermark(String watermarkFilePath, String srcImagePath, String targerImagePath, Integer degree) {
OutputStream os = null;
try {
Image srcImage = ImageIO.read(new File(srcImagePath));
BufferedImage graphics = new BufferedImage(srcImage.getWidth(null), srcImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 得到画布对象
Graphics2D g = graphics.createGraphics();
// 设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImage.getScaledInstance(srcImage.getWidth(null), srcImage.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);
if (null != degree) {
// 设置水印旋转角度及坐标
g.rotate(Math.toRadians(degree), (double) graphics.getWidth() / 2, (double) graphics.getHeight() / 2);
}
// 水印图象的路径 (如果需要设置透明度需要gif或者png格式的图片 )
ImageIcon imgIcon = new ImageIcon(watermarkFilePath);
// 得到Image对象。
Image image = imgIcon.getImage();
// 透明度
float alpha = 0.25f;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 表示水印图片的位置
g.drawImage(image, 20, 30, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
os = new FileOutputStream(targerImagePath);
// 生成图片 (可设置 jpg或者png格式)
ImageIO.write(graphics, "png", os);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
File f = new File("D:\\图片\\全部图片");
File[] p = f.listFiles();
// for(File file : p){
// System.out.println(file.getName());
// }
for (File photo : p) {
if(!photo.isDirectory()){
ImageWatermark.addImageWatermark("C:/water.png",photo.getPath(),"D:\\图片\\全部图片\\target\\" + photo.getName() , -15);
}
}
System.exit(0);
}
}
大家可以看到,软考大师 ruankaods.com的图片水印正式加入到刚才的图片中了。