Optimisation fichiers PNG

Vos petites astuces, répertoire des tutoriels et astuces
Répondre
Avatar du membre
tioker
modérateur
Messages : 1187
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Optimisation fichiers PNG

Message par tioker »

Bonjour,
Ceci n'est pas une question mais une astuce.
Je suis (comme beaucoup) adepte des bibliothèques de procédures associées à l'explorateur de fichier - Nemo dans mon cas (mais ça s'applique aussi à bien d'autres je crois).
Je me suis bien amusé à générer des Comics sur ce site. Mais le résultat ne me semblait pas optimisé dans le sens où les fichiers générés avaient un certain ... embonpoint; mes correspondants à qui j'avais envoyé le résultat me l'ont fait remarquer :oops: ...
J'ai ressorti une procédure que j'ai adaptée pour optimiser les PNG, je vous la soumets.
En deux mots, dans le répertoire /home/chezmoi/.local/share/nemo/scripts/Images, je mets le fichier shell du nom que je veux (pngnq.sh pour ma part) qui me permet, d'un clic droit, d'appliquer la procédure à un ou plusieurs fichiers. Et là miracle, j'ai dans mon exemple un gain de place de 75% ! (attention, ici c'est le maximum)
pré-requis installer le programme

Code : Tout sélectionner

sudo apt install pngnq
Vous pouvez adapter le code, surtout si vous ne voulez pas conserver les anciennes versions (.old). Et je suis ouvert aux améliorations bien sûr.
Merci de vos retours.

Code : Tout sélectionner

#!/bin/bash
# ----------------------Optimise les fichiers png
#-----P = Prefix du nom de fichier
#-----N = Nouveau nom temporaire
#-----E = extension des fichiers
#!
for x in "$@"
do
	E=${x##*.}						# on récupère l'extension (source: https://math-linux.com/linux-2/bash/article/comment-extraire-le-nom-et-l-extension-d-un-fichier-en-bash)
	E=${E,,}						# on la met en minuscule (source: https://www.supinfo.com/articles/single/4814-manipulation-chaine-caracteres-bash)
	if [ $E = "png" ]				# si c'est du png...
	then
		P=${x%%.*}					# Préfixe dui fichier
		pngnq -fe ".png2" "$x"		# Optimisation du png, sortie en extesion .png2
		O="$x.old"					# Constitution n om fichier sauvegarde
		N="$P.png2"					# nom du fichier généré
		mv $x $O					# Sauvegarde ancienne version
		mv $N $x					# mise en ligne nouvelle version fichier
	fi
done
Voici un résultat optimisé !

Image
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1187
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: Optimisation fichiers PNG

Message par tioker »

Re-bonjour

Merci pour votre contribution, je regarde et vous fais un retour (1),

Mais déjà une précision importante: à aucun moment je n'utilise le terminal, et par la sélection (clic droit dans l'explorateur fichier) je peux optimiser un, plusieurs, tous les fichiers d'un dossier.
Je crois que la commande pngnq -fe ".png" toto.png (par laquelle je voudrais écraser le fichier d'origine) me retourne l'erreur suivante

Code : Tout sélectionner

pngnq - Error in pngnq.c near line 498 :
  rwpng_read_image() error: 21
Raison pour laquelle je passe par un .png2.

(1)
J'ai installé optipng et j'ai fait le test suivant:
- un fichier png de 8Mo
- je l'optimise avec pngnq --> il passe à 1,3Mo en 1,4 sec
- je l'optimise avec optipng (sans option) --> il passe à 4,6Mo en 12,4 sec
- après avoir restauré le fichier d'origine je refait un optipng (option -o7) --> il est resté à 4,6Mo mais en 3 minutes 4 secondes !!!
Donc je suis dubitatif...

Je pense qu'on peut dire que tous les fichiers ne sont pas éligibles à l'optimisation et qu'il existe au moins deux utilitaires (pngnq et optipng) pour le faire.
Procédure à adapter suivant ses goûts.

PS: j'utilise pngnq aussi pour optimiser les images publiées sur le Web après les avoir mises à la bonne taille.

Trace de mes tests pour les curieux

Code : Tout sélectionner

patrick@lmde4:~/Téléchargements/Test$ time pngnq -f Fleurs.png

real	0m1,405s
user	0m1,396s
sys	0m0,008s
patrick@lmde4:~/Téléchargements/Test$ time optipng  Fleurs.png
** Processing: Fleurs.png
1760x2554 pixels, 4x8 bits/pixel, RGB+alpha
Reducing image to 3x8 bits/pixel, RGB
Input IDAT size = 8241578 bytes
Input file size = 8253707 bytes

Trying:
  zc = 9  zm = 8  zs = 0  f = 0		IDAT size = 7139129
  zc = 9  zm = 8  zs = 0  f = 5		IDAT size = 4738258
  zc = 9  zm = 8  zs = 1  f = 5		IDAT size = 4620155
                               
Selecting parameters:
  zc = 9  zm = 8  zs = 1  f = 5		IDAT size = 4620155

Output IDAT size = 4620155 bytes (3621423 bytes decrease)
Output file size = 4620212 bytes (3633495 bytes = 44.02% decrease)


real	0m12,384s
user	0m12,341s
sys	0m0,020s
patrick@lmde4:~/Téléchargements/Test$ # ------------- là j'ai restauré le fichier d'origine 
patrick@lmde4:~/Téléchargements/Test$ time optipng -o7 Fleurs.png
** Processing: Fleurs.png
1760x2554 pixels, 4x8 bits/pixel, RGB+alpha
Reducing image to 3x8 bits/pixel, RGB
Input IDAT size = 8241578 bytes
Input file size = 8253707 bytes

Trying:
  zc = 9  zm = 9  zs = 0  f = 0		IDAT size = 7133558
  zc = 9  zm = 9  zs = 0  f = 1		IDAT size = 5231246
  zc = 9  zm = 9  zs = 1  f = 1		IDAT size = 5128040
  zc = 9  zm = 9  zs = 0  f = 2		IDAT size = 4898986
  zc = 9  zm = 9  zs = 1  f = 2		IDAT size = 4830179
  zc = 9  zm = 9  zs = 1  f = 3		IDAT size = 4789303
  zc = 9  zm = 9  zs = 0  f = 4		IDAT size = 4735679
  zc = 9  zm = 9  zs = 1  f = 4		IDAT size = 4613530
  zc = 9  zm = 9  zs = 1  f = 5		IDAT size = 4611915
                               
Selecting parameters:
  zc = 9  zm = 9  zs = 1  f = 5		IDAT size = 4611915

Output IDAT size = 4611915 bytes (3629663 bytes decrease)
Output file size = 4611972 bytes (3641735 bytes = 44.12% decrease)


real	3m4,306s
user	3m4,226s
sys	0m0,048s
patrick@lmde4:~/Téléchargements/Test$ 
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Répondre