Java AWT文本生成工件

时间:2016-12-30 19:45:34

标签: 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

关于此任何其他方面的任何建议也将受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分: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质量等级的信息。