Ich möchte eine Zeichenfolge mit Java in einem gepuffertenImage rendern. Das Problem ist, wenn ich eine kleine Schriftart (zum Beispiel: 8pt) verwende ich habe schlechte Qualität Bilder und die Bildauflösung ist 72dpi. Ich möchte die beste Qualität für Bilder haben und wenn möglich die Auflösung der Bilder auf 360dpi ändern. Bekannt, dass ich eine Datenbank einer Sprache Wörter mit verschiedenen Schriftarten, Schriftgrößen und Schriftarten erstellen möchte. und ich verwendete die Standard-Java-API (Graphics2D, Font, RenderingHints, FontMetrics, ...), um Bilder zu generieren. hier ist mein Code:Wie man kleine UTF-Fonts in hoher Qualität rendern kann bufferedImage
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();
}
}
}
ich viel für eine Lösung vergeblich gesucht, wenn mir jemand helfen kann ich dankbar sein. Eine Lösung, die beliebige externe Bibliotheken verwendet, ist ebenfalls willkommen.
Ein Punkt ist definiert als genau 1/72 Zoll, nicht als Pixel. 8pt Schrift sollte die gleiche physische Größe wiedergeben, ob das Bild 72dpi oder 360dpi ist. – RealSkeptic
@RealSkeptic ja, eine 8pt Schriftart sollte 8 Punkte sein - leider unterstützt das 'BufferedImage' von Java das direkte Setzen der dpi nicht, und die einfachste Lösung ist es so zu tun, dass die Schriftgrößen in Pixeln gesetzt werden – Joni
Ich denke du solltest das deutlicher machen die Antwort, vielleicht erwähnen, dass das Ergebnis Ihrer Berechnung Pixel ist und dann verwenden Sie es als Punkte und warum. – RealSkeptic