PIL - ImageFont - ich sag nur Hilfe !!!

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Gast

hallo folks,

hab da ein kleines problem und weiss seit 2 tagen googlen nicht mehr weiter ...

Code: Alles auswählen

font_grafik = ImageFont.truetype("arial.ttf", 15)
will einfach nicht funktionieren!!! mir würde notfalls auch ein code zum ändern der schriftgröße reichen. ich möchte lediglich in meinem durch pil erzeugten gif die schriftgrösse evtl. noch schriftart ändern!!!

hier noch der fehlercode:
[Thu Jan 19 09:42:23 2006] [error] [client 195.30....] font_grafik = ImageFont.truetype("arial.ttf", 15)
[Thu Jan 19 09:42:23 2006] [error] [client 195.30....] self.font = _imagingft.getfont(file, size, index, encoding), referer: http://devel.treibsand.com/
[Thu Jan 19 09:42:23 2006] [error] [client 195.30....] IOError, referer: http://devel.treibsand.com/

[Thu Jan 19 09:42:23 2006] [error] [client 195.30.1.131] File "/usr/lib/python2.3/site-packages/PIL/ImageFont.py", line 121, in __init__, referer: http://devel.treibsand.com/julian/ps_start.cgi :idea: :?:

für jegliche ideen oder hilfestellung wäre ich sehr dankbar. ich weiss das es mit der pil installation (ImageFont.py) zusammenhängen muss was aber genau weiss ich nicht ... :evil:

thx julian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Aus meinem Thumb Proggi:

Code: Alles auswählen

            font_obj = ImageFont.truetype('arial.ttf', 12) # unter Linux ganzen Pfad angeben!
            ImageDraw.Draw( im_obj ).text( (10, 10), text, font=font_obj, fill=1 )

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
julian

hi,

leider werde ich aus deinem post nicht schlau ... in linux (der webserver läuft unter linux) hab ich den kompl. pfad zu den ttf`s angegeben!

und das # PIL's Fehler "Suspension not allowed here" work around:
# s. http://mail.python.org/pipermail/image- ... 00816.html
import ImageFile
ImageFile.MAXBLOCK = 1000000 # default is 64k

aus deinem progr. hinzugefügt, wirft aber immer noch die gleichen feheler im error_log aus ... aus denen ich auch nicht schlau werde ...

könntest du mir vllt. genauer erklären woran das liegt?

thx julian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also mit dem "Suspension not allowed here" hat das nix zu tun. Kommt IMHO nur bei sehr großen Bildern vor...

Mach doch als erstes mal einen CGI-Traceback mit http://www.python.org/doc/current/lib/module-cgitb.html also füge oben in dein Skript folgendes ein:

Code: Alles auswählen

import cgitb; cgitb.enable()
Was spuckt der Python-Traceback denn aus???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
julian

so hier nochmal der code, welcher simple grafiken erstellen soll:

Code: Alles auswählen

font_grafik = ImageFont.truetype("usr/X11R6/lib/X11/fonts/TTF/arial.ttf", 17)

gg = -1
for direct in directs_clean:
  gg += 1
  im = Image.new("P", (125, 34), 0)
  draw = ImageDraw.Draw(im)
  draw.text((5, 13), "%s" % directs_clean[gg][0], fill=1) #-> font=font_grafik,
  im.info['transparency'] = 0
  im.rotate(90).save("grafik_spalten/%s.gif" % directs_clean[gg][0], "GIF", transparency=0)
und hier das error_log vom server:
[Thu Jan 19 11:22:01 2006] [error] font_grafik = ImageFont.truetype("usr/X11R6/lib/X11/fonts/TTF/arial.ttf", 17), referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] File "/usr/lib/python2.3/site-packages/PIL/ImageFont.py", line 202, in truetype, referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] , referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] return FreeTypeFont(filename, size, index, encoding), referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] File "/usr/lib/python2.3/site-packages/PIL/ImageFont.py", line 121, in __init__, referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] [client 195.30.1.131] , referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] self.font = _imagingft.getfont(file, size, index, encoding), referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] IOError, referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] : , referer: http://devel.treibsand.com/julian/ps_start.cgi
[Thu Jan 19 11:22:01 2006] [error] cannot open resource, referer: http://devel.treibsand.com/julian/ps_start.cgi
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

julian hat geschrieben:und hier das error_log vom server:
Allerdings sagt der Error-Log nicht so viel, wie ein echter Traceback :)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
julian

hi jens,
hier der traceback:

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

/home/www/html-data/julian/ps_go.cgi
176 #------------------------#
177
178 font_grafik = ImageFont.truetype("usr/X11R6/lib/X11/fonts/TTF/arial.ttf", 17)
179
180 gg = -1
font_grafik undefined, ImageFont = <module 'PIL.ImageFont' from '/usr/lib/python2.3/site-packages/PIL/ImageFont.pyc'>, ImageFont.truetype = <function truetype>

/usr/lib/python2.3/site-packages/PIL/ImageFont.py in truetype(filename='usr/X11R6/lib/X11/fonts/TTF/arial.ttf', size=17, index=0, encoding='')
200 "Load a truetype font file."
201 try:
202 return FreeTypeFont(filename, size, index, encoding)
203 except IOError:
204 if sys.platform == "win32":
global FreeTypeFont = <class PIL.ImageFont.FreeTypeFont>, filename = 'usr/X11R6/lib/X11/fonts/TTF/arial.ttf', size = 17, index = 0, encoding = ''

/usr/lib/python2.3/site-packages/PIL/ImageFont.py in __init__(self=<PIL.ImageFont.FreeTypeFont instance>, file='usr/X11R6/lib/X11/fonts/TTF/arial.ttf', size=17, index=0, encoding='')
119 # FIXME: use service provider instead
120 import _imagingft
121 self.font = _imagingft.getfont(file, size, index, encoding)
122
123 def getname(self):
self = <PIL.ImageFont.FreeTypeFont instance>, self.font undefined, _imagingft = <module 'PIL._imagingft' from '/usr/lib/python2.3/site-packages/PIL/_imagingft.so'>, _imagingft.getfont = <built-in function getfont>, file = 'usr/X11R6/lib/X11/fonts/TTF/arial.ttf', size = 17, index = 0, encoding = ''

IOError: cannot open resource
args = ('cannot open resource',)
errno = None
filename = None
strerror = None

kannste mir da helfen bzw. hinweis geben???

thx
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich würde sagen, das 'usr/X11R6/lib/X11/fonts/TTF/arial.ttf' nicht existiert... Mach doch einfach mal ein print os.path.isfile(...) um zu sehen, das die Datei auch wirklich existiert...

Kannst du wirklich auf die TTF Datei zugreifen? Wenn es als CGI läuft, läuft es i.d.R. mit User nobody, darf der auch darauf zugreifen??? Pack doch mal die Font Datei zum CGI-Skript und probiere es dann...

Hast du SSH Zugang? Dann würde ich es mal direkt auf dem Server testen...

Was dir vielleicht auch hilft, mach doch ein kleines Mini-Skript, nur mit der Aufgabe, wo der Fehler auftritt und versuche dann zu sehen, warum das nicht geht...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
julian

Super,

1.000 x MERCI Jens ...
Ich hatte keine rechte auf dem Webserver für die TTF-Datei, hab jetzt per ssh und nach kurzem smalltalk mit dem Admin mir die benötigten TTf auf meinen webspace kopiert und siehe da alles funtzt.
Jaja die Welt könnte soooo einfach sein - konnte halt mit dem error_log und dem traceback null anfangen ...

Also many thx

mfg Julian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Naja, '''IOError: cannot open resource''' deutet schon irgendwie drauf hin ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
julian

hmm recht haste,

hat ein kollege grad auch gemeint ... aber find trotzdem dass der traceback nicht wirklich aussagekräftig ist. dachte die ganze zeit die pil wär hinünber oder nicht komplett ...

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:füge oben in dein Skript folgendes ein:

Code: Alles auswählen

import cgitb; cgitb.enable()
Warum in einer Zeile? Semikolons in Python sind so hässlich, in zwei Zeilen wäre das schöner.
Python Styleguide unter 'Rather not' hat geschrieben:do_one(); do_two(); do_three()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Schau mal hier: http://www.python.org/doc/current/lib/module-cgitb.html 8)
Na und? Man muss ja nicht jedes Beispiel aus der Doku 1-zu-1 übernehmen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

In dem Fall macht es für mich allerdings auch Sinn... Denn so kann man schnell mit nur einem # die Sache auskommentieren, hat also seine Vorteile... Dennoch stimme ich dir allgemein zu, ich selber mache auch sowas i.d.R. nicht... Außer vielleicht bei super keinen IF's wie if not var: return "" Aber das auch nur selten...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

julian hat geschrieben:so hier nochmal der code, welcher simple grafiken erstellen soll:

Code: Alles auswählen

font_grafik = ImageFont.truetype("usr/X11R6/lib/X11/fonts/TTF/arial.ttf", 17)
Das ist aber kein *absoluter* Pfad. Vielleicht hätte es auch genügt das Wurzelverzeichnis, also einen "Slash" ganz am Anfang einzufügen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Stimmt... Aber darf nobody auf /usr/X11R6/lib/X11/fonts/TTF/ lesend zugreifen???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Bei mir ja. :-)

Wüsste auch nicht warum man das verbieten sollte.
Antworten