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

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

Beitragvon slyon » Mittwoch 6. August 2008, 19:51

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

Beitragvon HWK » Mittwoch 6. August 2008, 20:50

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:

Beitragvon Sr4l » Mittwoch 6. August 2008, 20:55

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:

Beitragvon slyon » Mittwoch 6. August 2008, 21:33

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder