Java给PNG透明图片加水印,亲测可用
今天使用java给一个固定的两行三列的png图片填充文字内容,但是看到网上很多例子,生成的图片,要么是背景色是黑色的(原来的png图片背景色是透明的),要么填充的内容不显示。现在把源码记录下来,大家可以直接拷贝运行测试。
先上个效果图:
原图:
水印图片(方格中填充内容):
代码如下:
package ztest;import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;import javax.imageio.ImageIO;public class TestImage {public static void main(String[] args) {List<String> list = Arrays.asList("l1-c1", // 行1列1"l1-c2", // 行1列2"l1-c2", // 行1列3"l2-c1", // 行2列1"l2-c2", // 行2列2"l2-c3"// 行2列3);// TODO png的图片后缀一定是png的markImageByText(list, "D:/1.png", "D:/2.png", 12, Color.red, "png");}/*** 给图片添加水印文字、可设置水印文字的旋转角度* @param logoText 要写入的文字* @param srcImgPath 源图片路径* @param newImagePath 新图片路径* @param fontsize 字体大小* @param color 字体颜色* @param formaName 图片后缀*/public static void markImageByText(List<String> list, String srcImgPath,String newImagePath,Integer fontsize,Color color,String formaName) {InputStream is = null;OutputStream os = null;try {// 1、源图片java.awt.Image srcImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 2、得到画笔对象Graphics2D g = buffImg.createGraphics();buffImg = g.getDeviceConfiguration().createCompatibleImage(srcImg.getWidth(null), srcImg.getHeight(null), Transparency.TRANSLUCENT);g.dispose();g = buffImg.createGraphics();// 3、设置对线段的锯齿状边缘处理g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);// 4、把原图画到新画板上g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), java.awt.Image.SCALE_SMOOTH), 0, 0, null);// 5、设置水印文字颜色g.setColor(color);// 6、设置水印文字Fontg.setFont(new java.awt.Font("微软雅黑", java.awt.Font.BOLD, fontsize));// 7、设置水印文字透明度 必须要用AlphaComposite.SRC_OVER
// g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)g.drawString(list.get(0), 3 , 25);g.drawString(list.get(1), 58 ,25);g.drawString(list.get(2), 113 , 25);g.drawString(list.get(3), 3 , 55);g.drawString(list.get(4), 58 , 55);g.drawString(list.get(5), 113 , 55);// 9、释放资源g.dispose();// 10、生成图片os = new FileOutputStream(newImagePath);ImageIO.write(buffImg, formaName, os);} catch (Exception e) {e.printStackTrace();} finally {try {if (null != is)is.close();} catch (Exception e) {e.printStackTrace();}try {if (null != os)os.close();} catch (Exception e) {e.printStackTrace();}}}}
Java给PNG透明图片加水印,亲测可用相关推荐
- Java使用PDFBox为PDF填加水印亲测
Java使用PDFBox为PDF填加水印亲测 1.maven依赖 java代码部分 效果图片 中文 微软雅黑TTF 1.maven依赖 <dependency><groupId> ...
- PHP|Yii2下通过插件进行图片处理(亲测可用)
开源的力量! Step by step,可以安装好Yii2的图片处理插件. 亲测可用. 参考 http://www.yiichina.com/tutor...
- java水印透明_java给透明图片加水印
java实现一张透明背景的图片,添加图片水印 public static void createWaterMarkByIcon(File srcImageFile, File logoImageFil ...
- SM2 生成公钥私钥 签名 加解密 亲测可用
引入pom依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava< ...
- java word转pdf(完美转换,亲测可用)
word转pdf,完美转换 引入依赖 (maven仓库是没有的,需要在项目中引用) jar包我给大家准备好了 提取码:m5hz 然后在pom里面引入下面这段,依赖我们就搭建好了 <depende ...
- MySQL - java链接mysql8 并兼容链接mysql5 亲测可用
开始之前先去官网捋一遍 MySQL Connector / J开发人员指南 ,看看官方的一些变动,和一些可能要注意的点,或者一些可能会踩到的坑... 事先,我们要有一个使用mysql5.x的应用或者服 ...
- Bug消灭记:透明 png 图片加水印后变成黑问题
背景 本周四晚下班后,领导火急火燎地电话我,说公司某个产品的系统配置模块在配置登录 Logo 的时候,上传一个透明底色的 png 图片,结果变成了黑色背景色,让我修复一下这个 Bug . 领导初步怀疑 ...
- Java图片水印生成器代码 - 批量给自己的网站图片加水印
Java图片水印生成器代码 - 批量给自己的网站图片加水印 最近在做一款APP,App中的图片是自己一个个的画出来的,为了保证图片不被盗用和处理,所以就需要加上水印防盗.这跟CSDN一样. 注意事项: ...
- java 水印 位置_Java实现图片加水印且控制位置和透明度
Java实现图片加水印且控制位置和透明度 昨天要做一个给图片加水印的功能,不想使用一些插件,就在网上转了一会儿,经过改装成了我需要的功能,代码如下: package org.guhao; import ...
最新文章
- 如何将浮点数很好地格式化为String而没有不必要的十进制0?
- android中自适应布局教程,Android自适应布局设计技巧
- 一起学nRF51xx 0 - 环境搭建
- ABAP常见面试问题
- BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)
- 设计模式-模板方法(Template Method Patten)
- matlab信息隐藏算法,实验四--基于DCT域的信息隐藏算法
- 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
- ValueError: Unknown initializer: GlorotUniform
- Doxygen for C++使用说明——注释代码一
- TAR命令参数详解[转]
- python true_True关键字,带Python示例
- 100% .NET Control_自动完成Combobox的XComBo控件(VB.NET)
- 淘宝开源Key/Value结构数据存储系统Tair技术剖析
- 移动端页面开发通用问题解决方案
- 服务治理---限流(令牌桶算法)
- 03-15 捍卫WAF
- MATLAB2020b安装
- 成为优秀软件工程师的三条路径
- RTP音频AAC封包