今天使用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透明图片加水印,亲测可用相关推荐

  1. Java使用PDFBox为PDF填加水印亲测

    Java使用PDFBox为PDF填加水印亲测 1.maven依赖 java代码部分 效果图片 中文 微软雅黑TTF 1.maven依赖 <dependency><groupId> ...

  2. PHP|Yii2下通过插件进行图片处理(亲测可用)

    开源的力量! Step by step,可以安装好Yii2的图片处理插件. 亲测可用. 参考 http://www.yiichina.com/tutor...

  3. java水印透明_java给透明图片加水印

    java实现一张透明背景的图片,添加图片水印 public static void createWaterMarkByIcon(File srcImageFile, File logoImageFil ...

  4. SM2 生成公钥私钥 签名 加解密 亲测可用

    引入pom依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava< ...

  5. java word转pdf(完美转换,亲测可用)

    word转pdf,完美转换 引入依赖 (maven仓库是没有的,需要在项目中引用) jar包我给大家准备好了 提取码:m5hz 然后在pom里面引入下面这段,依赖我们就搭建好了 <depende ...

  6. MySQL - java链接mysql8 并兼容链接mysql5 亲测可用

    开始之前先去官网捋一遍 MySQL Connector / J开发人员指南 ,看看官方的一些变动,和一些可能要注意的点,或者一些可能会踩到的坑... 事先,我们要有一个使用mysql5.x的应用或者服 ...

  7. Bug消灭记:透明 png 图片加水印后变成黑问题

    背景 本周四晚下班后,领导火急火燎地电话我,说公司某个产品的系统配置模块在配置登录 Logo 的时候,上传一个透明底色的 png 图片,结果变成了黑色背景色,让我修复一下这个 Bug . 领导初步怀疑 ...

  8. Java图片水印生成器代码 - 批量给自己的网站图片加水印

    Java图片水印生成器代码 - 批量给自己的网站图片加水印 最近在做一款APP,App中的图片是自己一个个的画出来的,为了保证图片不被盗用和处理,所以就需要加上水印防盗.这跟CSDN一样. 注意事项: ...

  9. java 水印 位置_Java实现图片加水印且控制位置和透明度

    Java实现图片加水印且控制位置和透明度 昨天要做一个给图片加水印的功能,不想使用一些插件,就在网上转了一会儿,经过改装成了我需要的功能,代码如下: package org.guhao; import ...

最新文章

  1. 如何将浮点数很好地格式化为String而没有不必要的十进制0?
  2. android中自适应布局教程,Android自适应布局设计技巧
  3. 一起学nRF51xx 0 - 环境搭建
  4. ABAP常见面试问题
  5. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)
  6. 设计模式-模板方法(Template Method Patten)
  7. matlab信息隐藏算法,实验四--基于DCT域的信息隐藏算法
  8. 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
  9. ValueError: Unknown initializer: GlorotUniform
  10. Doxygen for C++使用说明——注释代码一
  11. TAR命令参数详解[转]
  12. python true_True关键字,带Python示例
  13. 100% .NET Control_自动完成Combobox的XComBo控件(VB.NET)
  14. 淘宝开源Key/Value结构数据存储系统Tair技术剖析
  15. 移动端页面开发通用问题解决方案
  16. 服务治理---限流(令牌桶算法)
  17. 03-15 捍卫WAF
  18. MATLAB2020b安装
  19. 成为优秀软件工程师的三条路径
  20. RTP音频AAC封包

热门文章

  1. 转载 Swift方法的多面性
  2. 高德地图android拖动地图,建议高德地图添加地图拖动事件,添加方法如内容所述...
  3. 互联网通信与内网安全性分析
  4. tampermonkey自动化学习(持续更新~)
  5. 决策树CART、ID3、C4.5原理梳理
  6. Hello China V1.75版本运行截图
  7. RN仿微信通讯录列表
  8. 编写模板类时注意一点 2007-12-06 11:22
  9. 冰冻三尺非一日之寒-自学篇 浅谈个人学习方法
  10. 2021年最新Android面试点梳理,成功入职腾讯