有关Java的awt或者swing实现在图片上添加文字的处理(像素和字符串长度单位转换的问题)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关Java的awt或者swing实现在图片上添加文字的处理(像素和字符串长度单位转换的问题)相关的知识,希望对你有一定的参考价值。

如题:
现在小弟遇到这样的一个问题,需要在720*396的图片(就是发票纸上)上按一定规则输出数据,比如:在发票纸上原有“打印时间:”的位置后添加打印的时间,还有涉及到怎么处理自动换行的问题,其实我研究了一下,我是操作
Java的java.awt.Graphics2D.drawString(String str, int x, int y)方法,按照文本的格式把字符串“写在”发票纸的相应位置上,这期间遇到一个问题就是:720*396的图片是用像素来表示图片大小,而我们实际操作字符串是取得的字符串的长度,这里涉及一个把像素单位转换成字符串长度的问题,请问大牛们,我这种处理方式是否合理,Java中字符串的长度怎么转换成图片的像素单位,或者怎么把图片的像素转换成字符串的长度?从而实现字符串写在图片上具体位置的定位和完成自动换行等操作,望大牛们不吝赐教,谢谢!!

先用java.awt.Graphics2D.getFont()取得当前正在使用的字体f,java.awt.Graphics2D.getFontRenderContext()取得当前正在使用的渲染上下文frc
然后再用Rectangle2D rect=f.getStringBounds(str,frc)就可以得到你渲染这些文字所占据的矩形,使用rect.getWidth(), rect,getHeight()就可以知道这个矩形的大小了。
反过来通过像素大小决定字符串的长度没有现成的方法。如果你的字体是等宽的可以先用上面的方法求出一个字符的大小然后自己算,不然就只能先试试一个字符,再试试两个字符……直到超过你要的长度就返回的办法了(看起来效率比较低,不过实际使用的时候不是很影响性能)
参考技术A FontMetrics 你看下这个类 主要是做计算字符串所占大小的 参考技术B 你把720*396的图片作为背景,用paintComponent(Graphics g),然后你想在这图片上怎么弄,就怎么弄

以上是关于有关Java的awt或者swing实现在图片上添加文字的处理(像素和字符串长度单位转换的问题)的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing 怎么自定义界面背景图片

问问企业Java开发者,java语言的各种界面编程组件:swing、awt、swt、jsf、jface都用哪种比较多,如果有高

java swing 中的列表框JList如何在程序中动态的添加和删除元素

java怎样设置图片适应容器大小

用Java实现给图片添加文字

Eclipse中jframe怎么用属性设背景图片