当前位置: 首页 > news >正文

Java多种方式向图片添加自定义水印、图片转换及webp图片压缩

给个创建水印的示例:

/*** 获取水印** @param watermarkText 水印文字* @return 水印bufferimage*/public static BufferedImage getWatermark(String watermarkText) {BufferedImage measureBufferdImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);Graphics2D measureG2d = measureBufferdImage.createGraphics();measureG2d.setFont(new Font("SimSun", Font.BOLD, 32));Rectangle2D rectangle2D = measureG2d.getFontMetrics().getStringBounds(watermarkText, null);measureG2d.dispose();int width = (int) (rectangle2D.getWidth() + 50);int height = (int) (rectangle2D.getHeight() + 50);// 创建一个 BufferedImage 对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);// 获取 Graphics2D 对象Graphics2D g2d = image.createGraphics();// 设置背景色g2d.setColor(new Color(0, 0, 0, 0));g2d.fillRect(0, 0, width, height);Color customColor = new Color(255, 0, 0, 50); // 半透明红色// 设置文字颜色和字体g2d.setColor(customColor);g2d.setFont(new Font("SimSun", Font.BOLD, 32));g2d.drawString(watermarkText, 25, height / 2 + 12);// 释放资源g2d.dispose();return image;}

这样可以根据一个字符串的文字生成一个水印图片

利用imageio压缩转换图片并且直接添加水印

public static File compressToWebp(File sourceImage, String watermarkText) throws IOException {BufferedImage image = ImageIO.read(new FileInputStream(sourceImage));if (StringUtils.isNotBlank(watermarkText)) {Graphics2D g2d = image.createGraphics();g2d.setFont(new Font("SimSun", Font.BOLD, 32));Rectangle2D rectangle2D = g2d.getFontMetrics().getStringBounds(watermarkText, null);int width = (int) (rectangle2D.getWidth() + 50);int height = (int) (rectangle2D.getHeight() + 50);// 设置背景色g2d.setColor(new Color(0, 0, 0, 0));Color customColor = new Color(255, 0, 0, 50); // 半透明红色// 设置文字颜色和字体g2d.setColor(customColor);g2d.setFont(new Font("SimSun", Font.BOLD, 32));g2d.drawString(watermarkText, (int) (image.getWidth() - width), image.getHeight() - height-25);// 释放资源g2d.dispose();}// Obtain a WebP ImageWriter instanceImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();// Configure encoding parametersWebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT);File file = new File("d:/test.webp");FileImageOutputStream fileImageOutputStream = new FileImageOutputStream(file);// Configure the output on the ImageWriterwriter.setOutput(fileImageOutputStream);// Encodewriter.write(null, new IIOImage(image, null, null), writeParam);fileImageOutputStream.flush();fileImageOutputStream.close();return file;}

将webp图片转为png图片

 public static File webpToPng(File sourceImage) throws IOException {// 读取webp格式图片BufferedImage image = ImageIO.read(sourceImage);// 写入png格式图片File pngFile = new File("d:/test.png");ImageIO.write(image, "png", pngFile);System.out.println("转换完成!");return pngFile;}

利用Thumbnails添加水印

Thumbnails.of(new File("D:/20231108011418994.jpg")).outputFormat("png").sourceRegion(Positions.BOTTOM_RIGHT, 200, 100).size(200, 100).keepAspectRatio(false).crop(Positions.BOTTOM_CENTER).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:/20231019193150520-bc.png")), 0.7f).toOutputStream(new FileOutputStream(new File("D:/20231108011418994-b.jpg")));

20231019193150520-bc.png是水印图片

相关maven包参考

<dependency><groupId>com.github.nintha</groupId><artifactId>webp-imageio-core</artifactId><version>0.1.0</version><scope>system</scope><systemPath>${project.basedir}/libs/webp-imageio-core-0.1.0.jar</systemPath></dependency>
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.20</version></dependency>

http://www.lryc.cn/news/224584.html

相关文章:

  • 基于Pytorch框架的LSTM算法(二)——多维度单步预测
  • cnn感受野计算方法
  • 百分点科技受邀参加“第五届治理现代化论坛”
  • 基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。
  • 「Verilog学习笔记」多功能数据处理器
  • OpenHarmony 4.0 Release 编译异常处理
  • 软件测试|MySQL LIKE:深入了解模糊查询
  • linux防火墙设置
  • http 403
  • RAW图像处理软件Capture One 23 Enterprise mac中文版功能特点
  • Linux 进程终止和等待
  • python用tkinter随机数猜数字大小
  • 程序员们保住自己饭碗
  • 顶板事故防治vr实景交互体验提高操作人员安全防护技能水平
  • 为什么推荐从Linux开始了解IT技术
  • 【Mysql】增删改查(基础版)
  • 文件夹找不到了怎么恢复?4个正确恢复方法分享!
  • 迅为RK3568开发板GPS模块测试实验步骤
  • 用趋动云GPU部署自己的Stable Diffusion
  • nfs配置
  • 说话人识别声纹识别CAM++,ECAPA-TDNN等算法
  • 某平台简单尝试一次密码逆向
  • 微信号绑定50个开发者小程序以后超额如何删除不用的
  • 【Cheat Engine7.5】基础教程第三关(步骤4)
  • 141. 环形链表 --力扣 --JAVA
  • 电子元器件的结温壳温与环境温度经验总结
  • Spring Gateway基础知识总结
  • NFS文件系统共享服务器实战
  • CSS的概念和基本用法
  • 万字详解Java的三大特性:封装 | 继承 | 多态