当前位置:首页 > Java

java如何加水印

2026-03-22 23:35:14Java

添加水印的方法

使用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);

平铺水印 使用循环在图像上重复绘制水印:

java如何加水印

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保持质量
  • 大文件处理时需注意内存消耗,可考虑分块处理

标签: 水印java
分享给朋友:

相关文章

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名…

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

vue实现水印组件

vue实现水印组件

Vue 水印组件的实现方法 使用Canvas绘制水印 在Vue组件中通过Canvas动态生成水印图案,将其作为背景添加到目标元素上。 <template> <div ref="…

java版本如何查看

java版本如何查看

查看Java版本的命令行方法 在命令行或终端中运行以下命令可以查看当前安装的Java版本: java -version 输出示例: java version "1.8.0_301" Java(TM…