Java 图片水印居中实现方法
1. 概述
在开发中,经常需要给图片添加水印来保护版权或者显示来源信息。本文将介绍如何使用 Java 实现图片水印居中的功能。我们将使用 Java 的 Graphics2D 类来进行操作。
2. 实现步骤
下面是实现图片水印居中的具体步骤:
步骤 | 描述 |
---|---|
1. 加载原始图片和水印图片 | 使用 Java 的 ImageIO 类加载原始图片和水印图片 |
2. 创建一个新的 BufferedImage 对象 | 用于存储加了水印后的图片 |
3. 获取原始图片的宽度和高度 | 使用原始图片的 getWidth() 和 getHeight() 方法 |
4. 计算水印的位置 | 计算水印的横坐标和纵坐标,使其居中 |
5. 将原始图片绘制到新的 BufferedImage 对象中 | 使用 Graphics2D 类的 drawImage() 方法 |
6. 将水印图片绘制到新的 BufferedImage 对象中 | 使用 Graphics2D 类的 drawImage() 方法 |
7. 将新的 BufferedImage 对象保存为图片文件 | 使用 ImageIO 类的 write() 方法 |
3. 代码实现
3.1 加载原始图片和水印图片
String originalImagePath = "path/to/original/image.jpg";
String watermarkImagePath = "path/to/watermark/image.png";
BufferedImage originalImage = ImageIO.read(new File(originalImagePath));
BufferedImage watermarkImage = ImageIO.read(new File(watermarkImagePath));
3.2 创建新的 BufferedImage 对象
BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB);
3.3 获取原始图片的宽度和高度
int originalWidth = originalImage.getWidth();
int originalHeight = originalImage.getHeight();
3.4 计算水印的位置
int watermarkX = (originalWidth - watermarkImage.getWidth()) / 2;
int watermarkY = (originalHeight - watermarkImage.getHeight()) / 2;
3.5 绘制原始图片和水印图片
Graphics2D graphics = newImage.createGraphics();
graphics.drawImage(originalImage, 0, 0, null);
graphics.drawImage(watermarkImage, watermarkX, watermarkY, null);
graphics.dispose();
3.6 保存新的图片文件
String outputImagePath = "path/to/output/image.jpg";
ImageIO.write(newImage, "jpg", new File(outputImagePath));
4. 代码解释
下面是每一步代码的详细解释:
4.1 加载原始图片和水印图片
使用 ImageIO 类的 read() 方法从文件加载原始图片和水印图片。需要注意的是,图片的路径需要根据实际情况进行修改。
4.2 创建新的 BufferedImage 对象
使用原始图片的宽度和高度创建一个新的 BufferedImage 对象。这个对象将用来存储加了水印后的图片。
4.3 获取原始图片的宽度和高度
使用原始图片的 getWidth() 和 getHeight() 方法获取原始图片的宽度和高度。
4.4 计算水印的位置
根据原始图片的宽度和高度以及水印图片的宽度和高度,计算出水印图片在原始图片中的横坐标和纵坐标。这里使用的是居中的算法,即让水印图片在原始图片的中间。
4.5 绘制原始图片和水印图片
使用 Graphics2D 类的 drawImage() 方法将原始图片和水印图片绘制到新的 BufferedImage 对象中。先绘制原始图片,再绘制水印图片。
4.6 保存新的图片文件
使用 ImageIO 类的 write() 方法将新的 BufferedImage 对象保存为图片文件。需要注意的是,保存的图片格式和输出路径需要根据实际情况进行修改。
5. 关系图
erDiagram
IMAGE_WATERMARK ||--|| IMAGE
IMAGE_WATERMARK {
String originalImagePath
String watermarkImagePath
int originalWidth
int originalHeight
int watermarkX
int watermarkY
String output