请仔细查看图片。它是这样创建的:
BufferedImage ret = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = ret.createGraphics();
Map<TextAttribute, Object> attributes = new HashMap<TextAttribute, Object>();
attributes.put(TextAttribute.TRACKING, -0.120F);
attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
Font arial = new Font("Arial", Font.PLAIN, 10).deriveFont(attributes);
g.setFont(arial);
g.setColor(Color.BLUE);
g.drawString("Pumps", 0, 20);
我的问题是,“ P”和“ u”之间没有空格,而“ u”和“ m”之间没有空格。在任何文本或图像处理软件中都没有字母之间的空格差异。我做错了吗?对具有文本绘图功能的替代Java库进行的快速研究未能成功。
最佳答案
TextAttribute.TRACKING
的Javadoc说:
跟踪值乘以字体点大小,然后通过字体变换来确定要添加到每个字形簇前移的附加量。正跟踪值将抑制可选连字的形成。跟踪值通常在-0.1至0.3之间;通常不希望超出此范围的值。
您以-0.12稍微提高了运气。
但是,基本上,如果您尝试以很少的像素绘制文本,则无能为力。如果放大到这么小的文本,它将看起来总是很糟糕。
但是,您应该打开亚像素渲染:如果您在支持它的屏幕上,那将使其看起来更好。您目前处于灰度状态。