思路:
1.获取图片文件 路径、输出路径
2.设定水印文字格式:字体类型(例如宋体、仿宋、Times New Roman等)、字体风格(例如斜体字、加粗等)、以及字号大小
3.加水印 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); // 设置字体
4.输出图片文件
代码:
package practive100;
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 javax.imageio.ImageIO;
public class ImageFont {
public void addWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent, 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 x = srcImgWidth - 2 * getWatermarkLength(waterMarkContent, g); int y =
* srcImgHeight - 2 * getWatermarkLength(waterMarkContent, g);
*/
g.drawString(waterMarkContent, 0, 40);
g.dispose();
// 输出图片tarImgPath
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, "jpg", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
} catch (Exception e) {
// TODO: handle exception
}
}
// 用于计算水印文字放在中间位置
// public int getWatermarkLength(String waterMarkContent, Graphics2D g) {
// return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
// }
public static void main(String[] args) {
// TODO Auto-generated method stub
Font font = new Font("微软雅黑", Font.PLAIN, 40);// 水印字体
String srcImgPath = "C:/pic/aa.jpg";// 源图片地址
String tarImgPath = "C:/pic/bb.jpg";// 添加上水印后地址
String waterMarkContent = "图片来源:精神小伙大哥哥";// 水印内容
Color color = new Color(255, 255, 255, 128);// 水印图片色彩,以及透明度
new ImageFont().addWaterMark(srcImgPath, tarImgPath, waterMarkContent, color, font);
}
}