Seite 1 von 1

Problem mit PIL - Manchmal gehts, manchmal nicht

Verfasst: Dienstag 13. März 2007, 00:33
von suye

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]

Verfasst: Dienstag 13. März 2007, 00:58
von Rebecca
Klingt nach nem Bug im C-Code von PIL (Probleme mit Referenzen?). Am besten an die PIL-Leute reporten!

Verfasst: Dienstag 13. März 2007, 01:04
von suye
Danke für deine Antwort! Da bin ich gerade bei ..

Verfasst: Dienstag 13. März 2007, 12:28
von suye
Gibt es eine andere Methode Bilder zu erstellen, mit einem Font darauf zu schreiben und sie dann abzuspeichern?
Das ist doch so ärgerlich :x

Verfasst: Dienstag 13. März 2007, 12:37
von Rebecca
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.)

Verfasst: Dienstag 13. März 2007, 13:21
von CM
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

Verfasst: Dienstag 13. März 2007, 13:56
von Dill
mit cairo geht das. http://cairographics.org/
wie genau kann ich dir nicht sagen, habe das modul gestern zum ersten mal gesehen.

Verfasst: Dienstag 13. März 2007, 16:37
von Sr4l
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