2012-05-09 55 views
1

我正在使用Java进行验证码的过程,但我无法改进文本质量,“drawString”方法在我的图像上生成。文质的提高“drawString”方法的文本质量

例子:

实际上,你可以看到文字的可怕边缘。

Java代码:在PHP中使用同一种字体的

File file = new File("C:\\captcha.png"); 
File file2 = new File("C:\\captcha2.png"); 
File fontfile = new File("C:\\xerox.ttf"); 
BufferedImage bfimage = ImageIO.read(file); 
Graphics2D g = bfimage.createGraphics(); 
Font myfont = Font.createFont(Font.PLAIN, fontfile); 
myfont = myfont.deriveFont(50f); 
g.setFont(myfont); 
g.setColor(Color.black); 
AffineTransform att = new AffineTransform(); 
g.translate(100, 50); 
att.rotate(Math.toRadians(15), 100, 50); 
g.setTransform(att); 
g.drawString("12345", 100, 50); 
RenderedImage rimg = bfimage; 
ImageIO.write(rimg, "PNG", file2); 

例,但这里的质量是很多边缘光滑更好:

如何提高文字质量由Java中的“drawString”方法生成?

回答

3

图形和Graphics2D提供了一个渲染提示框架,允许您配置组件渲染的某些部分。使用抗锯齿渲染提示:

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

你应该在你的验证码上得到antialiased文本。

http://docs.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html参考

+5

的“VALUE_TEXT_ANTIALIAS_DEFAULT”现场并没有解决问题,但场“VALUE_TEXT_ANTIALIAS_ON”解决了这个问题 - THX! – Birdman

+0

不客气:) – mcfinnigan

+0

“VALUE_TEXT_ANTIALIAS_ON”为我解决了 – Joqus