参考:Java实现图片水印
代码参考:https://gitee.com/Yenn-2017_admin/JAVATuPianShuiYin
1、JAVA图片水印实现思路
2、项目案例:
框架---》实现方式---》结果演示
3、包含:
图片添加单个文字水印
图片添加单个图片水印
图片添加多个文字水印
图片添加多个图片水印
多图片批量添加水印
4、重点
了解Java图片水印实现思路
文字水印和图片水印的实现
多图片批量添加水印
图片水印实现思路
- 创建缓存图片对象
- 创建JAVA绘图工具对象
- 使用绘图工具对象,将原图绘制到缓存图片对象
- 使用绘图工具,将水印(文字/图片)绘制到缓存图片对象
- 创建图像编码工具类
- 使用图片编码工具类,输出缓存图像到模板图片文件
JAVA图片水印使用工具类
名称 | 工具 |
---|---|
缓存图片对象 | BufferedImage |
绘图工具对象 | Graphics2D |
图片编码工具类 | JPEGImageEncoder |
项目案例
基于Strtus2框架的Java Web应用程序,
允许一次上传多个图片,
应用默认为上传图片添加水印,
并将原图与添加水印图片对比展示。
图片添加单个文字水印
1、搭建框架
使用SpringBoot
2、配置action&编写JSP页面
controller:WaterMarkController.java
index.html
watermark.html
3、java实现图片上传
UploadService.java
4、编写水印接口
5、水印编写准备,将原图绘制到缓存图片中
6、将水印绘制到缓存图片中。
7、水印图片生成
图片添加单个图片水印
SpringBoot
静态文件路径:
File logo = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/image/"+LOGO);
2018-10-22 09:56:51.589 INFO 4772 --- [nio-8083-exec-6] c.e.watermark.service.ImageMarkService : logo=...\watermark\target\classes\static\image\logo.png,is_exists=true
添加多个文字水印
文字旋转一个弧度。
x,y循环。
批量添加水印
使用for循环,挨个对图片进行处理。
注意点:
//消除画图锯齿
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//消除文字锯齿
graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// 描边的文字。
FontRenderContext frc = graphics2D.getFontRenderContext();
TextLayout tl = new TextLayout("送同款手撕面包", new Font(FONT_NAME, Font.BOLD,12), frc);
Shape sha = tl.getOutline(AffineTransform.getTranslateInstance((WIDTH-widthA1)/2,height-120+12/2));
graphics2D.setStroke(new BasicStroke(3.0f));
graphics2D.setColor(new Color(0xfc3576));
graphics2D.draw(sha);
graphics2D.setColor(Color.WHITE);
graphics2D.fill(sha);