Seite 1 von 1
PIL und resize
Verfasst: Mittwoch 10. August 2005, 10:33
von jgollers
Hallo!
Ich habe bei mir ein etwas merkwürdiges Verhalten der resize-Methode der PIL festgestellt. Wenn ich ein Bild mit resize verändern möchte kann ich ja auch einen Filter angeben. Nun möchte ich den BICUBIC-Filter verwenden und schreibe z.B.
Das funktioniert aber nicht und ich erhalte die Fehlermeldugn "unknown image filter" (so oder so ähnlich). Wenn ich allerdings
benutze dann klapp alles ohne Probleme. (BICUBIC wird in der Image.py der PIL nämlich auf den Wert 2 gesetzt.)
Mache ich was falsch? Kann jemand dieses Verhalten bestätigen?
(Ich benutze Python 2.4 und PIL 1.1.5 unter Slackware 10.1)
Viele Dank schon mal
Jörg Gollers
Verfasst: Mittwoch 10. August 2005, 11:04
von Joghurt
Wenn du nicht "from foobar import *" verwendet hast, musst du natürlich im.BICUBIC schreiben.
Verfasst: Mittwoch 10. August 2005, 12:16
von jens
Ich nehme statt resize einfach: im_obj.thumbnail( (640, 480), Image.ANTIALIAS )
Wobei das Ergibnis natürlich ein anderes ist! thumbnail behält die Proportionen eines Bildes bei, resize macht das nicht.
Verfasst: Mittwoch 10. August 2005, 15:56
von jgollers
Joghurt hat geschrieben:Wenn du nicht "from foobar import *" verwendet hast, musst du natürlich im.BICUBIC schreiben.
Das kann natürlich sein (Danke für den Tip). Ich werde es heute abend gleich mal ausprobieren.
jens hat geschrieben:Wobei das Ergibnis natürlich ein anderes ist! thumbnail behält die Proportionen eines Bildes bei, resize macht das nicht.
Noch eine kleine Bemerkung: Mein Skript berücksichtig dies bereits. Es vergrößert bzw. verkleinert die Bilddateien (Fotos) so, daß diese genau auf die Auflösung 800x600 zugeschnitten sind. (Entweder hat das Foto dann eine Breite von 800 oder eine Höhe von 600 Pixeln). Die die jeweils andere Koordinate wird natürlich mit dem gleichen Faktor skaliert.
Jörg Gollers
Verfasst: Mittwoch 10. August 2005, 15:58
von jens
jgollers hat geschrieben:Mein Skript berücksichtig dies bereits.
Das heißt also, du machst es per Hand??? Also du berechnest die resize Werte, so das es proportional ist?
Dann könntest du gleich die thumbnail-Funktion bnutzen, dann hast du einiges an Arbeit gespart, bzw. kannst du wieder in den Sourcen wegschmeißen
Verfasst: Freitag 12. August 2005, 08:50
von jgollers
Joghurt hat geschrieben:
Wenn du nicht "from foobar import *" verwendet hast, musst du natürlich im.BICUBIC schreiben.
Es war natürlich ein Namespace-Bug (mit Image.BICUBIC) funktioniert es jetzt!
jens hat geschrieben:Das heißt also, du machst es per Hand??? Also du berechnest die resize Werte, so das es proportional ist?
Ja, das mach' ich so und zwar weil in der PIL-Soku steht
Modifies the image to contain a thumbnail version of itself, no larger than the given size.
Da ich aber auch vergrößere, scheint thumbnail nicht das richtige zu sein (oder kann man da auch vergrößern?).
Außerdem müßte ich bei thumbmail auch zunächst ermitteln, ob das Bild breiter als hoch bzw. höher als breit ist (oder etwa nicht?).
Ich werde als Programm nicht ändern um evtl. eine Zeile einzusparen!
Jörg Gollers
ps: Ach ja, das Programm kontrolliert natürlich auch, ob es sich wirklich um JPG's handelt und nimmt ggf. eine Konvertierung vor.
Verfasst: Freitag 12. August 2005, 11:10
von jens
jgollers hat geschrieben:Da ich aber auch vergrößere, scheint thumbnail nicht das richtige zu sein (oder kann man da auch vergrößern?).
Also ich bin kein PIL experte, von daher weiß ich nicht ob es geht, aber wenn es in der Doku steht, das es nicht geht, wird es schon so sein
Allerdings denke ich, das es nie Sinn macht Bilder hochzurechnen! Warum mast du sowas?
jgollers hat geschrieben:Außerdem müßte ich bei thumbmail auch zunächst ermitteln, ob das Bild breiter als hoch bzw. höher als breit ist (oder etwa nicht?).
Nö, eigentlich nicht! Wenn du sagst, mach mir ein Thumbnail mit max 800x600, dann verkleindert PIL das Source-Bild halt so, das diese Werte nicht überschritten wird. Egal ob es nun Hochformat ist oder nicht.
jgollers hat geschrieben:ps: Ach ja, das Programm kontrolliert natürlich auch, ob es sich wirklich um JPG's handelt und nimmt ggf. eine Konvertierung vor.
Also in meiner Lösung muß ich jediglich das machen:
Code: Alles auswählen
if im_obj.mode!="RGB":
print "convert to RGB...",
im_obj = im_obj.convert("RGB")
print "OK"
Ansosten kann alles konvertiert werden, was PIL importieren kann!
Am besten schaust du dir mal mein Listing an:
http://www.python-forum.de/viewtopic.php?p=21021#21021
Verfasst: Montag 15. August 2005, 09:08
von Gast
jens hat geschrieben:Allerdings denke ich, das es nie Sinn macht Bilder hochzurechnen! Warum mast du sowas?
Weil das eine Vorgabe war. (Ist nicht auf meinem Mist gewachsen). In der Regel werden aber Verkleinerungen vorgenommen (95%).
Ja, hab' ich gemacht. Schönes Programm, aber mein Programm läuft nun und macht das was es tun soll. (Also gilt "never change a running program"!)
Vielen Dank noch für die Hilfe
Jörg Gollers
Verfasst: Montag 15. August 2005, 09:13
von jgollers
...und an dem vorherigen Betrag sehen wir mal wieder, daß dieses Forum (die Software) mich nicht mag... (ich wurde automatisch abgemeldet)
Jörg Gollers
Verfasst: Montag 15. August 2005, 14:16
von Joghurt
jgollers hat geschrieben:Modifies the image to contain a thumbnail version of itself, no larger than the given size.
Da ich aber auch vergrößere, scheint thumbnail nicht das richtige zu sein (oder kann man da auch vergrößern?).
Das heisst, dass das Bild nicht größer sein wird, als die von dir angegebene Größe, es u.U. (z.B. wegen dem Seitenverhältnis) kleiner als angegeben wird.
Beispiel: wenn du bei einem 100x100 Bild als Größe 400x300 angibst, wird es wahrscheinlich auf 300x300 gestreckt.
Verfasst: Dienstag 16. August 2005, 16:05
von jgollers
Joghurt hat geschrieben:Das heisst, dass das Bild nicht größer sein wird, als die von dir angegebene Größe, es u.U. (z.B. wegen dem Seitenverhältnis) kleiner als angegeben wird.
Beispiel: wenn du bei einem 100x100 Bild als Größe 400x300 angibst, wird es wahrscheinlich auf 300x300 gestreckt.
So, so ... nun hab' ich verstanden!
Jörg Gollers
Verfasst: Samstag 11. November 2006, 14:34
von brauerle
Hallo,
ist es denn möglich, der resize bzw thumbnail Funktion noch Parameter für die JPEG Kompression mitanzugeben? Ich krieg immer ziemliche Artefakte, da zu stark komprimiert wird.
Gruß.
Verfasst: Samstag 11. November 2006, 15:01
von BlackJack
Die Kompression wird erst beim Speichern wirksam. Bei JPEG kann man `save()` eine `quality` Option mitgeben.
http://www.pythonware.com/library/pil/h ... t-jpeg.htm