在网络中的很多地方都有水印的存在,比如微信公众号上面的图片等……….所以,看看自己能否写一个可以给图片添加水印的工具类。
先来一个简单的水印添加代码,将图片的来源的地址以及介绍添加到图片的右下脚。
如图显示
具体代码如下
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class ImageUtil {
/**
* 添加水印
*
* @param srcImgPath 原图片地址
* @param tarImgPath 添加水印后的图片地址
* @param waterMarkContent 水印内容集合
* @param markContentColor 颜色
* @param font 字体
*/
public static void addWaterMark(String srcImgPath, String tarImgPath, List<String> waterMarkContentList,
Color markContentColor, Font font) {
try {
// 读取原图片信息
File srcImgFile = new File(srcImgPath);
Image srcImg = ImageIO.read(srcImgFile);
// 获取宽、高
int srcImgWidth = srcImg.getWidth(null);
int srcImgHeight = srcImg.getHeight(null);
// 添加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); // 根据图片的背景设置水印颜色
g.setFont(font); // 设置字体
int maxLength = 0;
// 先循环获取最长的水印长度
for (String waterMarkConten : waterMarkContentList) {
int watermarkLength = getWatermarkLength(waterMarkConten, g);
if (watermarkLength > maxLength) {
maxLength = watermarkLength;
}
}
// 开始绘画水印
for (int i = 0; i < waterMarkContentList.size(); i++) {
String content = waterMarkContentList.get(i);
// 设置水印的坐标
int x = srcImgWidth - maxLength;
int y = srcImgHeight - ((i + 1) * font.getSize());
g.drawString(content, x, y); // 画出水印
}
g.dispose();
// 输出图片
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, "jpg", outImgStream);
outImgStream.flush();
outImgStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
public static void main(String[] args) {
Font font = new Font("微软雅黑", Font.PLAIN, 25); // 水印字体
String srcImgPath = "c://1.jpg"; // 源图片地址
String tarImgPath = "c://2.jpg"; // 待存储的地址
List<String> contentList = new ArrayList<String>();
contentList.add("Java添加图片水印");
contentList.add("图片来源:https://blog.mojxtang.com/");
Color color = new Color(255, 255, 255, 100); // 水印图片色彩以及透明度
addWaterMark(srcImgPath, tarImgPath, contentList, color, font);
}
}
本文地址:Java添加图片水印