基于Graphics2D上传图片添加自定义水印
温馨提示:
本文最后更新于 2024年03月28日,已超过 300 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
今天实现一个小需求:给网站上传的图片添加个性水印,实现一个个性化定制,虽说暂时个生存在网络边缘的小破站,咱也是个有理想的小破站不是,先把逼格整上去再说。
技术背景
Java绘图库:java.awt.*
Java的绘图库提供了丰富的绘图功能,其中Graphics2D
类是我们添加水印的主要工具。可以通过Graphics2D类绘制各种文本、图形等各种元素
图像I/O库:javax.imageio.*
图像I/O库提供了图像的读取和写入功能,通过ImageIO
类,可以轻松地读取和写入多种格式的图像文件,如JPEG、PNG等
变换与旋转
AffineTransform
类可以用来实现图形的变换和旋转。通过调整变换矩阵,可以实现水印的倾斜、旋转等效果
使用Graphics2D
实现该功能,代码实现没有任何难度,如下:
public static void addTextWatermark2(File imageFile, String text, File outputFile) throws Exception {
BufferedImage image = ImageIO.read(imageFile);
Graphics2D g2d = (Graphics2D) image.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setColor(Color.RED);
g2d.setFont(new Font("黑体", Font.BOLD, 36));
g2d.drawString(text, 10, 50);
g2d.dispose();
ImageIO.write(image, "jpg", outputFile);
}
于是赶紧来测试一下,发现几个了几个细节问题需要考虑:
颜色
:水印字体颜色不要太深,避免遮挡图片内容数量
:水印数量根据图片大小自适应生成倾斜
:水印字体有一定倾斜角度,避免与图片文字过于重叠字体
:字体大小可以根据图片大小自适应,但不要过大而遮蔽图片内容位置
:从图片底部开始生成水印
于是一阵捣鼓,主要针对细节问题进行调整和测试,对边界场景细节要注意把控,特别是小尺寸图片字体大小、水印数量、位置以及旋转角度控制,保证即使极小图片也至少有一个水印,代码及效果如下:
emm...怎么说呢,总结几点吧:
- 对于不同尺寸图片水印细节需要花足够时间来处理
- 根据不同审美水印感受差别很大,个人最后觉得浅灰色(
128, 128, 128
)最为适合- 服务器没有相应字体,需要自己安装处理或者在项目中使用本地字体库,如果都懒得干直接使用非中文水印简单了事😂
正文到此结束
- 本文标签: java
- 本文链接: https://www.58cto.cn/article/50
- 版权声明: 本文由程序言原创发布, 非商业性可自由转载、引用,但需署名作者且注明文章出处:程序言 》 基于Graphics2D上传图片添加自定义水印 - https://www.58cto.cn/article/50