J'ai l'intention d'écrire un script qui numérisera plus de 100 000 images JPEG et les recompressera si elles sont «trop grandes» en termes de taille de fichier. Les scripts sont la partie la plus facile, mais je ne sais pas comment catégoriser une image comme étant "trop grande".
Par exemple, il existe une image 2400x600px avec une taille de fichier de 1,81 Mo. La commande Enregistrer pour le Web de Photoshop crée un fichier de 540 Ko avec une qualité de 60 et les mêmes dimensions. Cela représente environ 29% de la taille d'origine.
Maintenant, je pense à utiliser ces chiffres comme ligne directrice. Quelque chose comme 540 Ko / (2 400 * 600/1 000 000) = 375 Ko par mégapixel. Toute image plus grande que celle-ci est considérée comme grande. Est-ce la bonne approche ou y en a-t-il une meilleure?
Édition 1: les images doivent être optimisées pour être affichées sur des sites Web.
Edit 2: Je peux déterminer la qualité de sortie souhaitée en expérimentant, j'ai besoin de savoir si les images sont grandes en termes de taille de fichier par rapport aux dimensions et doivent être enregistrées en qualité inférieure.
la source
Réponses:
En moyenne , le sweet spot de JPEG est d'environ un bit par pixel .
Cela variera bien sûr en fonction du contenu de l'image, car certains types de graphiques (par exemple les zones planes et les dégradés lisses) se compressent mieux que d'autres (bruit, texte), ce n'est donc pas une méthode robuste pour appliquer aveuglément à chaque image.
Vous avez également un problème de ne pas avoir d'image de référence non compressée avec laquelle comparer, donc vous ne savez pas vraiment avec certitude quelle est la qualité actuelle des images que vous avez, et combien plus vous pouvez réduire la qualité pour être toujours acceptable. La qualité peut être devinée dans une certaine mesure à partir des tableaux de quantification en JPEG, mais ce n'est pas non plus une méthode fiable (en particulier, le jugement de qualité d'ImageMagick est très incorrect pour les JPEG avec des tableaux de quantification personnalisés et optimisés).
Cela dit, il existe une approche pratique raisonnable:
Il est important de ne pas choisir simplement la plus petite taille de fichier et de demander à la place une baisse significative de la taille du fichier. En effet, la recompression du JPEG a tendance à toujours réduire légèrement la taille du fichier en raison de la perte de détails causée par la nature avec perte du JPEG et de la conversion en RVB 8 bits, donc de petites baisses de la taille du fichier peuvent avoir une baisse disproportionnée de la qualité qui ne vaut pas la peine il.
la source
La taille des fichiers compressés avec JPEG varie en fonction de la complexité de l'image. Si vous essayez de contrôler la taille des fichiers comme vous le décrivez, la qualité d'image perçue sera très variable.
Considérez plutôt les options suivantes:
L'approche suffisante. Utilisez un paramètre de qualité que vous trouvez acceptable, comme 75. Comparez la taille du résultat avec l'image d'origine et conservez le fichier plus petit. Voir Quelle qualité choisir lors de la conversion en JPG?
Utilisez un minimiseur JPEG , comme JPEGmini ou à
jpeg-recompress
partir de jpeg-archive . Ils sont essentiellement conçus pour faire ce que vous semblez essayer de faire, mais avec une meilleure connaissance des internes de l'algorithme JPEG.Générez des miniatures de différentes tailles , comme le suggère Nathancahill , du point de vue du développeur Web.
la source
Non, c'est une mauvaise approche.
La taille du fichier en pixels, oui, a quelque chose à voir avec le poids final, mais ce n'est pas le seul facteur.
Faites un test. Prenez un fichier complètement blanc du même 2400x600px et enregistrez-le en JPG.
Maintenant, prenez une photo d'une forêt (même 2400x600px) avec beaucoup de détails et enregistrez-la. Ce fichier sera plus volumineux en utilisant les mêmes paramètres de compression.
La taille finale dépend de ces 3 facteurs:
Vous ne pouvez donc pas et ne devez pas définir le poids en fonction de la taille des pixels.
Mais je comprends votre problème.
Sans analyser la compression actuelle de l'image, il est difficile de définir le poids "optimal" (qui est relatif à l'observateur, ou à l'utilisation des images)
Vous pouvez probablement définir un paramètre de compression et recompresser "chacun d'eux". Je ne sais pas si vous voulez le faire avant de "télécharger", ce qui vous fera probablement gagner plus de temps que le fait d'en ignorer certains.
Il existe des outils qui analysent une image et calculent le taux de compression actuel. Mais je doute que ce soit si important.
la source
jpeg size / raw size
etraw size = pixel size * number of pixel
,pixel size
étant 3 octets pour un espace colorimétrique RVB 24 bits. Et comme vous le dites vous-même, cette métrique ne suffit pas pour déterminer si une image est suffisamment compressée.Développeur Web ici. Voici comment j'aborderais ceci:
1. Déterminez les dimensions de l'image affichées et les résolutions d'écran requises.
Votre première tâche consiste à déterminer à quelle taille de pixel les images seront affichées. S'agit-il de photos de produits dans une boutique en ligne? Une galerie photo? Photos de profil d'utilisateur? Plusieurs tailles différentes? Faites une liste des dimensions en pixels dont vous aurez besoin. Vérifiez si vous aurez besoin d'images @ 2x pour les écrans haute résolution comme les téléphones et tablettes récents.
2. Utilisez un script de miniature pour créer de nouveaux fichiers image.
On les appelle des scripts de vignettes, mais ils peuvent être utilisés pour bien plus que de simples vignettes. Il existe de nombreux scripts ou vous pouvez écrire les vôtres. En ne redimensionnant pas les fichiers d'origine, vous pouvez le refaire si vous faites une erreur dans votre script ou réalisez que vous avez besoin d'une image de résolution supérieure. Une pratique courante consiste à spécifier un suffixe dans le nom du fichier de sortie. Par exemple:
3. Compressez.
Le script de vignette doit spécifier la compression jpg lorsque vous coupez les nouveaux fichiers image. Cependant, il existe d'autres minificateurs qui pourraient réduire encore la taille du fichier.
la source
Alors que la réponse de @ Rafael a expliqué les compressions JPEG entrantes et sortantes, je vais essayer de répondre à votre site Web et de télécharger problématique.
L'utilisation d'une image dans un site Web (pour la conception ou le contenu) dictera certains impératifs: à quoi mon image sera-t-elle utilisée? Logo, photo de couverture, miniature, photo dans un article de blog, photo plein écran pour une galerie ... Aussi, si vous l'utilisez à des fins multiples (par exemple une photo et sa miniature de galerie), vous souhaitez la décliner dans toutes les tailles requises. Cependant, à moins que vous ne construisiez votre propre site Web, la plupart des services Web génèrent de nos jours des images de plus petite taille à partir de votre image plus grande à utiliser sur place.
Maintenant que vous connaissez le but de votre image, le site Web (ou CMS ou Framework frontal) aura toujours besoin d'une taille maximale en pixels pour que votre image soit conforme. Les logos peuvent être 600x600px max, la couverture d'arrière-plan peut être 1280x720px max, la photo de contenu pour un affichage plein écran 1920x1080 ou la résolution native de la caméra pour une conservation absolue des détails. Vérifiez la taille correcte sur le site Web sur lequel vous souhaitez télécharger. Vous souhaitez correspondre au moins à la taille de pixel maximale requise, selon le rapport que vous souhaitez atteindre. Attention, certains services recadreront et étireront votre image si le rapport d'aspect n'est pas le même. Dans ce cas, vous devrez recadrer votre image pour l'adapter à la taille et au rapport maximum requis.
Ensuite, le site Web peut imposer une limite de taille de fichier (ou non, selon l'objectif de l'image). En ce qui concerne le temps de chargement des pages, le plus léger sera le mieux. Dans votre exemple d'image haute résolution à 2400x600px, 300 à 500 Ko est une taille totalement fine pour le temps de chargement. Les images de contenu (telles que les photos) peuvent être plus lourdes si l'objectif de l'image l'exige (par exemple un affichage plein écran), jusqu'à la résolution native de votre appareil photo si nécessaire. Si aucune indication n'est donnée, la taille limite du fichier peut être difficile à deviner, car elle peut dépendre de l'équipement du public (mobile, ordinateur de bureau ...), de la qualité du réseau du pays du public ... Pour une qualité et un service maximum, traitez les photos une par une pour obtenir la taille de fichier minimale sans artefacts visibles. Pour des raisons de commodité ou de vitesse, le script est redimensionné en utilisant un niveau de compression globalement satisfaisant (environ 70 devrait convenir).La réponse de @ xiota pourrait également être l'outil dont vous avez besoin. Définissez votre propre norme ici.
TL; DR l'objectif de l'image sur le site Web est essentiel pour la taille de redimensionnement / compression.
la source
Ce que vous calculez est la taille moyenne compressée d'un pixel d'image, si vous divisez cela par la taille du pixel brut (généralement 3 octets pour un RVB 24 bits), vous obtenez le taux de compression.
C'est une bonne métrique qui vous donne des informations sur l'état de compression de l'image, mais ce n'est pas suffisant pour juger si l'image est suffisamment compressée ou non car le taux de compression ne dépend pas uniquement du profil de compression (algorithme = JPEG, qualité = 60/100) mais aussi sur le potentiel de compression de l'image: des images différentes avec la même taille brute et le même profil de compression donneront une taille jpeg différente car les images sont plus ou moins faciles à compresser (une image vierge est très facile à compresser, blanc le bruit ne l'est pas).
Pour cette raison et parce que le profil de qualité «dernière utilisation» n'est pas stocké dans cette image (ni dans les métadonnées ni dans la structure d'en-tête jpeg), l'approche la plus utilisée lors de la republication d'images avec un profil de taille / qualité cible consiste en fait à recompresser (et redimensionner potentiellement) tout (automatiquement) quel que soit l'état initial de l'image.
Oui, vous pouvez recompresser quand ce n'est pas nécessaire, oui, vous pouvez même perdre de l'espace si vous recompressez avec un profil de qualité supérieure, mais ce sont des cas marginaux et à grande échelle, c'est la chose la plus simple à faire pour assurer un profil de qualité cible. Bien sûr, vous ne voulez le faire qu'une seule fois afin de ne pas dégrader progressivement les images, et vous devez probablement stocker deux bibliothèques d'images: la première "intacte" et la "à publier / recompresser".
Il existe de nombreux outils pour recompresser un tas de fichiers, vous pouvez également créer votre propre script et en utilisant la bonne pile technique (C ++ et libjpeg principalement), cela peut être sacrément rapide même pour des fichiers> 100k.
Si vous souhaitez implémenter un processus plus intelligent / plus complexe, vous pouvez essayer d'expérimenter une logique de recompression / comparaison itérative de la taille pour estimer le profil de qualité d'origine (la recompression avec la même qualité devrait donner à peu près la même taille, avec une la qualité devrait augmenter légèrement la taille et avec une qualité inférieure devrait diminuer considérablement la taille). Cela consommerait bien sûr beaucoup plus de puissance CPU.
la source
La taille non compressée d'origine est de 2400 x 600 x 3 = 4 320 000 octets (4,1 Mo), car la couleur 24 bits correspond toujours à trois octets de données RVB par pixel . Il n'y a aucun moyen de contourner cette vérité absolue.
Cependant, la taille JPG dépend également des détails de l'image. Les grandes surfaces lisses (comme le ciel ou les murs peints) se compressent mieux, mais les zones plus détaillées (comme un arbre plein de feuilles) ne se compressent pas aussi bien. Il n'y a donc pas d'indicateur numérique absolu.
Mais 540 KB est 0,540 / 4,1 = 13% de 4,1 Mo taille d' origine . Il peut représenter 29% de la taille JPG précédente, mais il représente 13% de la taille non compressée d'origine. C'est donc 1/8 de la taille originale non compressée, ce qui est généralement considéré comme une qualité "décente". Pas optimale, pas de qualité maximale, mais généralement décente, peut-être assez bonne pour certaines utilisations. Je dis juste que c'est déjà petit.
Un fichier JPG plus volumineux offre une meilleure qualité d'image et plus petit une qualité d'image moindre. Vous devez décider de ce qui est assez bon, mais JPG n'est jamais "trop grand", car la qualité de l'image diminue avec la compression JPG. La couleur 24 bits a trois octets par pixel non compressés.
La décision est donc de savoir si vous le voulez petit ou si vous le voulez bien.
Mais agrandir un JPG existant est encore pire, car plus d'artefacts JPG sont ajoutés, et une fois petits, les données sont modifiées et elles ne s'amélioreront jamais.
Les artefacts JPG montrent généralement deux manières, comme des blocs visibles de 8 x 8 pixels d'une couleur dans les zones lisses sans détail, ou comme des bords rugueux visibles autour des bords de détail.
Si vous modifiez et réenregistrez un JPG, des artefacts JPG supplémentaires sont ajoutés. Si cela est nécessaire, il est recommandé de toujours réenregistrer pour correspondre au paramètre de compression d'origine.
la source
"Enregistrer pour le Web" de Photoshop est en fait un assez bon compromis entre la taille et la qualité des fichiers, donc à moins d'avoir des exigences plus spécifiques, vous devriez y aller. Un conseil typique pour les développeurs Web est de s'en tenir à une gamme de qualité de 50 à 70%. Bien sûr, il y a des exceptions: vous voudrez une qualité de 90 à 95% sur un logo d'entreprise qui doit toujours être beau (ou même le convertir en un format sans perte), et aller jusqu'à 30% sur un grand mais à peine fond de page visible.
N'oubliez pas non plus de redimensionner vos images. Une image 2400x600 aura fière allure sur un écran 4K, mais sera redimensionnée sur des écrans plus petits, gaspillant la bande passante des données sans amélioration visuelle pour l'utilisateur. Vérifiez le modèle de site Web que vous utiliserez pour connaître la largeur optimale des images. En règle générale, au moment de la rédaction, cela se situera autour de 1200-1300 pixels (voir la résolution la plus populaire ici ).
N'oubliez pas de conserver les originaux des images que vous convertissez en qualité Web. Si vous avez besoin de retravailler ou d'imprimer ce matériau, vous regretterez de ne l'avoir qu'en qualité 60% et en résolution 1 Mpix.
la source