2016-05-15 6 views
0

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.

Antwort

0

Ein 8pt Schrift bei 72 dpi beträgt 8/72 * 360 = Größe 40 Schrift bei 360 dpi - so eingestellt, dass die Schriftgröße 40

wie die DPI für ein Bild festzulegen, siehe die Frage How to set DPI information in an image?

+0

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

+0

@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

+0

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