2016-12-30 69 views
1

我想在一些純色背景上繪製一些文本,並且在文本週圍出現一些文物。有沒有辦法獲得乾淨的文字?Java AWT文本產生文物

final BufferedImage image = new BufferedImage(400, 400, 
      BufferedImage.TYPE_INT_RGB); 

    Graphics2D g2d = (Graphics2D) image.getGraphics(); 
    g2d.setColor(Color.BLUE); 
    g2d.fillRect(0,0, image.getWidth(), image.getHeight()); 
    Font font = new Font ("Verdana", Font.PLAIN, 40); 

    AffineTransform affinetransform = new AffineTransform(); 
    FontRenderContext frc = new FontRenderContext(affinetransform, true, true); 

    TextLayout layout = new TextLayout("Hello World!", font, frc); 
    g2d.setColor(Color.WHITE); 
    layout.draw(g2d, 100, 100); 

    ImageIO.write(image, "jpg", new File("testDirtyText.jpg")); 

它生產的一些文物如下所示: enter image description here

圍繞這個任何其他方面的任何建議,將不勝感激也。

謝謝!

+2

錯誤,什麼文物;對不起,我只看到一個帶有白色文字的藍色矩形;並沒有看起來「失序」? – GhostCat

+0

工件就在文字的邊緣。這是因爲JPEG壓縮質量問題。 @波恩指出我正確的方向。 – undetected

回答

3

我不太確定你是指別名失真還是JPEG壓縮失真。要修復前者,請添加:

g2d.setRenderingHint(
    RenderingHints.KEY_TEXT_ANTIALIASING, 
    RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 

有關更多呈現選項,請參見https://docs.oracle.com/javase/8/docs/api/java/awt/RenderingHints.html

要修復後,保存爲PNG代替:

ImageIO.write(image, "png", new File("test.png")); 

或者,如果你真的需要一個JPEG,看到this Q&A有關設置JPEG質量水平。

+0

謝謝Boann!原來是JPEG壓縮級別。我做了一個單獨的搜索,如何設置它,並最終在您發送的相同鏈接(最初沒有看到鏈接)。我之前認爲我已經用PNG嘗試了它,但是看起來我在做純色塊之前做了PNG,所以我沒有看到PNG vs JPEG問題。將壓縮質量設置爲90%可解決問題。 – undetected