Daniel Thoma: PNG komprimieren

Beitrag lesen

Hallo Matze,

Pixelformate wie JPG oder PNG basieren erstmal einfach auf einer Matrix (einem Raster) von Farbwerten. Daraus ergibt sich schonmal, dass es kein JPG im PNG gibt. Wenn Du ein ein JPG in ein PNG einfügst, wird das JPG gerendert (also die komplette Farbwertmatrix ausgerechnet) und in das PNG kopiert. Damit gibt es da kein JPG mehr und Deine Komprimierung vorher spielt keine Rolle mehr.

Unterschiedliche Dateigrößen verschiedener Pixelformate entstehen nun dadurch, wie diese Farbwertmatrix auf die Platte geschrieben wird.
PNG verwendet da erst einen Filter (muss es nicht und es gibt verschiedene), sodass statt der Werte einzelner Punkte dort eben relative Werte stehen.
Anschließend wird einfach ein Kompressionsalgorithmus (Deflate) drüber gejagt, wie ihn z.B. auch Zip verwendet. Der Filter dient dazu, dass diese Komprimierung besser greift. Dafür sind häufige gleiche Werte notwendig und das bekommt man bei vielen Bildern (vermutlich eher nicht bei Fotos) durch solche relativen Werte häufiger hin.
Um die Datei möglichst klein zu bekommen, kannst Du nun also den optimalen Filter wählen und die Kompressionsrate möglichst hoch stellen. (Dieser Parameter beeinflusst nur, wie viel Aufwand fürs komprimieren verbraten wird, bei Zip u.ä. gibt es den ja auch)

JPG verwendet im letzten Schritt auch eine verlustfreie Kompression, hat davor aber zwei andere Schritte:
JPG wendet erstmal einen Tiefpassfilter auf den Farbraum an (bei Farben merkt man das nicht so wie bei den Helligkeitswerten). Im Prinzip wird also die Farbauflösung niedriger.
Dann wird Blockweise eine diskrete Kosinustransformation angewendet und Frequenzen zusammengefasst. Anschaulich: Jeder Block (8x8 Pixel) wird als eine Summe von einigen wenigen festen Rastern dargestellt.

Mit diesem Hintergrundwissen weiß man nun: Man wird bei PNG nie so viel raus holen können wie bei JPG. Man kann bei PNG etwas rumspielen, aber die minimale Dateigröße ist nunmal vorgegeben durch die Information, die im Bild steckt.

Du willst im Prinzip zwei Bilder in unterschiedlichem Format kombinieren, weil Du eines verlustbehaftet speichern willst und das andere nicht.
Dazu brauchst Du entweder ein Vektorgrafikformat wie SVG in das Du die Pixelbilder einbetten kannst oder zumindest ein Format, das mehrere Bilder zusammenfügen kann (ich glaube mng kann sowas, da haben sie ziemlich viel reingebastelt).
MNG ist verbreitungshalber unbrauchbar, SVG ist da besser, aber der IE kann es eben auch nicht.
Bliebe, die Bilder erst mit HTML zusammenzusetzen, sofern es Dir überhaupt um Webseiten geht.

Grüße

Daniel