Using pixel fonts in PIL
Asked Answered
C

1

7

I am creating images using PIL that contain numerous exactly placed text strings. My first attempt was to convert pixel fonts into the pil-compatible format as described here. For example, I download the Silkscreen font and convert it:

otf2bdf -p 8pt -o fonts/slkscr.bdf fonts/slkscr.ttf 
pilfont.py fonts/slkscr.bdf

I can then use the font in PIL like so:

import Image, ImageDraw, os, sys, ImageFont
im = Image.new("RGB", (40,10))
draw = ImageDraw.Draw(im)
fn = ImageFont.load('fonts/slkscr.pil')
draw.text((0,0), "Hello", font=fn)
del draw
# write to stdout
im.save(sys.stdout, "PNG")

However, the resulting image (alt text) does not reflect what the font should look like.

What procedure should I be using to convert and use pixel fonts so that they render as intended?

Thanks in advance.

Conjuration answered 6/3, 2009 at 17:5 Comment(2)
Edit: I couldnt get it to work, and after a few hours I figured out that the pilfont.py utility actually creates 2 files, a .pil and a .pdm (the bdf is only a n intermediary). You need both of these files not only the .pil -.-Lactose
For future reference, the popular bitfontmaker ttf can be put through this process. otf2bdf can be found here (builds just fine with patch as described on website). You will have to fidget with -p <size> but don't need to specify resolution.Nino
C
4

Eureka!

Just needed to specify a resolution of 72 dpi (default is 100) for otf2bdf:

otf2bdf -p 8 -r 72 -o fonts/slkscr.bdf fonts/slkscr.ttf

Now, alt text looks great!

Conjuration answered 6/3, 2009 at 18:31 Comment(4)
Do you know why that is? It doesn't seem logical that fewer dots per inch would give you a better resolution/rendering.Closure
It's just a question of what size in points the font arbitrarily decides to match to a pixel. Silkscreen chose 72dpi as it is the old-school Mac OS resolution.Heterochromous
How can I see that Silkscreen uses 72dpi? Is that visible anywhere in the file?Mouthpart
Do not recall, as this was quite a while ago! Knowing my past (and current!) self, I suspect I tried various dpi until I found one that worked!Conjuration

© 2022 - 2024 — McMap. All rights reserved.