Java实现图片加水印代码示例

0 下载量 77 浏览量 更新于2024-08-31 收藏 43KB PDF 举报
"这篇Java代码示例展示了如何在图片上添加水印,主要适用于开发者学习和参考。水印可以是图像或文字,提供了两种不同处理方式:一种是直接添加,另一种是旋转添加。" 在Java编程中,为图片添加水印是一项常见的任务,尤其在处理网站或应用中的版权保护时。以下的Java代码片段详细解释了如何通过编程实现这一功能: 首先,我们需要导入必要的包,包括`java.awt`和`java.awt.image`,这些包提供了图形处理和图像操作的类。代码中还引入了`javax.swing.ImageIcon`,虽然在这个特定示例中没有直接使用,但在处理图像时,尤其是加载图标时,它可能会派上用场。 ```java import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; ``` 接下来,定义一个名为`ImageMarkLogoByIcon`的公共类,其中包含了一个`main`方法,这是程序的入口点。代码中还引用了一个名为`Michael`的作者,这通常表示代码由这个人编写。 ```java public class ImageMarkLogoByIcon { public static void main(String[] args) { // 图片源路径、水印图标路径及目标图片路径 String srcImgPath = "d:/test/michael/myblog_01.png"; String iconPath = "d:/test/michael/blog_logo.png"; String targerPath = "d:/test/michael/img_mark_icon.jpg"; String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg"; } } ``` 在`main`方法中,定义了四个字符串变量,分别代表原始图片路径、水印图片路径以及两个目标图片路径。这两个目标图片路径用于存储添加水印后的图片,一个是正常添加,另一个是添加并旋转水印。 接下来,实际的水印添加过程是在`main`方法内部进行的,这里省略了具体实现。通常,我们首先会加载源图片和水印图片,然后创建一个新的`BufferedImage`对象来保存结果。接着,使用`Graphics2D`对象在源图片上绘制水印,调整其透明度、位置和旋转角度。最后,将结果写入到目标文件中。 ```java // 加载图片和水印 Image srcImg = ImageIO.read(new File(srcImgPath)); Image icon = ImageIO.read(new File(iconPath)); // 创建BufferedImage对象 BufferedImage targetImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); // 创建Graphics2D对象并设置属性 Graphics2D g = targetImg.createGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f)); // 设置水印透明度 // 绘制水印 g.drawImage(icon, x, y, null); // 添加水印 g.rotate(Math.toRadians(angle), centerX, centerY); // 旋转水印 // 清理并保存结果 g.dispose(); ImageIO.write(targetImg, "jpg", new File(targerPath)); ``` 这段代码的核心在于`Graphics2D`对象,它可以用来绘制图形、文本和图像。`setRenderingHint`方法用于提高图像的渲染质量,`setComposite`方法设置透明度,`drawImage`方法则负责在源图片上绘制水印。如果需要旋转水印,可以通过`rotate`方法实现。 通过这种方式,我们可以根据需要灵活地在图片上添加水印,无论是文字还是图像,都能轻松完成。这个示例对于任何想在Java项目中处理图像添加水印的开发者来说都是一个很好的起点。