[gelöst] Hochkant Bilder richtig skalieren [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
Benutzeravatar
slyon
User
Beiträge: 2
Registriert: Sonntag 7. Oktober 2007, 21:39
Kontaktdaten:

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
Zuletzt geändert von slyon am Mittwoch 6. August 2008, 21:47, insgesamt 1-mal geändert.
Software is like sex, it's better when it's free.
- Linus Torvalds
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Im PIL-Size-Attribut kannst du ja die Maße und damit auch erkennen, ob Hochkant-Format oder nicht vorliegt.
MfG
HWK
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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]
Benutzeravatar
slyon
User
Beiträge: 2
Registriert: Sonntag 7. Oktober 2007, 21:39
Kontaktdaten:

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
Software is like sex, it's better when it's free.
- Linus Torvalds
Antworten