L’un des avantages de mon rôle ici chez Google est que je peux parcourir de nombreuses applications Android et rechercher des endroits communs où les gens pourraient améliorer leurs performances.
dernièrement, j’ai remarqué la croissance d’une tendance effrayante : les fichiers PNG gonflés.
comme j’en ai parlé la dernière fois, PNG est un format de fichier image assez génial et flexible. Il a un excellent contrôle de la qualité et prend en charge la transparence. En tant que tel, il est devenu le go-to pour les développeurs en quête de transparence depuis quelques décennies maintenant.,
le problème est qu’il est assez facile de créer des fichiers PNG gonflés; diable, juste ajouter deux pixels à la largeur de votre image pourrait doubler sa taille. Il est donc facile de supposer que la plupart des png n’ont tout simplement pas reçu l’amour & qu’ils méritent.
donc, maintenant que j’ai parcouru environ 100 APK, j’ai décidé de transmettre mes meilleures suggestions sur la réduction de la taille du fichier PNG. Ces suggestions sont basées sur des choses que j’ai vues dans de vraies applications que de vrais humains utilisent. YMMV si votre application n’est utilisée que par des robots ou de petits écureuils.,
Une fois que vous comprenez le format de fichier PNG, il devient clair qu’il existe des améliorations évidentes qui pourraient entraîner des tailles de fichiers plus petites:
suppression des morceaux inutiles
réduction des couleurs uniques
optimisation du choix du filtre ligne par ligne
optimisation de la compression DEFLATE
et ce L’optimisation PNG est un problème courant depuis longtemps; il y a 20 ans, Ken Silverman a écrit L’un des premiers optimiseurs PNG populaires, PNGOUT. (Qui est devenu l’épine dorsale du célèbre moteur 3D Duke Nukem.,) Depuis lors, il y a eu beaucoup de nouveaux optimiseurs PNG qui ont frappé la scène; une recherche rapide google fera apparaître une pléthore d’options pour vous de choisir:
l’astuce ici, est que dans le spectre complet des choses qu’un outil pourrait faire, chacun de ces outils fait un sous-ensemble de celui-ci; donc il n’y a pas de « meilleur outil” pour le travail, alors assurez-vous que vous passez le temps d’évaluer celui qui fonctionne le mieux pour vous, puis adopter l’enfer hors de lui.
FWIW, un de mes favoris personnels sur cette liste doit être zopfling., Il réduit la taille du fichier PNG en fournissant une étape de dégonflage plus efficace et puissante dans le compresseur, ce qui lui permet de trouver de meilleures correspondances dans vos données. Il peut diminuer la taille du fichier PNG de 5%, sans affecter la qualité de l’image sous quelque forme que ce soit sure bien sûr, c’est beaucoup plus lent, mais il est impressionnant que des améliorations puissent encore être apportées au codec dégonflé de la vieille école.
l’essentiel ici, est que si vous avez beaucoup de données via votre application, vous devriez avoir un outil D’optimisation PNG dans votre pipeline de téléchargement / distribution, ne serait-ce que pour garder les fous à distance.,
réduire les couleurs
maintenant, si les outils ci-dessus ne fonctionnent tout simplement pas pour vous, ou si vous souhaitez adopter une approche plus manuelle pour améliorer certains de vos actifs _before_ il est jeté à l’un des outils ci-dessus, alors il vaut la peine de prendre les choses en main.
même s’il y a beaucoup de choses que vous pouvez faire manuellement, je suggère que vous ne devriez vous concentrer que sur la réduction du nombre de couleurs uniques dans votre image, puis laisser un outil prendre le reste du chemin.,
la raison de votre attention ici, est que la réduction des couleurs uniques influence directement le potentiel de compression à chaque autre étape du pipeline; et les outils peuvent faire le reste.
Voir, l’étape de filtrage de l’étape de compression PNG est alimentée par la façon dont les couleurs des pixels adjacents sont les uns aux autres. En tant que tel, la réduction du nombre de couleurs uniques dans le réduira la variation des pixels adjacents, diminuant la plage dynamique des valeurs qui sont crachées par le filtrage.
en conséquence, L’étape de dégonflage trouvera plus de valeurs en double et pourra mieux compresser.,
Il convient de noter cependant que, en réduisant le nombre de couleurs uniques, nous appliquons effectivement une étape d’encodage avec perte à notre image. C’est pourquoi vous devez gérer ce processus manuellement. Les outils ont du mal à comprendre la qualité perceptive humaine et, dans certains cas, les petites erreurs d’un outil peuvent ressembler à d’énormes erreurs à l’œil humain. Mais, si cela est fait de la bonne façon, cela ne devrait pas être perceptible pour l’utilisateur et peut économiser énormément d’espace.
PSA: choisissez le bon format de pixel
cela devrait aller de soi.., Mais j’ai vu des exemples dans quelques APK qui prouvent le contraire:
Vous devez vous assurer d’utiliser le bon format de pixel pour votre fichier PNG.
par exemple, si vous n’avez pas d’alpha dans l’image, l’utilisation de L’option RGBA 32bpp est un gaspillage d’un ¼ entier de votre image; utilisez plutôt le format truecolor 24bpp (ou utilisez simplement JPG).De même, si votre image ne contient que des données en niveaux de gris, vous ne devriez la stocker que sous 8bpp.
fondamentalement, assurez-vous de ne pas gonfler involontairement votre fichier PNG en utilisant le mauvais type de format de pixel.
images indexées, FTW!,
En continuant, la réduction des couleurs devrait toujours commencer par essayer d’optimiser vos couleurs afin qu’elles puissent être définies en utilisant le format indexé. Mode couleur indexée, choisit essentiellement les 256 meilleures couleurs à utiliser et remplace tous vos pixels par un index dans cette palette de couleurs. Le résultat, est une réduction de 16 millions de couleurs (24bpp) à 256, ce qui est une économie significative.,
L’exemple de Google Doodle ci-dessus a été exporté dans la fonction « Enregistrer pour le web” de Photoshop, et le format d’image a été défini sur PNG8, ce qui a créé cette palette de couleurs pour l’image: