Seite 1 von 1

[gelöst] Hochkant Bilder richtig skalieren [PIL]

Verfasst: Mittwoch 6. August 2008, 19:51
von slyon
Hallo!

Ich habe ein kleines Problem in meinem ersten Python/PyGtk-Projekt.
Ich habe ein kleines Programm geschrieben, welches alle JPG/jpg Fotos eines Verzeichnises mit Hilfe von PIL (PythonImagingLibrary, http://www.pythonware.com/products/pil) auf 640x480 saklliert und Thumbnails erzeugt und dann eine kleine Web-Gallerie anlegt.

Jedoch habe ich jetzt das Problem, dass PIL auch Hochkant Bilder auf 640x480 verzerrt.
Gibt es eine Möglichkeit, wie man entweder:
* nur einen Wert (Höhe oder Breite) angeben kann und der Andere dann automatisch berrechnet wird
oder:
* wie Python erkennen kann ob ein Foto im Hochkant-Format ist, damit ich es vor dem skallieren drehen kann.

Ich bin um jede Hilfe dankbar.

Slyon

Code: Alles auswählen

	def resize(self,folder):
		self.pics = []
		self.pics_JPG = glob.glob(self.folder+"/*.JPG")
		self.pics.extend(self.pics_JPG)
		if os.name != "nt":
			self.pics_jpg = glob.glob(self.folder+"/*.jpg")
			self.pics.extend(self.pics_jpg)
		self.pics.sort()
		n = 1
		for i in self.pics:
			imageFile = i
			img = Image.open(imageFile)
			width = 640
			height = 480
			img_new = img.resize((width, height))
			img_new.save(self.folder+"/album/medium/"+str(n)+".jpg")
			n += 1

Verfasst: Mittwoch 6. August 2008, 20:50
von HWK
Im PIL-Size-Attribut kannst du ja die Maße und damit auch erkennen, ob Hochkant-Format oder nicht vorliegt.
MfG
HWK

Verfasst: Mittwoch 6. August 2008, 20:55
von Sr4l
Wenn du z.B so etwas machst wird das Bild nicht verzerrt

Code: Alles auswählen

from PIL import Image

im = Image.open(r"C:\Users\Sr4l\Desktop\l2.bmp","r")
alt = im.size
print alt

neu = (64, int(alt[1]*64/alt[0]))
print neu
Die maximale Größe von 64 wird nur eingehalten, wenn es sich um ein Querformat handelt, aber so etwas kannst du ja auch noch abfangen.

Drehen geht mit PIL ganz einfach:

Code: Alles auswählen

im.rotate(90) 
*edit*
Hochkant ist wenn im.size[0] < im.size[1]

Verfasst: Mittwoch 6. August 2008, 21:33
von slyon
Hey!

Cool danke für eure schnellen Antworten!
Ich werde es gleich mal ausprobieren.

Slyon

Edit:

Es funktioniert, Danke!
Ich habe das ganze jetzt so gelöst:

Code: Alles auswählen

			size = img.size
			if size[0] < size[1]:
				img_new = img.resize((height, width))
			else:
				img_new = img.resize((width, height))
ganze Funktion:

Code: Alles auswählen

	def resize(self,folder):
		self.pics = []
		self.pics_JPG = glob.glob(self.folder+"/*.JPG")
		self.pics.extend(self.pics_JPG)
		if os.name != "nt":
			self.pics_jpg = glob.glob(self.folder+"/*.jpg")
			self.pics.extend(self.pics_jpg)
		self.pics.sort()
		n = 1
		for i in self.pics:
			imageFile = i
			img = Image.open(imageFile)
			width = 640
			height = 480
			size = img.size
			if size[0] < size[1]:
				img_new = img.resize((height, width))
			else:
				img_new = img.resize((width, height))
			img_new.save(self.folder+"/album/medium/"+str(n)+".jpg")
			n += 1