java如何加水印
添加水印的方法
使用Java的Graphics2D类
通过Graphics2D绘制文本或图像水印到目标图片上。以下是核心代码示例:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Watermark {
public static void addTextWatermark(File inputFile, File outputFile, String text) throws Exception {
BufferedImage image = ImageIO.read(inputFile);
Graphics2D g2d = (Graphics2D) image.getGraphics();
// 设置字体和颜色
g2d.setFont(new Font("Arial", Font.BOLD, 30));
g2d.setColor(Color.RED);
// 计算水印位置(居中)
FontMetrics metrics = g2d.getFontMetrics();
int x = (image.getWidth() - metrics.stringWidth(text)) / 2;
int y = (image.getHeight() - metrics.getHeight()) / 2 + metrics.getAscent();
// 绘制水印
g2d.drawString(text, x, y);
g2d.dispose();
ImageIO.write(image, "png", outputFile);
}
}
使用透明图像水印 加载PNG格式的透明水印图片,叠加到目标图像上:
public static void addImageWatermark(File inputFile, File watermarkFile, File outputFile) throws Exception {
BufferedImage image = ImageIO.read(inputFile);
BufferedImage watermark = ImageIO.read(watermarkFile);
Graphics2D g2d = (Graphics2D) image.getGraphics();
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); // 设置透明度
g2d.drawImage(watermark, image.getWidth() - watermark.getWidth() - 10,
image.getHeight() - watermark.getHeight() - 10, null);
g2d.dispose();
ImageIO.write(image, "png", outputFile);
}
进阶处理技巧
旋转水印
通过AffineTransform实现倾斜水印效果:
Graphics2D g2d = (Graphics2D) image.getGraphics();
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(-45)); // 旋转45度
g2d.setTransform(at);
g2d.drawString("Watermark", x, y);
平铺水印 使用循环在图像上重复绘制水印:

for (int x = 0; x < image.getWidth(); x += watermark.getWidth() + 50) {
for (int y = 0; y < image.getHeight(); y += watermark.getHeight() + 50) {
g2d.drawImage(watermark, x, y, null);
}
}
注意事项
- 处理完成后务必调用
g2d.dispose()释放资源 - 输出格式建议使用PNG保持质量
- 大文件处理时需注意内存消耗,可考虑分块处理






