Image-Objekt mit reportlab in pdf einfügen

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
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Hallo,

ich möchte mittels

Code: Alles auswählen

c.drawImage(bild,2.0*cm,1.0*cm,width=2.0*cm,height=2.0*cm,mask=None)
ein Bild einfügen welches in Codeform vorliegt (habe ich mit img2py generiert)

das Bils ist etwa so:

Code: Alles auswählen

from wx.lib.embeddedimage import PyEmbeddedImage

symbol = PyEmbeddedImage(     .......    "pmnU0DnIz++f/23bKvbKshyNRv2X/R+SUCqnYpb6mwAAAABJRU5ErkJggg==")

bild = symbol.GetImage
folgender Fehler erscheint:
c.drawImage(bild,2.0*cm,1.0*cm,width=2.0*cm,height=2.0*cm,mask=None)
File "C:\Python26\lib\site-packages\reportlab\pdfgen\canvas.py", line 825, in drawImage
imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask)
File "C:\Python26\lib\site-packages\reportlab\pdfbase\pdfdoc.py", line 2076, in __init__
ext = string.lower(os.path.splitext(source)[1])
File "C:\Python26\lib\ntpath.py", line 190, in splitext
return genericpath._splitext(p, sep, altsep, extsep)
File "C:\Python26\lib\genericpath.py", line 91, in _splitext
sepIndex = p.rfind(sep)
AttributeError: 'Image' object has no attribute 'rfind'
Was mache ich falsch???

Danke im Voraus
Gruß Mathi
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Du musst die Funktion GetImage auch aufrufen…
BlackJack

@mathi: Die `drawImage()`-Methode erwartet einen Dateinamen und nicht den Inhalt einer Datei.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

ich kann aber ein PIL ImageObjekt einbinden.... jetzt stellt sich nur die Frage ob ich den vorhandenen Inhalt als PIL Image ausdrücken/umwandeln kann??

Gruß Mathi
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

der Lösung näher:


Ich kann ja mit

Code: Alles auswählen

width = symbol.GetImage().GetWidth()
height = symbol.GetImage().GetHeight()
symbol= Image.fromstring("L", (width, height), symbol.GetData())
ein PIL Objekt erzeugen, aber:

symbol=Image.fromstring("L", (width, height), symbol.GetData())
File "C:\Python26\lib\site-packages\PIL\Image.py", line 1797, in fromstring
im.fromstring(data, decoder_name, args)
File "C:\Python26\lib\site-packages\PIL\Image.py", line 594, in fromstring
raise ValueError("not enough image data")
ValueError: not enough image data
setze ich (width, height) auf Werte je kleiner als 50 kann ich zwar ein Bild einfügen, dieses sieht aber aus wie: ein Fernsehbild ohne Empfang (Rauschen)

Wo liegt der Fehler??
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

eins habe ich zumindest herausgefunden, die richtige Mehtode heißt `drawInlineImage()`,

aber das PIL - Problem konnte ich noch nicht lösen... :-(
BlackJack

@mathi: In welchem Format liegen denn die Bilddaten in der Zeichenkette vor? Entweder hast Du den falschen Modus gewählt oder den falschen Decoder (Default ist 'raw').

`drawInlineImage()` legt übrigens die Bilddaten für jeden Aufruf erneut im PDF ab. Wenn das Bild mehrfach gesetzt wird, ist das also etwas unökonomisch.
Antworten