[Image-SIG] Font Support in PIL (workaround)

Jesse Montrose jesse@spine.com
Sun, 5 Aug 2001 00:47:37 -0700


clearly i should have waited until tomorrow to report on this issue
instead of boring everyone with the saga, but now that i've begun, i
might as well post my workaround...

the .pil format is a short plaintext header followed by 256 blocks of
10-shortint structs, and the font width is the first one.  i changed
byte 0x281 (offset from the start of the binary data, not the
beginning of the file) from 0x00 to 0x04 and all is well.

kevin, thanks again for the heavy lifting, apart from this minor tweak
the files look great and were just what i wanted!  now to make them
antialiased... ;)

On Sun, Aug 05, 2001 at 12:33:13AM -0700, Jesse Montrose wrote:
> i should have thought to do this test before.  it shows a ' ' as zero
> width!  unless anyone has any better ideas, i'm going to try to figure
> out the .pil format and hexedit the width to something reasonable.
> 
>     jaw portrait> python
> Python 1.5.2 (#0, Apr 10 2001, 10:03:44)  [GCC 2.95.3 20010219
> (prerelease)] on linux2
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> import Image
> >>> import ImageFont
> >>> import ImageDraw
> >>> font = ImageFont.load("font/Verdana_12_72.pil")
> >>> font.getsize(' ')
> (0, 14)
> >>> font.getsize('   ')
> (0, 14)
> >>> font.getsize('.')
> (4, 14)
> >>> font.getsize('abc')
> (22, 14)
> 
> 
> 
> On Sat, Aug 04, 2001 at 10:33:05PM -0700, Jesse Montrose wrote:
> > thanks for putting up those fonts, Kevin!  
> > 
> > i'm having a "missing space" problem that i'm assuming someone else
> > has run into with font rendering.  i've posted the problem output at
> > 
> >    http://www.spine.com/fontproblem.gif 
> > 
> > and the script used to generate it is below.  it renders the string
> > "one two three" in five different fonts, and three sizes per font.
> > 
> > as you can see from the picture, many of the output lines are
> > completely missing their spaces.
> > 
> > any tips?
> > 
> > 
> > 
> > 
> > #!/usr/bin/python
> > 
> > import Image, ImageDraw, ImageFont
> > import types
> > 
> > script = [
> > 	(255,0,0),
> > 	"font/Garamond_14_72.pil",
> > 	"font/Verdana_12_72.pil",
> > 	"font/Arial_14_72.pil",
> > 	"font/Bookman Old Style_14_72.pil",
> > 	"font/Courier New_14_72.pil",
> > 	 (0,255,0), 
> > 	"font/Garamond_24_72.pil",
> > 	"font/Verdana_22_72.pil",
> > 	"font/Arial_24_72.pil",
> > 	"font/Bookman Old Style_24_72.pil",
> > 	"font/Courier New_24_72.pil",
> > 	(0,0,255),
> > 	"font/Garamond_48_72.pil",
> > 	"font/Verdana_48_72.pil",
> > 	"font/Arial_48_72.pil",
> > 	"font/Bookman Old Style_48_72.pil",
> > 	"font/Courier New_48_72.pil"]
> > 
> > colors = [(255,0,0), (0,255,0), (0,0,255)]
> > 
> > im = Image.new('RGB', (400, 600))
> > draw = ImageDraw.Draw(im)
> > 
> > testString = "one two three"
> > colorIndex = -1
> > 
> > top = 0
> > fontName = 0
> > color = 0
> > for elem in script:
> > 	if type(elem) == types.TupleType:
> > 		color = elem
> > 		continue
> > 	else:
> > 		fontName = elem
> > 	font = ImageFont.load (fontName)
> > 	draw.setfont(font)
> > 	draw.text ((10,top),
> > 			   testString, fill=color)
> > 	top = top + font.getsize(testString)[1]
> > 
> > del draw
> > 
> > im.save("fontproblem.gif")
> > 
> > 
> > On Thu, Jun 22, 2000 at 08:01:16AM -0700, kcazabon wrote:
> > > Hi Loris;
> > > 
> > > I while back I created a whole bunch of font sets for PIL because I was
> > > having the same problems.  One of the other users (Piers Lauder) kindly
> > > provided FTP space for them, as they're quite large (even when zipped).
> > > 
> > > They're available at the following address if you'd like to download
> > > "pre-PIL-ified" fonts.
> > > 
> > > http://www.cs.usyd.edu.au/~piers/python/pilfonts.html
> > > 
> > > Kevin Cazabon
> > > 
> > > 
> > > From: "Loris Caren" <loris@caren.demon.co.uk>
> > > To: <image-sig@python.org>
> > > Sent: Wednesday, June 21, 2000 4:20 AM
> > > Subject: [Image-SIG] Font Support in PIL
> > > 
> > > 
> > > > Hello,
> > > > I'm try to create some fonts that can be read by the ImageFont library
> > > using
> > > > bdf2pil.  However it dies in font2image saying that Image.core.hex_decoder
> > > > should have two args rather than the one provided.
> > > > I've tried greping for hex_decoder in the library but dont get any hits.
> > > Can
> > > > anybody else get this to work?  Without it I can't see how that I can
> > > write
> > > > text using the ImageDraw library.
> > > >
> > > > _______________________________________________
> > > > Image-SIG maillist  -  Image-SIG@python.org
> > > > http://www.python.org/mailman/listinfo/image-sig
> > > 
> > > 
> > 
> 

-- 
  pgp  14 4b eb f7 62 13 2e c1                    jesse montrose
print  31 95 e6 82 25 64 7b 43                    www.spine.com