web-dev-qa-db-fra.com

Quelle est la différence pour les opérateurs d'échantillonnage / rééchantillonnage / échelle / redimensionnement / redimensionnement adaptatif / vignette dans ImageMagick convert?

J'ai trouvé plusieurs façons de modifier la résolution d'une image en utilisant convert:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail

Quelle est la différence?

Si je dois créer une grande miniature de taille variable avec un rapport hauteur/largeur fixe (recadrage nécessaire) - quel est mon meilleur choix?

82
est

redimensionner

-resize 400x300+20+30 (comme le -scale et -sample exemples ci-dessous) convertit une entrée en une image de sortie qui a les dimensions en pixels de 400x300. Il décale également la sortie de 20 pixels vers la droite et de 30 pixels vers le bas. De plus, il existe quelques différences supplémentaires par rapport à -scale:

  • -resize prend en charge un paramètre supplémentaire de -filter (qui devrait se produire sur la ligne de commande avant en utilisant -resize!).

  • -filter détermine l'algorithme exact à utiliser pour les couleurs des pixels ajoutés en cas d'agrandissement, ou pour les couleurs à utiliser pour les pixels restants lorsque certains de leurs voisins sont supprimés en cas de minification.

  • Pour obtenir la liste des filtres pris en charge, exécutez simplement convert -list filter.

  • -filter point -resize 400x300 crée exactement le même résultat que -sample 400x300 le fait, mais il fonctionne encore un peu plus lentement.

  • S'il n'est pas placé à côté (avant) -resize, la conversion sera silencieusement par défaut à -filter Lanczos qui est plus lent, mais qui génère une bien meilleure qualité (car il prend en compte les couleurs de tous les pixels environnants pour les nouveaux pixels ajoutés) que -filter point produit (qui utilise la règle le plus proche voisin pour déterminer la couleur des pixels nouvellement ajoutés).

échantillon

-sample 400x300 convertit une image d'entrée en une image de sortie qui a les dimensions en pixels de 400x300. Cependant, il existe quelques différences très importantes par rapport à -resize:

  • -sample ne prend pas en charge le paramètre supplémentaire de -filter; s'il est de toute façon défini, alors -filter est simplement ignoré.

  • Lors de l'agrandissement (car la taille de l'image d'entrée peut être inférieure à 400x300), les pixels sont répliqués en blocs.

  • Lors de la réduction (car la taille de l'image d'entrée peut être supérieure à 400x300), les pixels sont sous-échantillonnés avec un algorithme très simple: certaines lignes et colonnes sont simplement sautées.

  • L'argument geometry à -sample ne prend en charge aucune partie offset (contrairement à -resize, qui respecte les directives offset pour la sortie).

  • La sortie n'aura jamais plus de couleurs (différentes) que l'image d'entrée. il peut cependant avoir moins de couleurs.

  • Donc -sample est très rapide (plus rapide que -resize) - mais la qualité de sortie est (généralement) pire: vous pouvez facilement obtenir des effets extrêmes blocage et aliasing dans la sortie résultante.

  • Une caractéristique importante de -sample signifie que la nouvelle image ne contiendra pas de nouvelles couleurs, bien que certaines couleurs de l'image d'origine puissent disparaître.

rééchantillonner

-resample utilise comme paramètre le XxY résolution, pas le XxY pixel géométrie de l'image cible. Le but de cet opérateur est de conserver la taille rendue d'une image: Supposons que votre image mesure 4 pouces par 3 pouces sur un appareil qui la rend à 300 DPI. Puis demander un -resample 72 ou -resample 72x72 redimensionnera l'image pour qu'elle mesure (à nouveau) 4 pouces par 3 pouces sur un appareil à 72 DPI.

  • Cette opération ne fonctionne que pour ces images qui ont déjà une résolution souhaitée stockée dans leurs métadonnées (tous les formats d'image ne prennent pas en charge le concept de résolution d'image - JPEG, PNG et TIFF le font).

  • Si l'image source est dans un format où la prise en charge interne d'une résolution d'image est manquante, la résolution d'origine (supposée) de l'image doit être spécifiée via -density sur la ligne de commande avant pour spécifier le -resample résolution.

échelle

-scale 400x300 produit le résultat équivalent (mais est plus rapide, car il évite tout le traitement du filtre) comme le fait l'utilisation de -filter box -resize 400x300. Il ignore également complètement tout -filter réglage.

  • Lors de la réduction, il modifie la taille de l'image simplement en remplaçant les couleurs de pixels en faisant la moyenne des couleurs de pixels d'entrée respectives ensemble.

  • Lors de l'agrandissement, il réplique simplement les pixels d'entrée respectifs pour les pixels supplémentaires requis.

redimensionnement adaptatif

-adaptive-resize 400x300 ne prend pas en charge (ou ignore, s'il est défini) la partie offset d'un paramètre géométrie et ignore également le -gravity réglage si présent.

miniature

-thumbnail fonctionne comme -resize le fait, avec quelques différences:

  • Il est optimisé pour la vitesse.

  • Il supprime également tous les profils de couleurs intégrés pour réduire la taille des fichiers des vignettes.


La réponse suivante montre quelques exemples (illustrés!) De -resize directive. Chaque illustration montre un résultat différent, en fonction des "détails fins" de la méthode de redimensionnement exacte:

129
Kurt Pfeifle

Comme l'a dit Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:

Si vous aviez des exemples d'images, ce serait encore plus parfait :-)

- redimensionner

google play with -resize (8,0 kB)

- échantillon

-sample (2,2 Ko)

- échelle

-scale (7,0 kB)

- redimensionnement adaptatif

enter image description here (4,3 kB)

1
serv-inc