我试图生成不同语言的文本图像。
为此,我使用以下代码:
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数字转换为相应的字符,我们会得到与图像完全相同的文本。 / p>
所以我认为graphics.drawString(...)
正在做正确的工作。
但由于输出不是预期的,那么如何解决这个问题呢?
任何指向textToImage
api的指针也会这样做。
答案 0 :(得分:2)
我遇到了问题。
正如@bobince所正确指出的那样,问题出在我使用的字体Arial
上。
要呈现特定语言的文本,该字体应具有该语言的字形,以正确呈现文本。
例如,对于渲染印地文文本,像Mangal
这样具有印地语语法字形的字体将正确呈现文本。
同样的印地语字体也适用于马拉地语,因为这两种语言的字形保持不变,但不适用于泰米尔语,泰卢固语等语言。
答案 1 :(得分:0)
您可以尝试使用其他字体,例如MONOSPACED或SansSerif
Font font = new Font(Font.MONOSPACED, Font.PLAIN, 11);
graphics.setFont(font);
graphics.drawString("ट्रेल्स. रीकदोसै. जोकालन्त", 1, 10);
graphics.dispose();
我在哪里使用过java.awt.Font类。这很有效,人物的表现也正确。