2016-12-30 9 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

Err、what artifacts;申し訳ありませんが、白いテキストの青い四角形しか表示されません。そして、「順不同」に見えるものは何もありませんか? – GhostCat

+0

アーティファクトはテキストの端のまわりにあります。 JPEG圧縮の品質問題が原因です。 @Boannは正しい方向に私を指摘した。 – undetected

答えて

3

エイリアシングアーティファクトかJPE​​G圧縮アーティファクトのどちらを指しているのかよくわかりません。元を修正するには、追加:

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が必要な場合は、JPEG品質レベルの設定についてthis Q&Aを参照してください。

+0

ありがとうBoann!それはJPEG圧縮レベルであることが判明しました。私はそれを設定する方法について別の検索を行い、あなたが送った同じリンクで終わった(最初はリンクを見なかった)。前にPNGで試したことがあると思っていましたが、ソリッドカラーブロックを行う前にPNGをしたように見えましたので、PNGとJPEGの問題は見られませんでした。圧縮品質を90%に設定すると、問題が解決しました。 – undetected

関連する問題