我正在尝试生成不同语言的文本图像。
为此,我使用了以下代码:
BufferedImage bufferedImage = new BufferedImage(200, 60, BufferedImage.TYPE_INT_RGB);
Graphics graphics = bufferedImage.getGraphics();
graphics.setColor(Color.PINK);
graphics.setFont(new Font("Arial", Font.PLAIN, 12));
graphics.drawString("ट्रेल्स", 20, 40);
ImageIO.write(bufferedImage, "jpg", outputStream);
但是上面代码生成的图片是
图片中的文字与ट्रेल्स
有点不同
上述不匹配的原因是 ट्रेल्स
的 unicode 字符是\u091f\u094d\u0930\u0947\u0932\u094d\u0938
如果我们将每个 unicode 数字转换为其对应的字符,我们将获得与图像中完全相同的文本。
所以我认为graphics.drawString(...)
正在做正确的工作。
但是由于输出不是预期的,那么如何解决这个问题呢?
任何指向 textToImage
的指针api 也可以。
最佳答案
我明白了。
正如@bobince 也正确指出的那样,问题出在我使用的字体 Arial
上。
要呈现特定语言的文本,字体应具有该语言的字形以正确呈现文本。
例如,为了呈现印地语文本,Mangal
等具有印地语语言字形的字体将正确呈现文本。
相同的印地语字体也适用于马拉地语,因为两种语言的字形保持相同,但不适用于泰米尔语、泰卢固语等语言。
关于Java:Unicode 未通过 graphics.drawString(...) 正确转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907094/