Recommandation pour la compression des fichiers JPG avec ImageMagick

Je veux compresser un fichier image JPG avec ImageMagick mais je ne peux pas obtenir beaucoup de différence de taille. Par défaut, la taille de sortie est supérieure à l’entrée. Je ne sais pas pourquoi, mais après avoir ajouté des options de profil + et défini la qualité, je peux obtenir une taille plus petite mais toujours similaire à l’original.

L’image d’entrée est 255kb, l’image traitée est 264kb (utilisation du profil + pour supprimer les profils et la qualité des parameters à 70%). Est-il possible de compresser cette image à 150 ko au moins? Est-ce possible? Quelles options d’ImageMagick puis-je utiliser?

J’utilise toujours:

  • qualité en 85
  • progressive (compression comprobée)
  • un très petit flou gausssien pour optimiser la taille (0,05 ou 0,5 rayon) dépend de la qualité et de la taille de l’image, cela optimise notamment la taille du jpeg.
  • Dénudez n’importe quel commentaire ou tag exif

dans imagemagick devrait être

convert -ssortingp -interlace Plane -gaussian-blur 0.05 -quality 85% source.jpg result.jpg 

J’espère que cela sera utile.

Lien source: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/

De @Fordi dans les commentaires (n’oubliez pas de relever son commentaire si vous voulez): Si vous n’aimez pas le flou, utilisez -sampling-factor 4:2:0 . Cela permet de réduire de moitié la résolution du canal de chrominance, sans perturber la résolution de luminance sur laquelle vos yeux se fixent. Si vous voulez une meilleure fidélité dans la conversion, vous pouvez obtenir une légère amélioration sans augmenter la taille des fichiers en spécifiant -define -define jpeg:dct-method=float – c’est-à-dire utiliser la transformation en cosinus discrète à virgule flottante plus précise version entière

J’utilise les directives d’optimisation d’image de Google Pagespeed Insights , et pour ImageMagick, elles recommandent les éléments suivants:

Facteur d’échantillonnage 4: 2: 0
-bande
-qualité 85 [cela peut varier, j’utilise la gamme 60-80]
-entrelacer
-colorspace RGB

Commande dans ImageMagick:

 convert image.jpg -sampling-factor 4:2:0 -ssortingp -quality 85 -interlace JPEG -colorspace RGB image_converted.jpg 

Avec ces options, j’obtiens des économies de taille JPEG allant jusqu’à 40% sans perte visible.

Je dis juste pour ceux qui utilisent la classe Imagick en PHP:

 $im -> gaussianBlurImage(0.8, 10); //blur $im -> setImageCompressionQuality(85); //set compress quality to 85 

Une fois que j’ai eu besoin de redimensionner les photos de la caméra pour les développer:

  • Taille originale des fichiers: 2800 ko
  • Résolution: 3264×2448

Commander:

 mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05 
  • Taille du fichier de résultat 753 Ko
  • Résolution 2048×2048

et je ne vois aucun changement en plein écran avec mon moniteur de résolution 1920×1080. La résolution 2048 est la meilleure pour développer des photos de 10 cm avec une qualité maximale de 360 ​​dpi. Je ne veux pas le dépouiller.

edit: J’ai remarqué que j’ai même de meilleurs résultats sans flou. Sans flou, la taille de l’original est de 50%, mais la qualité est meilleure (lors du zoom).

J’appendais une note complémentaire utile et une suggestion générale pour minimiser le JPG et le PNG.

Tout d’abord, ImageMagick lit (ou mieux “devine” …) le niveau de compression jpeg en entrée et donc, si vous n’ajoutez pas -quality NN , la sortie devrait utiliser le même niveau que l’entrée. Parfois, pourrait être une caractéristique importante. Sinon, le niveau par défaut est -quality 92 (voir http://www.imagemagick.org )

La suggestion est sur un outil gratuit vraiment génial ImageOptim , également pour le traitement par lots.
Vous pouvez obtenir des jpgs plus petits (et des pngs aussi, surtout après l’utilisation du logiciel gratuit ImageAlpha [pas de traitement par lots] ou du Pngyu gratuit si vous avez besoin d’un traitement par lots).
Non seulement ces outils sont pour Mac et Win et en tant que ligne de commande (je suggère d’installer avec Brew puis de chercher dans les formules Brew).

J’ai ajouté -adaptive-resize 60% à la commande suggérée, mais avec une -quality 60% .

 convert -ssortingp -interlace Plane -gaussian-blur 0.05 -quality 60% -adaptive-resize 60% img_original.jpg img_resize.jpg 

Ce sont mes résultats

  • img_original.jpg = 13,913 Ko
  • img_resized.jpg = 845 Ko

Je ne sais pas si cette conversion détruit trop mon image, mais honnêtement, je ne pensais pas que ma conversion ressemblait à de la merde. C’était un panorama grand angle et je n’aimais pas l’obstruction méticuleuse.

Voici une solution complète pour ceux qui utilisent Imagick en PHP:

 $im = new \Imagick($filePath); $im->setImageCompression(\Imagick::COMPRESSION_JPEG); $im->setImageCompressionQuality(85); $im->ssortingpImage(); $im->setInterlaceScheme(\Imagick::INTERLACE_PLANE); // Try between 0 or 5 radius. If you find radius of 5 // produces too blurry pictures decrease to 0 until you // find a good balance between size and quality. $im->gaussianBlurImage(0.05, 5); // Include this part if you also want to specify a maximum size for the images $size = $im->getImageGeometry(); $maxWidth = 1920; $maxHeight = 1080; // ---------- // | | // ---------- if($size['width'] >= $size['height']){ if($size['width'] > $maxWidth){ $im->resizeImage($maxWidth, 0, \Imagick::FILTER_LANCZOS, 1); } } // ------ // | | // | | // | | // | | // ------ else{ if($size['height'] > $maxHeight){ $im->resizeImage(0, $maxHeight, \Imagick::FILTER_LANCZOS, 1); } } 

Est-ce que certains m’expérimentant ici et que mon garçon a fait que le flou gausien soit différent. La dernière commande que j’ai utilisée était:

mogrify * -sample-factor 4: 2: 0 -ssortingp -quality 88 -interplan Plane -définir jpeg: dct-method = float -colorspace RVB -gaussien-flou 0.05

Sans le flou de Gausian à 0.05, il était autour de 261kb, avec environ 171Ko pour l’image que je testais. La différence visuelle sur un moniteur 1440p avec une image complexe de grande taille n’est perceptible que lorsque vous effectuez un zoom avant.

@ JavisPerez – Est-il possible de compresser cette image à 150 ko au moins? Est-ce possible? Quelles options d’ImageMagick puis-je utiliser?

Reportez-vous aux liens suivants, où il existe une option dans ImageMagick pour spécifier la taille de fichier de sortie souhaitée pour l’écriture dans les fichiers JPG.

http://www.imagemagick.org/Usage/formats/#jpg_write http://www.imagemagick.org/script/command-line-options.php#define

-define jpeg:extent={size} As of IM v6.5.8-2 you can specify a maximum output filesize for the JPEG image. The size is specified with a suffix. For example "400kb".

 convert image.jpg -define jpeg:extent=150kb result.jpg 

Vous perdrez de la qualité en décompressant et en recompressant en plus de toute perte due à la diminution de la valeur de qualité de l’entrée.