web-dev-qa-db-fra.com

PHP: Comment compresser des images sans perdre la qualité visible (automatiquement)?

Je me demande comment trouver automatiquement le meilleur taux de compression (petite taille de fichier + aucune perte de qualité).

En ce moment j'utilise imagejpeg () avec $quality = 85 pour chaque .jpg.

PageSpeed ​​(Chrome Plugin) suggère, pour abaisser la qualité de quelques images pour économiser quelques ko. Le pourcentage de réduction est différent.

Je voudrais écrire un cronjob qui explore un répertoire spécifique et optimise chaque image.

Comment PageSpeed ​​ou TinyPNG détermine-t-il la meilleure qualité optimisée et est-ce possible avec PHP ou un autre langage côté serveur?

18
Mr. B.

TinyPNG utilise pngquant .

Pngquant a la possibilité de définir la qualité souhaitée, similaire à JPEG. Vous pouvez exécuter quelque chose comme:

<?php system('pngquant --quality=85 image.png'); ?>

Le site Web Pngquant contient un exemple de code montrant comment utiliser pngquant à partir de PHP .


Pour JPEG, vous pouvez appliquer sans perte jpegcrush .

JpegMini (commercial) et jpeg-archive (gratuit) sont avec perte et peuvent trouver automatiquement une qualité minimale pour un JPEG.

Dans PHP vous pouvez approximativement estimer combien JPEG a été compressé en observant combien la taille du fichier change après la recompression. La taille du fichier JPEG recompressé avec une qualité identique ou supérieure ne changera pas beaucoup (mais perdra qualité visuelle).

Si vous recompressez JPEG et que la taille du fichier est réduite de moitié, conservez la version recompressée. Si vous ne voyez qu'une baisse de 10 à 20% de la taille du fichier, conservez l'original.

Si vous vous compressez, utilisez MozJPEG (voici un version en ligne ).

28
Kornel