[ZOPE&PIL] Kan geen font aan ImageFont meegeven

Pagina: 1
Acties:

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:41
Hi all,

Ik heb het volgende probleem waar ik al bijna 4 dagen niet uitkom en zelfs google biedt geen uitkomst...

Ik ben een External Method aan het proggen om mooie grafieken mee te tekenen...Daar moet natuurlijk ook text in komen te staan.

Ik gebruik de Python Image Library om de plaatjes te maken en deze heeft ook een classe ImageFont. in de ImageFont moet dus een lettertype worden gedefinieerd voordat je deze kan gebruiken in de website. Nu heb ik een zooi lettertypes gewoon op disk (dus niet in de object database) maar het lijkt er op dat een Zope extension geen lettertype kan inlezen van Disk.

Nu heb ik dus alle fonts in de object database gezet en ik probeer nu via onderstaande code een font in te lezen..
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from cStringIO import StringIO
import os.path

def createBgImage(self, size=(500,500), minValue=0, maxValue=0, fromdate="", todate=""):
   """
   Creates the graph background and the units
   """
   image = Image.new('RGB',size)
   draw = ImageDraw.Draw(image)
   draw.line((10,10,90,90), fill=(255,255,255))
   draw.line((0, 0) + image.size, fill=(255,255,255))
   draw.line((0, image.size[1], image.size[0], 0), fill=(255,255,255))
   
   #hier zit dus het probleem
   sFontName = "courR12.pil"
   
   FontFolder = getattr(self,'fonts')
   sFontFile = getattr(FontFolder, sFontName)
   Font_file=StringIO()
   Font_file.write(sFontFile.data)
       
   myfont = ImageFont.load(Font_file)
   
   #draw.text((100,100), 'Dit is een test :P')
   del draw
   
   
   
   
   image_file=StringIO()
   image.save(image_file, "GIF") 
   image_file.seek(0)
   image_id = "test1"
   
   if image_id in self.objectIds():
    self.manage_delObjects(image_id)
   
   self.manage_addProduct['OFSP'].manage_addImage(image_id, image_file)
   image_image=getattr(self, image_id)
   image_image.manage_addProperty('image_id', image_id, 'string')
     
   return image_image

Omdat ImageFont.load geen objecten wil hebben, heb ik het maar even weggeschreven naar een temp file.

Maar daar gaat ie ook de mist in...

Dus waar het allemaal op neer komt:
Weet iemand hoe je PIL fonts moet gebruiken in een Zope Extension.

Verwijderd

Wat gebeurd er als je het volledige pad naar je fonts in het script definieert?

Verder zou ik een paar exceptions gooien om te kijken wat de foutmelding is, nu is het maar raden geblazen wat er fout gaat.

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:41
Als ik het volledige pad geef
code:
1
myfont = ImageFont.load('/usr/local/zope/lib/python2.1/site-packages/pilfonts/courR10.pil')

Krijg ik een IOerror :(

ImageFont heeft nog een andere functie genaamd ImageFont.load_path. Deze gaat het volledige pad die in sys.path gedefinieerd zijn.

Daardoor heb ik [code]
sys.path.append('/usr/local/zope/lib/python2.1/site-packages/pilfonts') [code]

toegevoegd zodat load_path ook daar gaat zoeken, maar dan krijg ik nog steeds de fout:

Error Type: IOError
Error Value: cannot find font.

Dus...Wie heeft er ervaring met het lezen van pil fonts in Zope. het gaat hier niet om een product, maar om een extension...

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:41
Zoals iedere programmeur zich wel kan beamen lag het antwoord wederom erg dichtbij.

hieronder de kloppende code
code:
1
2
3
sys.path.append('/usr/local/zope/lib/python2.1/site-packages/PIL/pilfonts');
   Font = ImageFont.load_path('courR10.pil')
   draw.text((100,100), 'Dit is een test :P', (255,255,255), font=Font)

het draait uiteindelijk allemaal om de font=Font. Omdat ik de documentatie van een oudere versie had, was dit niet nodig..maar na veel zoeken en toevallig een stukje script tegengekomen te zijn..heb ik het mysterie opgelost..

Altijd handig om even te posten toch? Voor de rest...Ik snap niet waarom er niet meer mensen zijn die zich met Python en/of Zope bezig houden...