Question

C'est vraiment une question en deux parties, car je ne comprends pas complètement comment ces choses fonctionnent encore:

Ma situation: j'écris une application Web qui permet à l'utilisateur de télécharger une image. Mon application redimensionne ensuite quelque chose d'affichable (par exemple: 640x480-ish) et enregistre le fichier pour une utilisation ultérieure.

Mes questions:

  1. Compte tenu d'un fichier JPEG arbitraire, est-il possible de dire quel est le niveau de qualité, afin que je puisse utiliser cette même qualité lors de l'enregistrement de l'image redimensionnée?
  2. Est-ce même important ?? Dois-je enregistrer toutes les images à un niveau décent (par exemple: 75-80), quelle que soit la qualité d'origine?

Je ne suis pas sûr de cela parce que, comme je le pense: (prenons un exemple extrême), si quelqu'un avait une image de 5 mégapixels enregistrée à la qualité 0, ce serait blocky comme n'importe quoi. En réduisant la taille de l'image à 640x480, le blocage serait lissé et à peine Moins perceptible ... jusqu'à ce que je l'ai enregistré avec de la qualité 0 à nouveau ...

À l'autre extrémité du spectre, s'il y avait une image qui était de 800x600 avec Q = 0, le redimensionnement à 640x480 ne changera pas le fait qu'il ressemble à une merde totale, donc économiser avec q = 80 serait redondant.

Suis-je même proche?

J'utilise la bibliothèque GD2 sur PHP si cela est utile

Était-ce utile?

La solution

  1. JPEG est un format avec perte. Chaque fois que vous enregistrez une même image JPEG, quel que soit le niveau de qualité, vous réduirez la qualité d'image réelle. Par conséquent, même si vous avez obtenu un niveau de qualité à partir du fichier, vous ne pouvez pas maintenir cette même qualité lorsque vous enregistrez à nouveau un JPEG (même en qualité = 100).

  2. Vous devez enregistrer votre JPEG à une qualité aussi élevée que vous pouvez vous le permettre en termes de taille de fichier. Ou utilisez un format sans perte tel que PNG.

Les fichiers JPEG de basse qualité ne deviennent pas simplement plus en blocs. Au lieu de cela, la profondeur de couleur est réduite et le détail des sections de l'image est supprimé. Vous ne pouvez pas compter sur des images de qualité inférieure en blocage et en regardant OK sur des tailles plus petites.

Selon le JFIF Spec. Le numéro de qualité (0-100) n'est pas stocké dans l'en-tête d'image, bien que la densité horizontale et verticale des pixels soit stockée.

Autres conseils

Vous pouvez afficher le niveau de compression par ImageMagick. Des instructions de téléchargement et d'installation peuvent être trouvées au site officiel.

Après l'avoir installé, exécutez la commande suivante à partir de la ligne de commande:

identify -format '%Q' yourimage.jpg

Et vous devriez obtenir la valeur de 0 (basse qualité, petite taille de fichiers) à 100 (haute qualité, grande taille de fichiers).

La source d'information

Pour les futurs visiteurs, en vérifiant la qualité d'un JPEG donné, vous pouvez simplement utiliser des outils ImageMagick:

$> identify -format '%Q' filename.jpg
   92%

L'algorithme de compression JPEG a certains paramètres qui influencent la qualité de l'image du résultat.

L'un de ces paramètres est les tables de quantification qui définissent le nombre de bits utilisés sur chaque coefficient. Différents programmes utilisent différentes tables de quaatisation.

Certains programmes permettent à l'utilisateur de définir le niveau de qualité 0-100. Mais il n'y a pas de défense commune de ce nombre. L'image faite avec Photoshop avec 60% de qualité prend 46 Ko, tandis que l'image faite avec GIMP ne prend que 26 Ko.

Les tables de quantification sont également différentes.

Il existe d'autres paramètres tels que le sous-échantillonnage, la méthode DCT, etc.

Vous ne pouvez donc pas les décrire tous par numéro de niveau de qualité unique et vous ne pouvez pas comparer la qualité des images JPEG par numéro unique. Mais vous pouvez créer un tel nombre comme Photoshop ou GIMP qui décrira les compromis entre la taille de la qualité.

Plus d'information:http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html

La pratique courante est que vous redimensions l'image à la taille appropriée et que vous appliquez JPEG après cela. Dans ce cas, des images énormes et moyennes auront la même taille et la même qualité.

Car il y a déjà deux réponses en utilisant identify, voici celui qui Sorte également le nom du fichier (pour scanner plusieurs fichiers à la fois):

Si vous souhaitez avoir une sortie simple de filename: quality Pour une utilisation sur plusieurs images, vous pouvez utiliser

identify -format '%f: %Q' *

à montrer le nom de fichier + compression de tous les fichiers du répertoire actuel.

Il y a donc essentiellement deux cas qui vous tiennent à cœur:

  1. Si une image entrante a une qualité de qualité trop élevée, elle peut prendre une quantité inappropriée d'espace. Par conséquent, vous pouvez, par exemple, réduire le Q = 99 à Q = 85.

  2. Si une image entrante a une qualité de qualité trop faible, cela pourrait être un gaspillage d'espace pour augmenter sa qualité. Sauf qu'une image qui a eu une grande quantité de données rejetées ne prendra pas par magie plus de place lorsque la qualité est augmentée - les images en blocs se compresseront très bien même dans des paramètres de haute qualité. Donc, à mon avis, il est parfaitement acceptable d'élever Q = 1 à Q = 85.

À partir de cela, je pense que le simple fait de forcer un cadre de qualité décent est une chose parfaitement acceptable à faire.

Voici une formule que j'ai trouvé bien fonctionne:

  1. JPG100SIZE (La taille qu'elle ne doit pas dépasser en octets pour 98-100% de qualité) = Largeur * Hauteur / 1,7

  2. jpgxsize = jpg100size * x (x = pour cent, par exemple 0,65)

Ainsi, vous pouvez les utiliser pour découvrir statistiquement la qualité que votre JPG a été enregistrée pour la dernière fois. Si vous voulez le faire tomber pour dire une qualité de 65% et si vous souhaitez éviter de rééchantillonner, vous devez comparer la taille initialement pour vous assurer qu'elle n'est pas déjà trop faible, et seulement à réduire la qualité

Chaque nouvelle sauvegarde du fichier diminuera encore la qualité globale, en utilisant des valeurs de meilleure qualité, vous préserverez plus d'image. Quelle que soit la qualité d'image originale.

Si vous rendez un JPEG en utilisant le même logiciel qui l'a créé à l'origine, en utilisant les mêmes paramètres, vous constaterez que les dégâts sont minimisés - l'algorithme aura tendance à jeter les mêmes informations qu'il a jetées la première fois. Je ne pense pas qu'il existe un moyen de savoir quel niveau a été sélectionné simplement en regardant le fichier; Même si vous le pouviez, différents logiciels garantissent presque différents paramètres et arrondis, ce qui rend un match presque impossible.

Cela peut être une question idiote, mais pourquoi seriez-vous préoccupé par la microgestion de la qualité du document? Je crois que si vous utilisez ImageMagick pour effectuer la conversion, cela gérera la qualité du JPEG pour vous pour le meilleur effet. http://www.php.net/manual/en/intro.imagick.php

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top