Java awt font spacing options

Since the Brazilian government does not have a public API for postal codes, I am trying to reverse engineer the code that correios.com.br uses to generate the image below so that I can create my own images for training the OCR program.

alt text

I believe that I already have almost everything except text and colors:

alt text

I'm not interested in colors right now, but the text interval really bothers me. For example, look at "Ti" in "Tijuca". These two letters are very close to each other in the original image, and I can not reproduce this function. I already tried to get the font by setting the values ​​to TextAttribute.TRACKING and TextAttribute.KERNING , but that didn't work.

My code follows:

 import java.awt.Color; import java.awt.font.TextAttribute; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; public class CreateImage { /** * @param args */ public static void main(String[] args) { int width = 570; int height = 120; boolean new_image = true; BufferedImage img; if (!new_image) { try { img = ImageIO.read(new File("original.jpg")); } catch (IOException e) { e.printStackTrace(); new_image = true; img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); } } else { img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); } Graphics2D g2d = img.createGraphics(); if (new_image) { // white background g2d.setPaint(Color.WHITE); g2d.fillRect(0, 0, width, height); g2d.setPaint(Color.BLACK); } else { g2d.setPaint(Color.RED); } Font myfont = new Font("SansSerif", Font.BOLD, 11); /* Hashtable<TextAttribute, Float> attributes = new Hashtable<TextAttribute, Float>(); attributes.put(TextAttribute.TRACKING, new Float(-0.01)); myfont = myfont.deriveFont(attributes); */ g2d.setFont(myfont); g2d.drawString("Logradouro:", 5, 13); g2d.drawString("Bairro:", 5, 33); g2d.drawString("Localidade / UF:", 5, 53); g2d.drawString("CEP:", 5, 73); g2d.drawString("Avenida das Américas - de 3979 a 5151 - lado ímpar", 105, 13); g2d.drawString("Barra da Tijuca", 105, 33); g2d.drawString("Rio de Janeiro/RJ", 105, 53); g2d.drawString("22631-004", 105, 73); g2d.dispose(); File file = new File("clone.jpg"); try { ImageIO.write(img, "jpg", file); } catch (IOException e) { e.printStackTrace(); } System.out.println("clone.jpg file created."); } } 

My question is: what are the other options for controlling how the line is spaced when it is drawn? Do you have ideas on what source code can do?

Thanks!

+6
java fonts image awt
source share
1 answer

I can’t say how to do it correctly in Swing, but what you are looking for is in a typography called kerning, so the attribute should do something .

+2
source share

All Articles