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