Quelle est la différence pour les opérateurs exemple / resample / scale / resize / adaptive-resize / thumbnail dans ImageMagick convert?

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

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

Quelle est la différence de ceux-ci?

Si j’ai besoin de faire des vignettes d’images de différentes tailles avec un rapport d’aspect fixe (recadrage nécessaire) – quel est mon meilleur choix?

    redimensionner

    -resize 400x300+20+30 (comme les exemples -scale et -sample ci-dessous) convertit une entrée en une image de sortie ayant les dimensions en pixels de 400x300 . Il déplace é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 à l’ -scale :

    • -resize prend en charge un paramètre supplémentaire de -filter (qui devrait apparaître sur la ligne de commande avant d’ utiliser -resize !).

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

    • Pour obtenir une 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 fait, mais il tourne encore un peu plus lentement.

    • Si elle n’est pas définie avec (avant) -resize , la conversion sera par défaut silencieuse à -filter Lanczos ce qui est plus lent, mais qui génère une bien meilleure qualité (car il prend en compte les couleurs de tous -filter point produit (qui utilise la règle du 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 ayant les dimensions de pixel de 400x300 . Cependant, il existe quelques différences très importantes à -resize :

    • -sample ne supporte pas le paramétrage supplémentaire de -filter ; si elle est définie de toute façon, 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 minification (car la taille de l’image d’entrée peut être supérieure à 400 x 300), les pixels sont sous-échantillonnés avec un algorithme très simple: certaines lignes et colonnes sont simplement ignorées.

    • L’argument de géomésortinge de -sample ne prend en charge aucune partie de décalage (contrairement à -resize , qui respecte les directives de décalage pour la sortie).

    • La sortie n’aura jamais plus de couleurs que l’image d’entrée. il peut cependant avoir moins de couleurs.

    • Par conséquent, – l’ -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 de blocage et d’ alias extrêmes dans la sortie résultante.

    • Une caractéristique importante de l’ -sample est que la nouvelle image ne contiendra aucune nouvelle couleur, bien que certaines couleurs de l’image d’origine puissent disparaître.

    rééchantillonner

    -resample utilise comme paramètre la résolution XxY souhaitée, et non pas la géomésortinge des pixels XxY de l’image cible. Le but de cet opérateur est de préserver la taille rendue d’une image: Supposez que votre image mesure 4 pouces sur 3 pouces sur un périphérique qui la restitue à 300 DPI. Ensuite, demander un -resample 72 ou un -resample 72x72 redimensionne l’image de sorte qu’elle mesure à nouveau 4 pouces par 3 pouces sur un périphérique de 72 DPI.

    • Cette opération ne fonctionne que pour les 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).

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

    échelle

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

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

    • Lors de l’agrandissement, il reproduit simplement les pixels d’entrée respectifs pour les pixels supplémentaires requirejs.

    adaptive-redimensionner

    -adaptive-resize 400x300 ne prend pas en charge (ou ignore, s’il est défini) la partie décalage d’un paramètre de géomésortinge et ignore également le paramètre de -gravity s’il est présent.

    • Il utilise par défaut une sortingangulation dépendante des données lors du redimensionnement (à moins que la méthode de redimensionnement ne soit surchargée en spécifiant -filter [something] ).

    la vignette

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

    • Il est optimisé pour la vitesse.

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


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

    • La commande de recadrage ImageMagick ne donne pas un résultat parfait