PIL und zlib

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
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Hi,

ich arbeite mich gerade durchs Handbuch von PIL (http://www.pythonware.com/products/pil/). Auf S. 70 habe ich gefunden, dass ich eine Bibliothek installieren muss, wenn ich eine PNG-Datei optimiert speichern will:

Code: Alles auswählen

Note: To enable PNG support, you need to build and install the ZLIB compression library before building the Python Imaging Library. See the distribution README for details.
Ich nutze:
  • Python Imaging Library 1.1.7 for Python 2.7 (Windows only)
    Python Imaging Library Handbook for 1.1.3
    Python 2.7 auf einem Windows 7-Rechner
Kann mir jemand sagen, was ich mir unter der ZLIB compression library vorstellen muss und wie ich

Code: Alles auswählen

build and install the ZLIB compression library before building the Python Imaging Library
mache? Das ist das erste Mal, dass ich mich damit befasse.

LG pixewakb
BlackJack

@pixewakb: Du kompilierst PIL selbst‽ Gibt's das nicht fertig für Windows?
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Doch und die exe-Datei hatte ich auch nur zum Installieren verwendet, nur meine Frage ist:
To enable PNG support, you need to build and install the ZLIB compression library...
Das verstehe ich nicht. Ist diese zlib-Bibliothek unter Windows 7 schon dabei und mit in der exe enthalten gewesen oder muss ich das händisch nachinstallieren. Das ist das erste Mal, dass ich damit zu tun habe.

Ich habe gerade einfach mal zum Spaß versucht:

Code: Alles auswählen

import Image

im = Image.open("original.jpg")
im.save('target1.png', option='optimize')
im.save('target2.png')
Laut Handbuch müsste target1.png jetzt optimiert sein, da ich dem "PNG writer" gesagt habe, dass er die Datei möglichst klein machen sollte.

In der Praxis sind sowohl target1.png als auch target2.png gleich groß (193 KB) und ich glaube nicht, dass da irgendetwas optimiert wurde. Ich vermute, dass die zlib weder bei pil noch bei Windows dabei ist.

Exakt dazu hätte ich gerne mal eine zweite Meinung oder eine professionelle Einschätzung :D
BlackJack

@pixewakb: Du verstehst in der Tat nicht und zwar ganz grundlegend. 'Build' heisst die Software aus den Quelltext selber übersetzen und 'enable' heisst überhaupt erst ermöglichen. Und von optimieren steht da gar nirgends etwas. Wenn die zlib beim Übersetzen nicht vorhanden gewesen wäre, könntest Du PNG überhaupt nicht speichern — oder lesen.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

optimize
If present, instructs the PNG writer to make the output file as small as
possible. This includes extra processing in order to find optimal
encoder settings.
OK, in dem Absatz stimmt das. Lies mal im Handbuch auf der Seite nach. Dort wird optimize erklärt: Ich habe es mir so hergeleitet, dass die zlib benötigt wird, um eine bessere Komprimierung zu erreichen. Ein File nur mit der Endung png bringt's nicht.

Aktuell kann ich optimize als Parameter anhängen, wie ich möchte: Zwischen der optimierten und der Stadard-Version gibt es in Sachen Dateigröße keinen Unterschied - PIL ist da auf dem Rechner, den ich verwenden konnte, immer noch besser als MS Paint (Dateigröße ist deutlich größer), aber eben nicht optimal
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Da hast du dir etwas falsches hergeleitet, bzw. falsch verstanden. BlackJacks Aussage ist richtig. Wie speicherst du das Bild denn (Code) und woher willst du wissen, dass die Dateigröße nicht optimal ist?
Das Leben ist wie ein Tennisball.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Okay - sehe ich jetzt auch.

Ich habe mal mit GIMP die höchste Kompressionsrate versucht und komme bei 191 KB aus, PIL liefert beim gleichen Bild 193 KB (standardmäßig). Mir wird dann nur nicht klar, warum diese optimize-Option im Handbuch steht, wenn es zwischen der optimierten und der Standard-Fassung keinen Unterschied gibt und die Optimierung wohl ohnehin gemacht wird.
BlackJack

@pixewakb: Ich vermute mal man sollte nicht auf Basis eines einzelnen Beispiels solche Schlussfolgerungen treffen. Solange Du mit so ungenauen Zahlen wie KiB vergleichst und nicht verschiedene Bilder, auch inhaltlich — denn JPEG-Quellen sind meistens Fotos und haben bestimmte Eigenschaften wie Artefakte durch die verlustbehaftete Kodierung — kann es auch einfach daran liegen, dass keine Unterschiede auftreten.

Vielleicht wird die Optimierung auch *nicht* gemacht.
Antworten