当前位置:首页 > Java

java如何加水印

2026-03-22 23:35:14Java

添加水印的方法

使用Java的Graphics2D 通过Graphics2D绘制文本或图像水印到目标图片上。以下是核心代码示例:

java如何加水印

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格式的透明水印图片,叠加到目标图像上:

java如何加水印

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

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

相关文章

java如何调用方法

java如何调用方法

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

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…

vue页面实现水印

vue页面实现水印

实现Vue页面水印的方法 使用CSS背景图实现水印 在Vue组件中通过CSS添加重复水印背景,适合静态水印。 <template> <div class="watermark-…

php 实现 java md5

php 实现 java md5

在 PHP 中实现与 Java 相同的 MD5 哈希算法,关键在于确保编码和输出格式的一致性。以下是具体实现方法和注意事项: 确保字符串编码一致 Java 的 String.getBytes() 默…

php 实现java md5加密

php 实现java md5加密

PHP 实现 Java MD5 加密的兼容方法 Java 和 PHP 的 MD5 加密结果可能存在差异,主要因字符编码或输出格式不同。以下是确保两者结果一致的方法: 使用 hash 函数并处理编码…

java实现php

java实现php

Java 实现 PHP 功能的方法 在 Java 中实现 PHP 的功能通常涉及以下几个方面:字符串处理、Web 开发、数据库操作等。以下是几种常见需求的实现方法。 字符串处理 PHP 中的字符串处…