Java 生成水印图片
工具类返回 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 预览图
Java 生成水印图片相关推荐
- java 生成水印图片工具类, MultipartFile接收上传的图片,处理成加水印之后的MultipartFile
/*** Created by Administrator on 2018/4/26.* JAVA图片处理工具*/ public class ImageUtil {public enum positi ...
- Java生成水印图片实例
可根据自己需求调整水印样式... public class ImageUtil {private static final int INITTOP = 100;private static final ...
- java生成表格图片(请假条为例)
java生成表格图片(请假条) package table;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...
- 致敬Gif之父,使用Java生成Gif图片
点击关注强哥,查看更多精彩文章呀 哈喽,大家好,我是强哥. 据美国媒体报道,美国计算机科学家.GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)于当地时间3月14日因新冠肺炎去世, ...
- java生成水印_[转载]java操作word生成水印
应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...
- [导入]利用PIL生成水印图片或文字
最近在做一个图片网站,要处理很多图片,处理图片少不了加水印了,呵呵.PIL用得不熟,在网上找了一圈,加上自己稍微修改了一下,用起来也算方便,生成效果也不错,呵呵,支持透明的png水印图片,透明度和水印 ...
- java生成小图片_JAVA生成缩略小图片类
JAVA生成缩略小图片类 java.awt.image.BufferedImage是缓冲图片类主要将生成的图片对象缓冲起来:javax.imageio.ImageIO是图片IO控制类,可以将缓冲图片对 ...
- Java生成随机图片验证码工具类
一.第一种生成随机图片验证码 public class VerifyCodeUtil {//生成随机数据的数据源 public static final String VERIFY_CODES = & ...
- java生成条码图片、打印二维码、图片合并、图片加文字
通过java生成二维码图片,可以添加文字内容,非常方便实现打印. import java.awt.Color; import java.awt.Font; import java.awt.FontMe ...
- 实现Java生成随机图片验证码
前言 这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.项 ...
最新文章
- java中Volatile修饰符的含义
- Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
- xxl-job 执行结果是空_空指针,段错误,这场面试我栽倒在这里了!
- android窗口速度条,android 改变ViewPager切换页面时的速度
- 面试题 锁消除是什么
- android 服务自动结束,Android服务自动停止
- ant ftp get nullpointerException
- Week2——XML
- 新兴IT企业特斯拉(九)——私有化风波
- 华为安装gsm框架_华为手机怎么安装 GMS 框架和谷歌应用?
- 怎么把PDF转换成Word?2种转Word方法技巧
- 阿里云操作系统——飞天(Apsaras)
- lisp方格网法计算土方量_土地整理中方格网法计算土方量
- Jdk14其他新特性
- Python实例教程Mechanize模块编写爬虫的要点解析
- linux sysinfo函数使用方法--获取内存大小
- Luogu P2751 [USACO4.2]工序安排Job Processing
- OpenGL使用FBO与PBO上行纹理 (YUYV)
- nginx修改成非root用户启动
- WordPress博客网站屏蔽搜索特殊关键字和网址,屏蔽恶意特殊关键词的方法分享,附如何屏蔽搜索收录