2012-05-09 54 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