Java 图片添加水印
概述
在许多应用程序中,我们经常需要对图片进行处理,其中之一就是给图片添加水印。水印可以用于版权保护、身份认证等目的。Java 提供了丰富的图像处理库,使我们能够轻松地实现图片添加水印的功能。
基本原理
给图片添加水印的基本原理是在图片上叠加一层透明的图像,通常是文字或者图片。这个透明的图像就是水印。我们可以通过图像处理库来操作原始图片和水印图片,将它们合并生成新的图片。
实现步骤
下面是一个简单的实现步骤,以帮助您了解如何在 Java 中给图片添加水印:
- 导入所需的库。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
- 读取原始图片和水印图片。
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"));
完整示例
下面是一个完整的示例代码,展示了如何使用 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 上绘制水印图片 --> 释放资源
释放资源 --> 保存生成的图片