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.
Ich vermute, dass deine Ausgangsgrafik eine reduzierte Farbpalette hat. So kann man die Farben z.B. von ~16 Mio. auf ~65 Tausend oder 256 oder 16 runterschrauben. Wenn ich mich nicht irre reduzieren eine Grafikprogramme die Palette auch noch weiter, eben je nachdem wieviele Farben wirklich benötigt werden.
Sofern nun PIL die Palette beim Laden wieder vergrößert, ist das Resultat beim Speichern entsprechend größer. Die Paletten vorher und nachher würde ich mal vergleichen und/oder in der Doku nach Anhaltspunkten in diese Richtung suchen. Lossy-Komprimierung wie bei JPEG gibt es bei PNGs ja nicht.
schau doch mal in die Docu von PIL... ich wette die hilft dir da weiter
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
@splu: Um was für ein Bild handelt es sich denn? Und wie wurde das gespeichert/erzeugt?
Es gibt bei PNG die Möglichkeit verschiedene, reversible Filter auf die Zeilen an zu wenden, bevor die Daten komprimiert werden. Zusammen mit den Stellschrauben, die der Kompressionsalgorithmus bietet, gibt es da sehr viele Kombinationen die man durchprobieren müsste, um wirklich die optimale Kompression heraus zu finden. Die Programme verwenden deshalb in der Regel Heuristiken oder recht einfache Ansätze um möglichst kleine PNGs zu erzeugen. Darum bekommt man mit unterschiedlichen Programmen auch unterschiedliche Dateigrössen.
Wenn da wirklich der Alphakanal entfernt wurde, dann war der wahrscheinlich komplett opak und damit überflüssig.
Die Ursprungsbilder sind ebenfalls PNG's jedoch werden sie von einem GIS-Server geschrieben. Als Konfigurationseinstellung wurde dort "nur" vorgenommen, dass es sich um PNG24 Handelt und das Bild keine Kompression besitzen soll.
@BlackJack:
Wie kann ich eine Mögliche Kompression denn beim Speichern angeben? Genau da kam ich nicht weiter. Beim einfachen Image object gibt es zwar den zusätzlichen Parameter "options" jedoch habe ich keine weiteren Informationen gefunden wie man dort möglicherweise auch ein Kompressionsverfahren angeben kann.
Wieso haben die ursprünglichen Bilder denn eine Bittiefe von 32 wenn PNG24 gewählt wurde? Kannst Du so ein Bild mal irgendwo hochladen, damit man sich dass mal anschauen kann?
PIL bietet ausser dem `optimize` keine Einflussmöglichkeiten für das Speichern von PNG bei RGB-Bildern.
Das ist ein interessantes Problem. Es liegt nicht an den Filtern. Die sehen bei beiden ziemlich gleich aus. Aus irgend welchen Gründen erzeugt die `zlib`-Kompression bei PIL für die gleichen Daten mehr Bytes.
Die beiden Hauptunterschiede sind, dass das Original die Daten nur mit der Kompressionsstärke "normal" und PIL mit "maximum" arbeitet, und das Original auf mehrere "Chunks" verteilt ist, während PIL einen erzeugt. Aber wenn man das Original mit ``convert`` von ImageMagick "konvertiert", dann hat man auch die Einstellung "maximum" und nur einen Chunk, aber die Datei ist kleiner ─ etwas grösser als das Original.
Letztendlich: Ist das so schlimm? Doppelt so grosse Dateien hört sich zwar viel an, andererseits komprimiert PIL in dem Beispielbild nur 0.7% schlechter, was IMHO eine recht geringe Abweichung ist. Die Ursprungsdaten sind immerhin 3 MiB gross.
Mit Ziel des Prozesses soll auch die besser kompression der Datei sein. Sie soll also weniger Speicherplatz in Anspruch nehmen. Es handelt es sich ja nicht um 10 solche Bilder sondern mehrer 10-tausende
Danke für eure Hinweise und Hilfe bisher. Vielleicht muss ich dann doch weg von Python für dieses Problem