如何在高质量的bufferImage中呈现小的utf字体



我想在bufferedImage中使用java渲染字符串。问题是,当我使用小字体(例如:8pt)时,我的图像质量很差,图像分辨率为72dpi。我想拥有最好的图像质量,如果可能的话,将图像分辨率更改为360dpi。注意到我想生成一个不同字体、字体大小和字体风格的语言单词数据库。我使用了标准的java API(Graphics2D,Font,RenderingHints,FontMetrics,…)来生成图像。这是我的代码:

public static void main(String[] args) {
    String text = "ⴰⴱⴱⵓⵥⵥⵍ";
    String [] polices=polices();
    for(int i=0;i<polices.length;i++){
        BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_3BYTE_BGR);
        Graphics2D g2d = img.createGraphics();
        Font font = new Font(polices[i], Font.PLAIN, 8);
        g2d.setFont(font);
        FontMetrics fm = g2d.getFontMetrics();
        int width = fm.stringWidth(text);
        int height = fm.getHeight();
        g2d.dispose();
        img = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
        g2d = img.createGraphics();
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2d.setFont(font);
        g2d.setBackground(Color.WHITE);
        g2d.clearRect(0, 0, width, height);
        fm = g2d.getFontMetrics();
        g2d.setColor(Color.BLACK);
        g2d.drawString(text, 0, fm.getAscent());
        g2d.dispose();
        try {
            ImageIO.write(img, "png", new File("Text "+i+".png"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

我找了很多解决方案,但都没有成功,如果有人能帮我,我会很感激的。也欢迎使用任何外部库的解决方案。

72dpi的8pt字体是8/72*360=360dpi的40号字体,因此将字体大小设置为40。

关于如何设置图像的DPI,请参阅问题如何设置图像中的DPI信息?