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

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

先用java.awt.Graphics2D.getFont()取得当前正在使用的字体f,java.awt.Graphics2D.getFontRenderContext()取得当前正在使用的渲染上下文frc

然后再用Rectangle2D rect=f.getStringBounds(str,frc)就可以得到你渲染这些文字所占据的矩形,使用rect.getWidth(), rect,getHeight()就可以知道这个矩形的大小了。

反过来通过像素大小决定字符串的长度没有现成的方法。如果你的字体是等宽的可以先用上面的方法求出一个字符的大小然后自己算,不然就只能先试试一个字符,再试试两个字符……直到超过你要的长度就返回的办法了(看起来效率比较低,不过实际使用的时候不是很影响性能)

图片上的文字是没法读取的,以为这涉及到图像处理。非常非常复杂!因为如果你非要读取图片上的文字,不是几行代码可以搞定的,首相从matlaB开始学,了解什么是图像处理。然后再开发相应的jar包。当然,你也可以使用相关的软件工具,比如识图软件,通过读取软件的反馈也算是读取了图片上的文字

import java.awt.Color

import java.awt.Frame

import java.awt.Graphics

public class DrawString extends Frame{

private static final int spacing = 20 //文字与图片边界的空白

private static final int wordNum = 7 //文字字号

private Color strColor

private StringBuffer message

private int pictureWidth

private int pictureHight

public void paint(Graphics g){

Color c = g.getColor()

g.setColor(strColor)

StringBuffer msg = message

int strNumPerLine = (pictureWidth - spacing) / wordNum

int strLineNum = message.length() / strNumPerLine

for(int l=strLineNum,n=0 l<0l--){

msg.substring(n, strNumPerLine)

g.drawString(msg.toString(), wordNum, wordNum * strNumPerLine)

n = strNumPerLine

}

g.setColor(c)

//this.draw(g)

}

public DrawString(Color strColor, StringBuffer message, int pictureWidth, int pictureHight) {

this.strColor = strColor

this.message = message

this.pictureWidth = pictureWidth

this.pictureHight = pictureHight

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11629800.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存