Java 如何给图片添加水印
想要在 java 程序中绘图,一定绕不开 Graphics
类,这里用它的子类 Graphics2D
类,java 绘图的基本操作流程如下:
- 使用
ImageIO
类的read()
方法将需要被添加水印的图片加载; - 创建一个
BufferedImage
实例 ,在其构造函数里指定长,宽,高,类型为BufferedImage.TYPE_INT_RGB
,即创建一个指定分辨率的空图片bimage
; - 调用
BufferedImage
对象的createGraphics()
方法,得到Graphics2D
实例; - 使用
Graphics2D
实例进行绘图,所以绘图操作的坐标基于创建此Graphics2D
实例的BufferedImage
实例。示例中在图片上画了一串字符串; - 调用
Graphics2D
对象的dispose()
方法,进行绘图处理,使绘图效果应用到BufferedImage
对象; - 使用
ImageIO
类的write()
方法将BufferedImage
对象转换到文件或二进制流。
1 | // 加载图片 |
批量给图片添加水印
如果想要批量的给图片添加水印,想到的办法是将待处理图片都存放到同一目录下,这里指定为 images/
,通过调用 File
对象的 listFiles()
方法获得目录下所有文件的相对路径(注意它包括目录下的子目录,所以需要判断当前操作对象是不是文件),再对每个 File
对象进行绘图处理。
1 | // 加载目录路径 |
利用配置文件添加水印
java 读取配置文件的方法有好几种,这里选择的是通过读取 .preperties
文件来进行配置。
观察上面的代码,我们能抽取出来部分配置信息并写入 watermark.properties
文件中,让 java 程序自动读取,而使用者只需要进行这部分信息的配置,并且把待添加水印的图片存放到指定路径即可。 watermark.properties
文件如下:
1 | # 待添加水印图片的路径 |
创建输入缓冲流 InputStream
类, filePath
是配置文件 watermark.properties
的相对路径。然后利用 properties
类来读取配置文件中的属性,利用方法 getProperty(String key)
可以得到文件内的属性配置。
这里我并没有理解通过输入缓冲流进行读取配置文件为啥这么写,如果有知道的同学欢迎发邮件指教
1 | // 通过输入缓冲流进行读取配置文件 |