我尝试将文本呈现为BufferedImage,并且效果很好,但我无法呈现非ASCII的任何字符(至少就我所知)。我只能找到它是因为字体,所以我下载了Google的“ Noto”字体,该字体似乎支持所有脚本,但是我仍然可以找到它们。

我什至不尝试渲染特别奇特的东西。仅德国变音符号和尖音符号(ÄäÖöÜüß)。

我创建这样的字体

Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("NotoSans-Regular.ttf")).deriveFont(12f);


并像这样渲染整个事情

Graphics2D g2 = image.createGraphics();
g2.setFont(font);
g2.setColor(Color.white);
g2.drawString(string, 0, g2.getFontMetrics().getAscent());
g2.dispose();


它与ASCII一起使用。

Google要么使我获得了非常简单的教程(从字面上看,这是我目前的代码),要么说问题出在字体上,但事实并非如此,因为它在编辑器中可以完美地工作。

谢谢

Edit1:这是我的完整代码

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException, FontFormatException {
        String string = "ÄäÖöÜüß";
        BufferedImage image;

        Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("NotoSans-Regular.ttf")).deriveFont(50f);
        Rectangle2D rec = font.getStringBounds(string, new FontRenderContext(null, false, false));
        image = new BufferedImage((int)rec.getWidth(), (int)rec.getHeight(), BufferedImage.TYPE_INT_RGB);

        Graphics2D g2 = image.createGraphics();
        g2.setFont(font);
        g2.setColor(Color.white);
        g2.drawString(string, 0, g2.getFontMetrics().getAscent());
        g2.dispose();

        File f = new File("image.png");
        if (!f.exists()) {
            if (!f.createNewFile()) {
                System.err.println("Can't create image file.");
            }
        }
        ImageIO.write(image, "png", f);
    }
}


可以下载字体here from google

这是我的结果

Result

我想我一般都使用其他所有字体。
它将结果编译并保存为PNG。

它适用于ASCII字符。

很抱歉没有使用正确的图像,但是如果没有至少10个声誉,我将无法做到。

Edit2:现在可以使用,但不能在我的PC上使用。不过,如果我重新编译,它可以在Linux上运行...

Edit3:与最新的JDK相同。

最佳答案

我是个白痴...有时候我想知道我如何度过一天而不会意外被杀死...

如果您无法正确使用unicode字符串,并且即使与Google作战2天后也找不到答案,请检查源文件的编码...我的设置为Windows-1252 ...

09-11 19:25
查看更多