Problem beim Image-Resize mit PIL

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
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Hallo zusammen,

ich bekomme leider beim Versuch eine Grafik zu verkleinern einen Fehler ausgegeben.

Code: Alles auswählen

ImgSize1 = (1150, 768)
Background = Image.open("Hintergrund_1.png")
global BackgroundDummy
Img1 = Image.open("IMG_3301.JPG")	# grosses bild links Oben
Img2 = Image.open("wasser2.JPG")	# kleines Bild unten links
Img3 = Image.open("IMG_3358.JPG")	# kleines Bild unten mitte
Img4 = Image.open("IMG_3358.JPG")	# kleines Bild unten rechts

# Aufbereitung der einzelnen Biler (Resize)
Img1 = Img1.resize(ImgSize1)
Img2 = Img2.resize(ImgSize2)
Img3 = Img3.resize(ImgSize2)
Img4 = Img4.resize(ImgSize2)

# Platzierung der Bilder auf dem Hintergrund
Background.paste(Img1, ImgPos1)
Background.paste(Img2, ImgPos2)
Background.paste(Img3, ImgPos3)
Background.paste(Img4, ImgPos4)

######################################################
# Button Event "Preview":
def callbackPreview():
	global Persons
	global Dedication
	global Background
	global BackgroundDummy

	print "Button event Preview"
	
	BackgroundDummy = Background.resize(500, 1000)
	
und dazu folgender Fehler:

Code: Alles auswählen

Button event Preview
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1535, in __call__
    return self.func(*args)
  File "PythonCollage_4.py", line 60, in callbackPreview
    BackgroundDummy = Background.resize(500, 1000)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1529, in resize
    raise ValueError("unknown resampling filter")
ValueError: unknown resampling filter
Das Resize der einzelnen Bilder, die ich auf den Hintergrund setze funktioniert super, nur das Resize der "Collage" welche in "Background" zwischengespeichert wird wirft mir den Fehler...

Hat evtl. jemand eine Idee warum?

vorab herzlichen Dank und viele Grüße

DaZeller
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Am besten wirft man dazu einen Blick in die Hilfe:
resize(self, size, resample=0) unbound PIL.Image.Image method
Returns a resized copy of this image.

:param size: The requested size in pixels, as a 2-tuple:
(width, height).
:param resample: An optional resampling filter. This can be
one of :py:attr:`PIL.Image.NEAREST` (use nearest neighbour),
:py:attr:`PIL.Image.BILINEAR` (linear interpolation),
:py:attr:`PIL.Image.BICUBIC` (cubic spline interpolation), or
:py:attr:`PIL.Image.LANCZOS` (a high-quality downsampling filter).
If omitted, or if the image has mode "1" or "P", it is
set :py:attr:`PIL.Image.NEAREST`.
:returns: An :py:class:`~PIL.Image.Image` object.
Bei der Gelegenheit solltest du auch ganz schnell vergessen, dass gloabal existiert. Werte betreten Funktionen über Parameter und verlassen sie über Rückgabewerte. Häufig bieten sich als Lösung auch Klassen an. Ein Blick in PEP 8 bezüglich der Namensgebung wäre auch ganz hilfreich.

Und ganz wichtig: Wenn du anfängst Namen zu nummerieren, dann machst du etwas falsch. Wenn das passiert, dann möchtest du eine geeignete Datenstruktur verwenden. Üblicherweise Tupel, Listen oder ein Dictionary.
Das Leben ist wie ein Tennisball.
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Hallo EyDu,

vielen Dank für deine Rückmeldung, wenn ich auch leider zugeben muss, dass ich nicht so wirklich schlau daraus geworden bin.

Könnetst du mir das nochmal in Klartext erklären?
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Der erste Parameter von resize muss ein Tupel mit der Größe sein. Der zweite optionale Parameter gibt den Typ des Resampling-Filters an.

Du hast jetzt nicht die Zielgröße als Tupel übergeben, sondern nur die gewünschte Breite des Bildes (500). Der zweite Parameter bekommt dann bei dir die Höhe des Bildes (1000) zugewiesen. Das geht dann natürlich daneben.,
DaZeller
User
Beiträge: 14
Registriert: Sonntag 8. Februar 2015, 21:05

Ouch! :oops:

Ja, natürlich... so kann man Tomaten auf den Augen haben... sry!

Und vielen Dank für die Geduld und Hilfe!
Antworten