返回
《图片水印,仅需几行代码,快速实现图片加水印》
后端
2023-12-27 01:43:12
Java实现添加文字水印和图片水印功能
概述
水印是保护数字图像版权和所有权的一种有效方式。在Java中,可以使用Graphics2D类轻松地添加文字和图片水印到图像中。本文将深入探讨如何实现这两种水印技术,并提供示例代码。
文字水印
文字水印涉及在图像上叠加文本。它可以用来声明所有权、提供附加信息或防止盗用。
代码示例
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class TextWatermark {
public static void main(String[] args) throws Exception {
// 读取原始图像
BufferedImage image = ImageIO.read(new File("image.jpg"));
// 创建Graphics2D对象
Graphics2D g2d = image.createGraphics();
// 设置水印文本和样式
String watermark = "版权所有";
Font font = new Font("Arial", Font.BOLD, 30);
g2d.setFont(font);
g2d.setColor(Color.RED);
// 计算并绘制水印文本
int width = image.getWidth();
int height = image.getHeight();
int textWidth = g2d.getFontMetrics().stringWidth(watermark);
int textHeight = g2d.getFontMetrics().getHeight();
g2d.drawString(watermark, (width - textWidth) / 2, (height - textHeight) / 2);
// 释放Graphics2D对象
g2d.dispose();
// 写入带水印的图像
ImageIO.write(image, "jpg", new File("image_with_watermark.jpg"));
}
}
图片水印
图片水印涉及在图像上叠加另一个图像。它通常用于防止篡改或盗用,因为去除图片水印非常困难。
代码示例
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class ImageWatermark {
public static void main(String[] args) throws Exception {
// 读取原始图像和水印图像
BufferedImage image = ImageIO.read(new File("image.jpg"));
BufferedImage watermark = ImageIO.read(new File("watermark.png"));
// 创建Graphics2D对象
Graphics2D g2d = image.createGraphics();
// 绘制水印图像
int width = image.getWidth();
int height = image.getHeight();
int watermarkWidth = watermark.getWidth();
int watermarkHeight = watermark.getHeight();
g2d.drawImage(watermark, (width - watermarkWidth) / 2, (height - watermarkHeight) / 2, null);
// 释放Graphics2D对象
g2d.dispose();
// 写入带水印的图像
ImageIO.write(image, "jpg", new File("image_with_watermark.jpg"));
}
}
结论
通过使用Java的Graphics2D类,可以轻松地向图像中添加文字水印和图片水印。这些技术为保护数字图像的版权和所有权提供了有效的方法。通过利用本文提供的示例代码,开发者可以轻松地将水印集成到他们的应用程序或项目中。
常见问题解答
-
如何调整水印的透明度?
可以使用
setComposite()
方法设置透明度,AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)
,其中alpha
是从0.0到1.0的浮点数。 -
如何旋转水印?
可以使用
rotate()
方法旋转水印,g2d.rotate(Math.toRadians(angle))
,其中angle
是角度。 -
如何自定义水印字体?
可以使用
setFont()
方法自定义水印字体,g2d.setFont(new Font("Font name", Font.STYLE, Font size))
。 -
如何定位水印到特定位置?
可以使用
drawString()
和drawImage()
方法的x
和y
参数将水印定位到特定位置。 -
是否可以同时添加多个水印到图像中?
是的,可以通过多次调用
drawString()
和drawImage()
方法来同时添加多个水印。