Java 图片指定位置加水印的实现
一、整体流程
为了实现在 Java 中给图片指定位置加水印的功能,我们可以按以下步骤进行操作:
- 加载原始图片和水印图片;
- 创建一个新的图片,并将原始图片绘制到新图片上;
- 在新图片上绘制水印图片,并指定位置;
- 保存新图片。
下面将详细介绍每一步需要做的事情,并提供相应的Java代码来实现。
二、具体步骤
1. 加载原始图片和水印图片
首先,我们需要加载要添加水印的原始图片和水印图片。Java提供了ImageIO
类来加载图片,具体代码如下:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 加载原始图片
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
// 加载水印图片
BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));
// 在这里进行后续步骤...
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们使用ImageIO.read()
方法加载了原始图片和水印图片,并将它们分别存储在originalImage
和watermarkImage
变量中。
2. 创建新图片并绘制原始图片
接下来,我们需要创建一个新的图片,并将原始图片绘制到新图片上。Java提供了BufferedImage
类来操作图片,具体代码如下:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 加载原始图片和水印图片...
// 创建新图片
BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB);
// 获取新图片的绘图对象
Graphics2D graphics = newImage.createGraphics();
// 将原始图片绘制到新图片上
graphics.drawImage(originalImage, 0, 0, null);
// 在这里进行后续步骤...
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们使用BufferedImage
的构造函数创建了一个与原始图片大小相同的新图片,并使用newImage.createGraphics()
方法获取新图片的绘图对象graphics
。然后,我们使用graphics.drawImage()
方法将原始图片绘制到新图片上。
3. 绘制水印图片并指定位置
现在,我们需要将水印图片绘制到新图片上,并指定它的位置。具体代码如下:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 加载原始图片和水印图片...
// 创建新图片和绘图对象...
// 绘制水印图片并指定位置
int watermarkX = newImage.getWidth() - watermarkImage.getWidth();
int watermarkY = newImage.getHeight() - watermarkImage.getHeight();
graphics.drawImage(watermarkImage, watermarkX, watermarkY, null);
// 在这里进行后续步骤...
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们通过计算水印图片的位置,将水印图片绘制到新图片的右下角。
4. 保存新图片
最后,我们需要将添加了水印的新图片保存到本地。具体代码如下:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 加载原始图片和水印图片...
// 创建新图片和绘图对象...
// 绘制水印图片并指定位置...
// 保存新图片
File outputFile = new File("output.jpg");
ImageIO.write(newImage, "jpg", outputFile);
System.out.println("水印添加完成!");
} catch (IOException e) {
e.printStackTrace();
}