2016-12-30 6 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, какие артефакты; извините, но я вижу только синий прямоугольник с белым текстом; и ничего, что выглядит «не в порядке» ?! – GhostCat

+0

Артефакты находятся только по краям текста. Это из-за проблем с качеством сжатия JPEG. @Boann указал мне в правильном направлении. – 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