java 给图片添加文字, 或者将文字保存为图片

package test.java;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStreamReader;
import java.nio.charset.Charset;// 参考自https://blog.csdn.net/hometing218/article/details/88419874
// 参考自https://www.cnblogs.com/remember-forget/p/8134823.html
public class FontImage {public static void main(String[] args) throws Exception {createImage("请A1003到3号窗口, 请A1002到2号窗口, 请A1001到1号窗口, 测试测试, 测试2, 测试3\n请A1002到3号窗口\n请A1001到3号窗口", new Font("宋体", Font.PLAIN, 28), new File("d:\\a.png"), new File("D:\\背景图片.png"));}public static void createImage(String str, Font font, File outFile, File bgImageFile) throws Exception {// 读取背景图Image bgImage = ImageIO.read(bgImageFile);Integer width = bgImage.getWidth(null);Integer height = bgImage.getHeight(null);// 创建图片BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics g = image.getGraphics();g.setClip(0, 0, width, height);g.drawImage(bgImage, 0, 0, width, height,null);g.setColor(Color.black);g.setFont(font);MyDrawText drawText = new MyDrawText();BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(str.getBytes()), Charset.forName("utf8")));String line;int locY = g.getFontMetrics().getHeight();while (null != (line = br.readLine())) {locY = drawText.drawStringWithFontStyleLineFeed(g, line, 0, locY, font, width - g.getFontMetrics().charWidth(' '));locY += g.getFontMetrics().getHeight();}g.dispose();// 输出png图片ImageIO.write(image, "png", outFile);}
}// 参考自https://www.cnblogs.com/kgdjgd/p/10248977.html
class MyDrawText {public int drawStringWithFontStyleLineFeed(Graphics g, String strContent, int locX, int locY, Font font, int rowWidth){//获取字符串 字符的总宽度int strWidth = getStringLength(g, strContent);System.out.println("每行字符宽度:" + rowWidth);//获取字符高度int strHeight = getStringHeight(g);//字符串总个数System.out.println("字符串总个数:" + strContent.length());if (strWidth > rowWidth) {int rowstrnum = getRowStrNum(strContent.length(), rowWidth, strWidth);int rows = getRows(strWidth, rowWidth);String temp = "";for (int i = 0; i < rows; i++) {//获取各行的Stringif (i == rows - 1) {//最后一行temp = strContent.substring(i * rowstrnum);} else {temp = strContent.substring(i * rowstrnum, i * rowstrnum + rowstrnum);}if (i > 0) {//第一行不需要增加字符高度,以后的每一行在换行的时候都需要增加字符高度locY = locY + strHeight;}g.drawString(temp, locX, locY);}} else {//直接绘制g.drawString(strContent, locX, locY);}return locY;}private int getRows(int strWidth,int rowWidth){int rows = 0;if (strWidth % rowWidth > 0) {rows = strWidth / rowWidth + 1;} else {rows = strWidth / rowWidth;}System.out.println("行数:" + rows);return rows;}private int  getStringHeight(Graphics g) {int height = g.getFontMetrics().getHeight();System.out.println("字符高度:"+height);return height;}private int getRowStrNum(int strnum, int rowWidth, int strWidth){int rowstrnum = 0;rowstrnum = (rowWidth * strnum) / strWidth;System.out.println("每行的字符数:" + rowstrnum);return rowstrnum;}private int  getStringLength(Graphics g,String str) {int strWidth = g.getFontMetrics().stringWidth(str);System.out.println("字符总宽度:"+strWidth);return strWidth;}
}

实现功能:

  • 图片中增加文件
  • 多行文字自动按行排列
  • 一行容纳不下的文字,则自动换行

目前还存在一丢丢问题

  • 换行后缩进
  • 有时在换行时会丢掉一个字符,故
    locY = drawText.drawStringWithFontStyleLineFeed(g, line, 0, locY, font, width - g.getFontMetrics().charWidth(' '));

实现效果

背景图片:

合成后图片:

java 文字生成图片(图片添加文字)相关推荐

  1. Java分享--给图片添加文字水印(文字可旋转)

    这篇文章主要介绍了Java实现给图片添加文字水印,文字水印的方法,涉及java针对图片的读取.水印添加设置等相关操作技巧,需要的朋友可以参考下 . 很多时候项目中的图片需要一定的版权,就是人家拿出去用 ...

  2. 用Java实现给图片添加文字水印

    程序背景 在网络中的很多地方都有水印的存在,比如微信公众号上面的图片,微博,以及这个CSDN博客上面的图片--所以突发奇想,看看自己能否写一个可以给图片添加水印的工具类. 程序代码 package i ...

  3. Java给图片添加文字水印

    闲着没事,研究了下图片水印的事儿,图片水印虽然恶心,而且大大的影响了图片的美观,试想一下,一张美女的性感写真照,下方来了个大大的水印"XXXX所有",看着那猥琐的文字水印,是不是很 ...

  4. 手把手教你如何通过Java给图片添加文字和图片水印

    本文首发于个人网站 前言 最近工作上有个需求,动态生成一张图片,具体来说就是基于模版图片动态添加文字和图片(文字内容不同,图片数目不同),其中文字大小不全一样,且对位置有所要求. 本文将剖析多个技术方 ...

  5. java制作海报工具类,java操作图片贴图,java给图片添加文字,调整字体颜色大小间距

    工具类 java操作图片,给一个大图片贴小图片,给图片添加文字并调整文字颜色,大小,字体间距,把本地图片或者网络图片加载到缓冲区 主要方法: imageIoRead方法,把图片加载到缓冲区 merge ...

  6. JAVA 给图片添加文字水印

    水印操作有很多,例如:给图片添加文字.图片水印,给pdf文件添加水印,给文件加盖公章,这类需求还是时常会遇到的,今天就简单记录一下给图片添加文字水印的demo,仅供大家参考,后续会写别的情况的添加水印 ...

  7. Java 图片添加文字或者logo水印(附代码) | Java工具类

    目录 前言 环境依赖 代码 总结 前言 本文提供java工具类,给图片添加文字或者logo图片的水印效果. 环境依赖 工具库maven依赖添加 <dependency><groupI ...

  8. java 给图片添加文字

    java 给图片添加文字 最近开发中要实现给图片加文字功能,本打算用Jmagick实现的,可是中文出现乱码,没有找到解决办法,就用 最原始的方法实现了,如果随知道Jmagick图片解决中文乱码问题,可 ...

  9. Springboot中给图片添加文字水印

    Springboot中给图片添加文字水印 工作中遇到给图片添加文字水印的需求,记录下来方便之后查阅 需求内容: 给一张图片添加指定文字水印,使一张图片上有多个水印内容,并且设定一个水印开关,可指定是否 ...

  10. android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件

    Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.gr ...

最新文章

  1. 计算机c盘属性不显示安全选项,win7系统中文件夹属性安全选项卡空白的解决方法...
  2. Create Geometry from WKT(转载)
  3. 算法学习:manacher
  4. LeetCode-726. 原子的数量(python2)
  5. vue之axios 登陆验证及数据获取
  6. Android开发:1-3、Android常用布局
  7. 【原创】分享一个分析函数统计案例
  8. 双指针:JZ21调整数组顺序使奇数位于偶数前面 Offer 57. 和为s的两个数字
  9. php数组插入mysql,php mysql:将一个php数组插入mysql
  10. C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
  11. 【大结局】三体 III 中的思想实验:死神永生(下)
  12. 半挂式洒水车的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 流量控制理论与Sentinel
  14. unity 实现手机振动_Unity3d之音效播放和调用手机震动
  15. cocos2d-x Touch触屏事件
  16. datadog ebpf模块 offset-guess.o 问题排查解决
  17. html5 history微信浏览器返回不刷新
  18. 2020NBA选秀大会结果出炉,开启.fans球星域名抢注!
  19. Java之for循环打印倒直角三角形
  20. lodop指定打印机打印_LODOP指定window默认打印机和临时默认打印机

热门文章

  1. PPT汇报片配音及视频格式生成方法
  2. 利用WinEdt修改图片格式为eps
  3. js数组按中文拼音排序_这才是选择排序正确的打开方式!
  4. CorelDraw软件快速入门
  5. CDR插件开发之Addon插件004 - VS2022开发环境简介及个性化配置
  6. CorelDRAW入门教程-用CDR制作漂亮小雨伞
  7. 股票因子扩展2(双神因子计算)——从零到实盘5
  8. MXF Operational Pattern 1a (OP1a)
  9. 笔记本作服务器配置无线网卡,如何利用笔记本电脑的无线网卡搭建局域网
  10. PE恢复linux主引导记录,u大师的U盘pe工具重建主引导记录的方法