我想在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();
}
}
}
我徒劳地搜索了一个解决方案,如果有人可以帮助我,我会感激不尽。 也欢迎使用任何externe库的解决方案。
答案 0 :(得分:0)
72dpi的8pt字体是8/72 * 360 = 360dpi的40号字体 - 所以将字体大小设置为40.
关于如何设置图像的DPI,请参阅问题How to set DPI information in an image?