Problem mit PIL - Manchmal gehts, manchmal nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
suye
User
Beiträge: 5
Registriert: Dienstag 13. März 2007, 00:29

Dienstag 13. März 2007, 00:33

Code: Alles auswählen

import Image, ImageDraw, ImageFont
from random import choice
def createCaptcha():
	imgtext = ''.join([choice('QWERTZUPASDFGHJKLYXCVBNM') for i in range(5)])
	img = Image.open('captcha_bg.jpg')
	draw = ImageDraw.Draw(img)
	font = ImageFont.truetype('captcha_font.ttf', 50)
	draw.text((10,10), imgtext, font = font, fill=(0,0,0))
	img.save('captcha.jpg')
	
createCaptcha()
Es soll also ein Hintergrundbild geladen werden und 5 willkürliche Buchstaben sollen darauf geschrieben werden.
Dann soll das neue Bild gespeichert werden.
Funktioniert - aber eben nur manchmal .. ist mir unbegreiflich warum.
Ich bekomme folgende Fehlermeldung, wenn es nicht klappt:
/usr/bin/python -u "/home/julian/Desktop/captcha.py"
*** glibc detected *** /usr/bin/python: double free or corruption (out): 0x081da618 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7e658bd]
/lib/tls/i686/cmov/libc.so.6(__libc_free+0x84)[0xb7e65a44]
/usr/lib/python2.4/site-packages/PIL/_imaging.so[0xb7d25ff4]
/usr/lib/python2.4/site-packages/PIL/_imaging.so(ImagingDelete+0x39)[0xb7d26089]
/usr/lib/python2.4/site-packages/PIL/_imaging.so[0xb7d062e5]
/usr/bin/python[0x8100cee]
/usr/bin/python(PyEval_EvalCodeEx+0x313)[0x80b9f93]
/usr/bin/python(PyEval_EvalFrame+0x404a)[0x80b86ea]
/usr/bin/python(PyEval_EvalFrame+0x46f4)[0x80b8d94]
/usr/bin/python(PyEval_EvalCodeEx+0x839)[0x80ba4b9]
/usr/bin/python(PyEval_EvalCode+0x57)[0x80ba527]
/usr/bin/python(PyRun_FileExFlags+0xca)[0x80ddb1a]
/usr/bin/python(PyRun_SimpleFileExFlags+0x187)[0x80ddd07]
/usr/bin/python(Py_Main+0xa82)[0x8055cc2]
/usr/bin/python(main+0x22)[0x8055132]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb7e148cc]
/usr/bin/python[0x8055081]
======= Memory map: ========
08048000-08121000 r-xp 00000000 03:02 649805 /usr/bin/python2.4
08121000-08142000 rw-p 000d8000 03:02 649805 /usr/bin/python2.4
08142000-08204000 rw-p 08142000 00:00 0 [heap]
b7a00000-b7a21000 rw-p b7a00000 00:00 0
b7a21000-b7b00000 ---p b7a21000 00:00 0
b7b7a000-b7b84000 r-xp 00000000 03:02 1038403 /lib/libgcc_s.so.1
b7b84000-b7b85000 rw-p 00009000 03:02 1038403 /lib/libgcc_s.so.1
b7b90000-b7bfa000 r--p 00000000 03:03 868184 /home/julian/Desktop/captcha_font.ttf
b7bfa000-b7c61000 r-xp 00000000 03:02 650424 /usr/lib/libfreetype.so.6.3.10
b7c61000-b7c64000 rw-p 00067000 03:02 650424 /usr/lib/libfreetype.so.6.3.10
b7c6f000-b7c72000 r-xp 00000000 03:02 909431 /usr/lib/python2.4/site-packages/PIL/_imagingft.so
b7c72000-b7c73000 rw-p 00002000 03:02 909431 /usr/lib/python2.4/site-packages/PIL/_imagingft.so
b7c73000-b7cb4000 rw-p b7c73000 00:00 0
b7cb6000-b7cba000 r-xp 00000000 03:02 780008 /usr/lib/python2.4/lib-dynload/binascii.so
b7cba000-b7cbb000 rw-p 00003000 03:02 780008 /usr/lib/python2.4/lib-dynload/binascii.so
b7cbb000-b7cbe000 r-xp 00000000 03:02 780025 /usr/lib/python2.4/lib-dynload/math.so
b7cbe000-b7cbf000 rw-p 00002000 03:02 780025 /usr/lib/python2.4/lib-dynload/math.so
b7cbf000-b7cc3000 r-xp 00000000 03:02 780029 /usr/lib/python2.4/lib-dynload/operator.so
b7cc3000-b7cc4000 rw-p 00004000 03:02 780029 /usr/lib/python2.4/lib-dynload/operator.so
b7cc4000-b7cc8000 r-xp 00000000 03:02 780039 /usr/lib/python2.4/lib-dynload/strop.so
b7cc8000-b7cca000 rw-p 00003000 03:02 780039 /usr/lib/python2.4/lib-dynload/strop.so
b7cca000-b7cdd000 r-xp 00000000 03:02 650954 /usr/lib/libz.so.1.2.3
b7cdd000-b7cde000 rw-p 00012000 03:02 650954 /usr/lib/libz.so.1.2.3
b7cde000-b7cfc000 r-xp 00000000 03:02 650690 /usr/lib/libjpeg.so.62.0.0
b7cfc000-b7cfd000 rw-p 0001d000 03:02 650690 /usr/lib/libjpeg.so.62.0.0
b7cfd000-b7d2e000 r-xp 00000000 03:02 909430 /usr/lib/python2.4/site-packages/PIL/_imaging.so
b7d2e000-b7d31000 rw-p 00031000 03:02 909430 /usr/lib/python2.4/site-packages/PIL/_imaging.so
b7d31000-b7d39000 rw-p b7d31000 00:00 0
b7d39000-b7d40000 r--s 00000000 03:02 665864 /usr/lib/gconv/gconv-modules.cache
b7d40000-b7d7b000 r--p 00000000 03:02 698734 /usr/lib/locale/de_DE.utf8/LC_CTYPE
b7d7b000-b7dff000 rw-p b7d7b000 00:00 0
b7dff000-b7f2c000 r-xp 00000000 03:02 1070812 /lib/tls/i686/cmov/libc-2.4.so
b7f2c000-b7f2e000 r--p 0012c000 03:02 1070812 /lib/tls/i686/cmov/libc-2.4.so
b7f2e000-b7f30000 rw-p 0012e000 03:02 1070812 /lib/tls/i686/cmov/libc-2.4.so
b7f30000-b7f33000 rw-p b7f30000 00:00 0
b7f33000-b7f57000 r-xp 00000000 03:02 1070816 /lib/tls/i686/cmov/libm-2.4.so
b7f57000-b7f59000 rw-p 00023000 03:02 1070816 /lib/tls/i686/cmov/libm-2.4.so
b7f59000-b7f5b000 r-xp 00000000 03:02 1070831 /lib/tls/i686/cmov/libutil-2.4.so
b7f5b000-b7f5d000 rw-p 00001000 03:02 1070831 /lib/tls/i686/cmov/libutil-2.4.so
b7f5d000-b7f5f000 r-xp 00000000 03:02 1070815 /lib/tls/i686/cmov/libdl-2.4.so
b7f5f000-b7f61000 rw-p 00001000 03:02 1070815 /lib/tls/i686/cmov/libdl-2.4.so
b7f61000-b7f70000 r-xp 00000000 03:02 1070826 /lib/tls/i686/cmov/libpthread-2.4.so
b7f70000-b7f72000 rw-p 0000f000 03:02 1070826 /lib/tls/i686/cmov/libpthread-2.4.so
b7f72000-b7f75000 rw-p b7f72000 00:00 0
b7f75000-b7f77000 r-xp 00000000 03:02 780001 /usr/lib/python2.4/lib-dynload/_random.so
b7f77000-b7f78000 rw-p 00002000 03:02 780001 /usr/lib/python2.4/lib-dynload/_random.so
b7f78000-b7f7e000 r-xp 00000000 03:02 780006 /usr/lib/python2.4/lib-dynload/array.so
b7f7e000-b7f80000 rw-p 00006000 03:02 780006 /usr/lib/python2.4/lib-dynload/array.so
b7f80000-b7f81000 rw-p b7f80000 00:00 0
b7f81000-b7f9a000 r-xp 00000000 03:02 1038527 /lib/ld-2.4.so
b7f9a000-b7f9c000 rw-p 00018000 03:02 1038527 /lib/ld-2.4.so
bf9e1000-bf9fb000 rw-p bf9e1000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
[/code]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 13. März 2007, 00:58

Klingt nach nem Bug im C-Code von PIL (Probleme mit Referenzen?). Am besten an die PIL-Leute reporten!
suye
User
Beiträge: 5
Registriert: Dienstag 13. März 2007, 00:29

Dienstag 13. März 2007, 01:04

Danke für deine Antwort! Da bin ich gerade bei ..
suye
User
Beiträge: 5
Registriert: Dienstag 13. März 2007, 00:29

Dienstag 13. März 2007, 12:28

Gibt es eine andere Methode Bilder zu erstellen, mit einem Font darauf zu schreiben und sie dann abzuspeichern?
Das ist doch so ärgerlich :x
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 13. März 2007, 12:37

Mmh, es gibt auch eine Python-Anmindung an Gimp. Die habe ich aber noch nie ausprobiert.

ImageMagick kann auch Text schreiben, habe ich aber noch nie ausprobiert (und hat auch nix mit Python zu tun, sondern man ruft es aus der Kommandozeile auf.)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 13. März 2007, 13:21

Hoi suye,

warte doch erst einmal Reaktionen auf Dein Post in der PIL-Mailingliste ab. Vielleicht weiß ja jemand eine Lösung. Dein Post kam übrigens völlig ohne Zeilenumbruch herüber - da ist wohl was schief gegangen. Das ist wohl eine der wenigen Fälle in denen ein Mehrfachposting angesagt ist ;-), denn der Post ist wirklich schlecht zu lesen - vielleicht aber von einem anderem Account oder erst nachdem Du das Problem mit dem Zeilenumbruch behoben hast.

Dann habe ich gerade noch folgendes Rezept gefunden:
http://aspn.activestate.com/ASPN/Cookbo ... cipe/44058

Gruß,
Christian
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Dienstag 13. März 2007, 13:56

mit cairo geht das. http://cairographics.org/
wie genau kann ich dir nicht sagen, habe das modul gestern zum ersten mal gesehen.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Dienstag 13. März 2007, 16:37

Hi ich habe jetzt die anderen antworten nicht gelesen ( schaden über mich)
aber ich muss immer

Code: Alles auswählen

from PIL import Image
machen. Oder zumindest:

Code: Alles auswählen

import PIL
import Image
...
also immer einmal import PIL und dannach erst die "Unter Libs"

So ist das bei mir (weiß nicht genau woran es liegt ist mir z.Z auch egal).
Habe XP laufen und Python2.4.4 und 2.5 für beide PIL installiert.

@CM Dein Link geht bei mir nicht.
mfG
Antworten