工具类返回 BufferedImage, 写入文件生成水印图片,可见代码

一、核心代码

 /*** 生成背景透明的 文字水印** @param width     生成图片宽度* @param height    生成图片高度* @param text      水印文字* @param color     颜色对象* @param font      awt字体* @param degree    水印文字旋转角度* @param alpha     水印不透明度0f-1.0f* @param imagePath 图片地址*/
public static BufferedImage waterMarkByText(int width, int height, String text, Color color, Font font, Double degree, float alpha, String imagePath) {BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 得到画笔对象Graphics2D g2d = buffImg.createGraphics();// 增加下面的代码使得背景透明buffImg = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);g2d.dispose();g2d = buffImg.createGraphics();// 设置对线段的锯齿状边缘处理g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);//把源图片写入if (imagePath != null && !imagePath.equals("")) {try {Image srcImg = ImageIO.read(new File(imagePath));Image image = srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH);g2d.drawImage(image, 0, 0, null);} catch (IOException e) {e.printStackTrace();}}// 设置水印旋转if (null != degree) {//注意rotate函数参数theta,为弧度制,故需用Math.toRadians转换一下//以矩形区域中央为圆心旋转g2d.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);}// 设置颜色g2d.setColor(color);// 设置 Fontg2d.setFont(font);// 设置透明度:1.0f为透明度 ,值从0-1.0,依次变得不透明g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));// 获取真实宽度float realWidth = getRealFontWidth(text);float fontSize = font.getSize();// 计算绘图偏移x、y,使得使得水印文字在图片中居中,x、y坐标是基于Graphics2D.rotate过后的坐标系float x = 0.5f * width - 0.5f * fontSize * realWidth;float y = 0.5f * height + 0.5f * fontSize;// 取绘制的字串宽度、高度中间点进行偏移,使得文字在图片坐标中居中g2d.drawString(text, x, y);// 释放资源g2d.dispose();return buffImg;
}/*** 获取真实字符串宽度,ascii字符占用0.5,中文字符占用1.0** @param text 文字* @return 宽度*/
private static float getRealFontWidth(String text) {int len = text.length();float width = 0f;for (int i = 0; i < len; i++) {if (text.charAt(i) < 256) {width += 0.5f;} else {width += 1.0f;}}return width;
}

二、测试

/*** 测试** @param markImagePath 水印图片目标地址*/
public static void test(String markImagePath) {try {BufferedImage bi = waterMarkByText("测试水印~,");ImageIO.write(bi, "png", new File(markImagePath));} catch (IOException e) {e.printStackTrace();}
}

三、结果

水印图片如下:由于背景白色,后附一张win 11 预览图

原生水印图片

win11 预览截图

Java 生成水印图片相关推荐

  1. java 生成水印图片工具类, MultipartFile接收上传的图片,处理成加水印之后的MultipartFile

    /*** Created by Administrator on 2018/4/26.* JAVA图片处理工具*/ public class ImageUtil {public enum positi ...

  2. Java生成水印图片实例

    可根据自己需求调整水印样式... public class ImageUtil {private static final int INITTOP = 100;private static final ...

  3. java生成表格图片(请假条为例)

    java生成表格图片(请假条) package table;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

  4. 致敬Gif之父,使用Java生成Gif图片

    点击关注强哥,查看更多精彩文章呀 哈喽,大家好,我是强哥. 据美国媒体报道,美国计算机科学家.GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)于当地时间3月14日因新冠肺炎去世, ...

  5. java生成水印_[转载]java操作word生成水印

    应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...

  6. [导入]利用PIL生成水印图片或文字

    最近在做一个图片网站,要处理很多图片,处理图片少不了加水印了,呵呵.PIL用得不熟,在网上找了一圈,加上自己稍微修改了一下,用起来也算方便,生成效果也不错,呵呵,支持透明的png水印图片,透明度和水印 ...

  7. java生成小图片_JAVA生成缩略小图片类

    JAVA生成缩略小图片类 java.awt.image.BufferedImage是缓冲图片类主要将生成的图片对象缓冲起来:javax.imageio.ImageIO是图片IO控制类,可以将缓冲图片对 ...

  8. Java生成随机图片验证码工具类

    一.第一种生成随机图片验证码 public class VerifyCodeUtil {//生成随机数据的数据源 public static final String VERIFY_CODES = & ...

  9. java生成条码图片、打印二维码、图片合并、图片加文字

    通过java生成二维码图片,可以添加文字内容,非常方便实现打印. import java.awt.Color; import java.awt.Font; import java.awt.FontMe ...

  10. 实现Java生成随机图片验证码

    前言 这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.项 ...

最新文章

  1. java中Volatile修饰符的含义
  2. Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
  3. xxl-job 执行结果是空_空指针,段错误,这场面试我栽倒在这里了!
  4. android窗口速度条,android 改变ViewPager切换页面时的速度
  5. 面试题 锁消除是什么
  6. android 服务自动结束,Android服务自动停止
  7. ant ftp get nullpointerException
  8. Week2——XML
  9. 新兴IT企业特斯拉(九)——私有化风波
  10. 华为安装gsm框架_华为手机怎么安装 GMS 框架和谷歌应用?
  11. 怎么把PDF转换成Word?2种转Word方法技巧
  12. 阿里云操作系统——飞天(Apsaras)
  13. lisp方格网法计算土方量_土地整理中方格网法计算土方量
  14. Jdk14其他新特性
  15. Python实例教程Mechanize模块编写爬虫的要点解析
  16. linux sysinfo函数使用方法--获取内存大小
  17. Luogu P2751 [USACO4.2]工序安排Job Processing
  18. OpenGL使用FBO与PBO上行纹理 (YUYV)
  19. nginx修改成非root用户启动
  20. WordPress博客网站屏蔽搜索特殊关键字和网址,屏蔽恶意特殊关键词的方法分享,附如何屏蔽搜索收录

热门文章

  1. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
  2. tomcat之servlet容器
  3. 缅甸文字库 缅甸语字库 缅甸字库算法
  4. 关于机器学习模型的评估方法
  5. numpy与scipy安装
  6. c++ 实现四阶龙格库塔方法
  7. Visual Studio调用约定 __cdecl、__stdcall和__fastcall
  8. 计算逆矩阵的三种方法
  9. 20多岁,你迷茫又着急
  10. 全网最新抖音视频去水印解析PHP网页源码