PNG mit 7-Zip

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: PNG mit 7-Zip

Beitrag von Tiles »

Danke :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: PNG mit 7-Zip

Beitrag von Krishty »

Ich versuche gerade, eines meiner selbstgeschriebenes PNG-Tools, das nur an andere Tools weiterdirigiert, durch eine Stapelverarbeitungsdatei zu ersetzen. Weil, den Quelltext habe ich 2009 mit Framework-Abhängigkeiten geschrieben und ich kann und will ihn heute nicht mehr kompilierfähig haben. Stapelverarbeitungsdatei geht hingegen immer.

Mann ist das eine Scheiße mit den ganzen Tools. Nach Updates funktioniert die Optimierung nicht mehr so gut; Dateien werden geschrieben obwohl größer; Graustufen werden zu Paletten umgewandelt; blabla.

Falls irgendwann irgendjemand mit Interesse und Zeit und Hirn mein Gejammer liest – so hat ein vernünftiger PNG-Optimizer zu arbeiten, der fünf Tools auf einmal ersetzen müsste:
  • LZ77 ist eine scheiß Kompression. Man kann nicht wie bei LZMA fette, aber redundante Eingaben einfach wegkomprimieren. Die Eingabe hat möglichst schlank zu sein, und das bedeutet Color Space Reduction: Leere Alphakanäle löschen. Von RGB zu Graustufen konvertieren, falls möglich. Oder von RGBA zu Graustufen und Alpha. Oder zu Paletten. Die Bitmap muss so winzig wie möglich sein. Ich benutze OptiPNG dafür. Nicht wie TruePNG  – das zerstört in der Standardeinstellung Pixel mit Null-Alpha (gibt einen netten Schub bei der Kompression und netten Haarverlust bei den Anwendern).
     
  • Wenn man die Wahl zwischen zwei Formaten gleicher Farbtiefe hat (bspw. 8-Bit-Graustufen <=> 123 Paletteneinträge): Erstmal beide Verzweigungen weiterverfolgen. Kann man mit einer einfachen Stapelverarbeitunsgdatei leider nicht; dafür sind die nicht meta genug. Meh.
     
  • Filter für geringste Entropie optimieren. Das ist eine haarige Angelegenheit und da gibt es Millionen Veröffentlichungen drüber. Aber: Das ist nicht zwingend statisch. Die beste Wahl kann sich im Nachhinein noch ändern. Fast alle PNG-Optimizer da draußen optimieren einmal die Filter und kümmern sich dann nur noch um LZ77. Da kommt dann so ein Müll bei raus wie TruePNG ist besser als OptiPNG (http://css-ig.net/png-tools-overview). Bullshit. Weil ihr PNGOut mit /f6 ausführt bleiben die Filter starr und darum optimiere ich nach fünf Jahren immernoch jedem Möchtegern-PNG-Optimizer da draußen die Hosen runter. Hier immernoch OptiPNG.
     
  • Dann kommt die Optimierung des LZ77. 99 % des Weges kann mit mit Ken Silvermans PNGOut schaffen. Das ist und bleibt die Nummer Eins auf dem Gebiet; und jeder große PNG-Optimizer benutzt es. Wer absolut sicher gehen will, sollte es mit allen sechs Filtereinstellungen aufrufen (die meisten benutzen nur eine).
     
    In dieser Hinsicht wäre es toll, wenn jemand cblooms Entwürfe für Optimal Parse ausprobieren würde. Er berichtet ja so schön abfällig über alles andere da draußen:
    http://cbloomrants.blogspot.de/2013/03/03-01-13-zopfli.html hat geschrieben:[Zopfli, die Spitze der ZIP-Kodierer] seems to be pretty straightforward, it's an optimal parser + huff reset searcher. There are various other prior tools to do this (kzip,deflopt,defluff,etc). It's missing some of the things that I've written about before here, such as methods of dealing with the huff-parse feedback; the code looks pretty clean, so if you want a good zip-encoder code it looks like a good place to start.
  • Danach geht es an die Huffman Codes. Hier fallen die letzten Millionstel der Datei; das ist allerdings auch der Bereich, in dem sich unter professionellen Tools die Sieger entscheiden. Ursprünglich bin ich hier nur mit DeflOpt rangegangen; aber eigentlich müsste man in einer Schleife fünf Mal defluff und ein Mal DeflOpt laufen lassen und abbrechen, wenn der Durschnitt der letzten 10 Durchläufe kein neues globales Minimum erreicht hat. Wieder so gut wie unmöglich in Stapelverarbeitung.
Off-Topic:
Ich hasse diese Typen, die irgendwo noch ein paar Bits aus den Huffmans rauskitzeln, aber dann niemandem sagen, wie sie das geschafft haben.

Bei PNGOUT ist es noch halbwegs verständlich, weil eine Version kommerziell von einer Firma verkauft wird, an der Ken Silverman teilhat – schlicht der Wille nach Geld. Okay – von irgendwas müssen wir alle unseren Arsch am Kacken halten; und wenn man ein Experte ist und was Einzigartiges hat, kann man es sich auch bezahlen lassen. Zumal man die Technologie bei Bedarf lizensieren kann (PNGOUT / KZIP license).

DeflOpt ist in der Hinsicht toll:
I found that one of the ideas I used in BJWFlate was not used by any other zipper. Even if another zipper could compress a file to a size that was smaller than what BJWFlate did, I could still apply that idea to that other zipper's ZIP file and make it smaller.
[…]
I got into an agreement with someone else who would take over DeflOpt because he "would create Linux executables and maintain the project from then on". Obviously, that never happened. Never heard from him again after a few initial emails and a few emails after I had sent him the source code... . I am ready now (meaning 2012) to take back ownership of my program. Any lawyers around to give me free advice? ;)
Zwinker-Smiley! Statt der Welt zu erzählen, was es war, wolltest du was Besonderes sein und hast es für dich behalten. Nein doch nicht – du warst blöd genug, jemand Fremdem die Quelltexte anzuvertrauen, und jetzt weiß keiner mehr, bei wem die Rechte liegen. Zwinker-Smiley! Anstatt dass jetzt alle LZ-Datenströme der Welt ein paar Bytes kleiner werden, nehmen zwei starrsinnige Narren dieses Geheimnis mit ins Grab. Zwinker-Smiley!

Wie bei defluff. Ist es Abandonware. Fick-fack-fantastisch! Ich hoffe, der Autor fühlt sich dadurch sehr besonders; denn das ist er auch. Es ersetzt Wiederholungen durch Literalwiederholungen, aber … mehr weiß keiner; und wenn man es jemals rausfinden will, wird man alle Vermutungen implementieren und testen; oder das Programm rückentwickeln müssen. Toller Dienst an der Menschheit.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten