Java 图片添加水印

概述

在许多应用程序中,我们经常需要对图片进行处理,其中之一就是给图片添加水印。水印可以用于版权保护、身份认证等目的。Java 提供了丰富的图像处理库,使我们能够轻松地实现图片添加水印的功能。

基本原理

给图片添加水印的基本原理是在图片上叠加一层透明的图像,通常是文字或者图片。这个透明的图像就是水印。我们可以通过图像处理库来操作原始图片和水印图片,将它们合并生成新的图片。

实现步骤

下面是一个简单的实现步骤,以帮助您了解如何在 Java 中给图片添加水印:

  1. 导入所需的库。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
  1. 读取原始图片和水印图片。
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));
  1. 创建一个新的 BufferedImage 对象,用于存储生成的图片。
BufferedImage combinedImage = new BufferedImage(
    originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB);
  1. 获取 Graphics2D 对象,用于在新的 BufferedImage 上进行绘制。
Graphics2D g2d = (Graphics2D) combinedImage.getGraphics();
  1. 在新的 BufferedImage 上绘制原始图片。
g2d.drawImage(originalImage, 0, 0, null);
  1. 在新的 BufferedImage 上绘制水印图片。
g2d.drawImage(watermarkImage, 0, 0, null);
  1. 释放资源。
g2d.dispose();
  1. 保存生成的图片。
ImageIO.write(combinedImage, "JPG", new File("output.jpg"));

完整示例

下面是一个完整的示例代码,展示了如何使用 Java 给图片添加水印:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class WatermarkExample {
    public static void main(String[] args) {
        try {
            // 读取原始图片和水印图片
            BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
            BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));
            
            // 创建一个新的 BufferedImage 对象,用于存储生成的图片
            BufferedImage combinedImage = new BufferedImage(
                originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB);
            
            // 获取 Graphics2D 对象,用于在新的 BufferedImage 上进行绘制
            Graphics2D g2d = (Graphics2D) combinedImage.getGraphics();
            
            // 在新的 BufferedImage 上绘制原始图片
            g2d.drawImage(originalImage, 0, 0, null);
            
            // 在新的 BufferedImage 上绘制水印图片
            g2d.drawImage(watermarkImage, 0, 0, null);
            
            // 释放资源
            g2d.dispose();
            
            // 保存生成的图片
            ImageIO.write(combinedImage, "JPG", new File("output.jpg"));
            
            System.out.println("水印添加成功!");
        } catch (IOException e) {
            System.out.println("水印添加失败:" + e.getMessage());
        }
    }
}

运行结果

上述示例代码将生成一个新的图片 output.jpg,其中包含了原始图片和水印图片。您可以根据自己的需求修改代码中的文件路径和文件名。

状态图

下面是一个状态图,展示了图片添加水印的基本流程:

stateDiagram
    [*] --> 读取原始图片
    读取原始图片 --> 读取水印图片
    读取水印图片 --> 创建新的 BufferedImage
    创建新的 BufferedImage --> 获取 Graphics2D 对象
    获取 Graphics2D 对象 --> 在新的 BufferedImage 上绘制原始图片
    在新的 BufferedImage 上绘制原始图片 --> 在新的 BufferedImage 上绘制水印图片
    在新的 BufferedImage 上绘制水印图片 --> 释放资源
    释放资源 --> 保存生成的图片