Java图片打水印
在很多应用场景中,我们需要在图片上添加水印来保护图片的版权,或者用于标识图片的来源等目的。在Java中,我们可以通过一些库来实现图片打水印的功能,下面我们就来介绍一种简单的实现方法。
1. 准备工作
在开始之前,我们需要准备两个重要的库:javax.imageio
和java.awt.image
。javax.imageio
提供了一组用于读取和写入图像的类,java.awt.image
则提供了对图像处理的支持。
2. 实现步骤
2.1 读取原始图片
首先,我们需要读取一张原始图片。我们可以使用ImageIO
类的read
方法来读取一个File
对象中的图片。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageUtils {
public static BufferedImage readImage(String filePath) throws IOException {
File file = new File(filePath);
return ImageIO.read(file);
}
}
2.2 添加水印
接下来,我们需要在原始图片上添加水印。我们可以通过Graphics2D
类来实现在图片上绘制文本的功能。
import java.awt.*;
import java.awt.image.BufferedImage;
public class ImageUtils {
public static void addWatermark(BufferedImage image, String watermarkText, int x, int y) {
Graphics2D g2d = image.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setColor(Color.RED);
g2d.setFont(new Font("Arial", Font.BOLD, 30));
g2d.drawString(watermarkText, x, y);
g2d.dispose();
}
}
2.3 保存图片
最后,我们将添加水印后的图片保存到一个新的文件中。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageUtils {
public static void saveImage(BufferedImage image, String filePath, String formatName) throws IOException {
File file = new File(filePath);
ImageIO.write(image, formatName, file);
}
}
3. 完整示例
下面是一个完整的示例代码,演示了如何读取一张图片,添加水印并保存。
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageUtils {
public static BufferedImage readImage(String filePath) throws IOException {
File file = new File(filePath);
return ImageIO.read(file);
}
public static void addWatermark(BufferedImage image, String watermarkText, int x, int y) {
Graphics2D g2d = image.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setColor(Color.RED);
g2d.setFont(new Font("Arial", Font.BOLD, 30));
g2d.drawString(watermarkText, x, y);
g2d.dispose();
}
public static void saveImage(BufferedImage image, String filePath, String formatName) throws IOException {
File file = new File(filePath);
ImageIO.write(image, formatName, file);
}
public static void main(String[] args) {
try {
BufferedImage image = readImage("original.jpg");
addWatermark(image, "Watermark", 100, 100);
saveImage(image, "watermarked.jpg", "JPG");
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 状态图
下面是一个简单的状态图,展示了图片打水印的整个过程。
stateDiagram
[*] --> ReadImage
ReadImage --> AddWatermark
AddWatermark --> SaveImage
SaveImage --> [*]
5. 类图
我们还可以使用类图来展示整个程序的类结构。
classDiagram
ImageUtils --|> Object
ImageUtils : +readImage(String) : BufferedImage
ImageUtils : +addWatermark(BufferedImage, String, int, int) : void
ImageUtils : +saveImage(BufferedImage, String, String) : void
6. 总结
通过本文的介绍,我们了解了如何在Java中使用javax.imageio
和java.awt.image
库来实现图片打