Einer der Vorteile von meine Rolle hier bei Google ist, dass Iget zu troll durch eine Menge von Android-Anwendungen, und die Suche nach einer gemeinsamen Orten, wo Menschen vielleicht in der Lage sein, Ihre Leistung zu verbessern.
In letzter Zeit habe ich das Wachstum eines beängstigenden Trends bemerkt: Aufgeblähte PNG-Dateien.
Wie ich letztes Mal gesprochen habe, ist PNG ein ziemlich großartiges, flexibles Bilddateiformat. Es hat eine großartige Qualitätskontrolle und unterstützt Transparenz. Daher ist es seit einigen Jahrzehnten die Anlaufstelle für transparenzsuchende Entwickler.,
Das Problem ist, dass es ziemlich einfach ist, aufgeblähte PNG-Dateien zu erstellen; Heck, nur das Hinzufügen von zwei Pixeln zur Breite Ihres Bildes könnte seine Größe verdoppeln. Es ist also leicht anzunehmen, dass die meisten PNGs da draußen einfach nicht die Liebe & Pflege erhalten haben, die sie verdienen.
Jetzt, da ich ungefähr 100 APKs durchgescrollt habe, habe ich beschlossen, meine Top-Vorschläge zur Reduzierung der PNG-Dateigröße weiterzugeben. Diese Vorschläge basieren auf Dingen, die ich in echten Apps gesehen habe, die echte Menschen verwenden. YMMV, wenn Ihre App nur von Robotern oder kleinen Eichhörnchen verwendet wird.,
Sobald Sie das PNG-Dateiformat verstanden haben, wird klar, dass es einige offensichtliche Verbesserungsbereiche gibt, die zu kleineren Dateigrößen führen können:
Entfernen nicht benötigter Teile
Reduzierung eindeutiger Farben
Optimierung der Auswahl von zeilenweisen Filtern
Optimierung der DEFLATE-Komprimierung
Und dies sind keine neuen Informationen. PNG-Optimierung ist seit langem ein häufiges Problem; Vor 20 Jahren schrieb Ken Silverman einen der ersten beliebten PNG-Optimierer, PNGOUT. (Das wurde das Rückgrat der berühmten Duke Nukem 3D-Engine.,) Seitdem gibt es viele neue PNG-Optimierer, die die Szene getroffen haben; Eine schnelle Google-Suche bringt eine Fülle von Optionen für Sie zur Auswahl:
Der Trick hier, ist, dass in dem vollen Spektrum der Dinge, die ein Werkzeug tun könnte, jedes dieser Werkzeuge tut eine Teilmenge davon; So gibt es kein „bestes Werkzeug“ für den Job, so stellen Sie sicher, dass Sie die Zeit verbringen, um zu bewerten, welche für Sie am besten funktioniert, und dann nehmen Sie die Hölle aus ihm heraus.
FWIW, Ein persönlicher Favorit von mir auf dieser Liste muss zopfliPNG sein., Es reduziert die PNG-Dateigröße, indem es eine effizientere und leistungsstärkere Entlüftungsstufe im Kompressor bereitstellt, sodass sie bessere Übereinstimmungen in Ihren Daten finden kann. Es kann die PNG-Dateigröße um 5% verringern, ohne die Bildqualität in irgendeiner Form zu beeinträchtigen… sicher ist es deutlich langsamer, aber es ist beeindruckend, dass Verbesserungen am DEFLATE-Codec der alten Schule vorgenommen werden können.
Das Wesentliche hier ist, dass Sie, wenn Sie viele Daten über Ihre Anwendung erhalten, ein PNG-Optimierungstool in Ihrer Upload / Distribute-Pipeline haben sollten, wenn auch nur, um die Daten in Schach zu halten.,
Farben reduzieren
Wenn die oben genannten Tools einfach nicht für Sie funktionieren oder Sie einen manuelleren Ansatz zur Verbesserung einiger Ihrer Assets verwenden möchten _before_ Es wird zu einem der oben genannten Tools geworfen, dann lohnt es sich, die Dinge selbst in die Hand zu nehmen.
Obwohl es viele Dinge gibt, die Sie manuell tun können, schlage ich vor, dass Sie sich nur darauf konzentrieren sollten, die Anzahl der eindeutigen Farben in Ihrem Bild zu reduzieren, und dann ein Werkzeug den Rest des Weges nehmen lassen.,
Der Grund für Ihren Fokus hier ist, dass das Reduzieren einzigartiger Farben das Komprimierungspotential in jeder anderen Phase der Pipeline direkt beeinflusst.und Werkzeuge können den Rest erledigen.
Siehe, die Filterstufe des PNG-Komprimierungsschritts basiert darauf, wie viele benachbarte Pixelfarben zueinander stehen. Als solches reduziert die Verringerung der Anzahl der eindeutigen Farben in der Variation in benachbarten Pixeln, wodurch der Dynamikbereich von Werten verringert wird, die aus dem Filtern ausgespuckt werden.
Infolgedessen findet die DEFLATE-Phase mehr doppelte Werte und kann besser komprimieren.,
Es ist jedoch erwähnenswert, dass wir durch Reduzieren der Anzahl eindeutiger Farben effektiv eine verlustbehaftete Codierungsstufe auf unser Bild anwenden. Aus diesem Grund sollten Sie diesen Prozess manuell durchführen. Werkzeuge haben es schwer, die menschliche Wahrnehmungsqualität zu verstehen, und in einigen Fällen können kleine Fehler für ein Werkzeug für ein menschliches Auge wie große Fehler aussehen. Aber wenn es richtig gemacht wird, sollte es für den Benutzer nicht wahrnehmbar sein und kann viel Platz sparen.
PSA: Wählen Sie das richtige Pixelformat
Das sollte selbstverständlich sein.., Aber ich habe Beispiele in einigen Funktionen gesehen, die das Gegenteil beweisen:
Sie sollten sicherstellen, dass Sie das richtige Pixelformat für Ihre PNG-Datei verwenden.
Wenn Sie beispielsweise kein Alpha im Bild haben, ist die Verwendung der RGBA 32bpp-Option eine Verschwendung eines ganzen ¼ Ihres Bildes. Verwenden Sie stattdessen das 24bpp Truecolor-Format(oder verwenden Sie einfach JPG).Wenn Ihr Bild nur Graustufendaten enthält, sollten Sie es nur als 8bpp speichern.
Stellen Sie grundsätzlich sicher, dass Sie Ihre PNG-Datei nicht unbeabsichtigt aufblähen, indem Sie das falsche Pixelformat verwenden.
Indizierte Bilder, FTW!!!,
Wenn Sie fortfahren, sollte die Farbreduktion immer damit beginnen, Ihre Farben zu optimieren, damit sie mit dem INDIZIERTEN Format definiert werden können. Im INDIZIERTEN Farbmodus werden grundsätzlich die besten 256 Farben ausgewählt und alle Ihre Pixel durch einen Index in dieser Farbpalette ersetzt. Das Ergebnis ist eine Reduzierung von 16 Millionen Farben (24bpp) auf 256, was eine erhebliche Einsparung darstellt., und eine indizierte PNG-Datei
Das obige Beispiel Google Doodle wurde in Photoshop „save for web“ – Funktion exportiert, und das Bildformat wurde auf PNG8, die diese Farbpalette für das Bild erstellt: