91 votes

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

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

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

Quelle est la différence entre les deux ?

Si j'ai besoin de créer des vignettes de différentes tailles avec un rapport d'aspect fixe (recadrage nécessaire), quel est mon meilleur choix ?

2 votes

0 votes

145voto

Kurt Pfeifle Points 24491

redimensionner

-resize 400x300+20+30 (comme le -scale et -sample exemples ci-dessous) convertit une image d'entrée en une image de sortie qui a les dimensions de pixel de 400x300 . Il décale également la sortie de 20 pixels vers la droite et de 30 pixels vers le bas. En outre, il existe quelques différences supplémentaires par rapport à la version précédente. -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 une liste des filtres pris en charge, il suffit d'exécuter convert -list filter .

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

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

échantillon

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

  • -sample ne prend pas en charge le paramètre supplémentaire de -filter ; si elle est quand même définie, alors -filter est simplement ignorée.

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

  • Lors de la réduction (parce que la taille de l'image d'entrée peut être plus grande que celle de l'image d'origine), l'image est réduite à un minimum. 400x300 ), les pixels sont sous-échantillonnés à l'aide d'un algorithme très simple : certaines lignes et colonnes sont simplement ignorées.

  • Le site géométrie argument pour -sample ne prend pas en charge les décalage (contrairement à -resize qui respecte décalage pour la sortie).

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

  • Par conséquent, -sample est très rapide (plus rapide que -resize ) - mais la qualité de la sortie est (généralement) moins bonne : vous pouvez facilement obtenir des résultats extrêmes. blocage et crénelage dans les résultats obtenus.

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

rééchantillonner

-resample utilise comme paramètre le XxY résolution , pas pas le XxY pixel géométrie de l'image cible. Le but de cet opérateur est de préserver la rendu la taille d'une image : Supposons que votre image mesure 4 pouces sur 3 pouces sur un appareil qui la restitue à 300 DPI. Demandez alors une -resample 72 ou -resample 72x72 redimensionnera l'image de manière à ce qu'elle mesure (à nouveau) 4 pouces sur 3 pouces sur un appareil 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 supportent pas le concept de résolution d'image - JPEG, PNG et TIFF le font).

  • Si l'image source est dans un format où le support interne pour une résolution d'image est absent, alors la résolution originale (supposée) de l'image doit être spécifiée via -density sur la ligne de commande avant à la spécification de la -resample résolution.

échelle

-scale 400x300 produit un résultat équivalent (mais est plus rapide, car il évite tout le traitement des filtres) que l'utilisation de la fonction -filter box -resize 400x300 . Il ignore aussi complètement toute -filter réglage.

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

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

adaptive-resize

-adaptive-resize 400x300 ne prend pas en charge (ou ignore, si elle est définie) l'option décalage partie d'un géométrie et ignore également le paramètre -gravity s'il est présent.

  • Il utilise par défaut triangulation en fonction des données lors du redimensionnement (à moins que la méthode de redimensionnement ne soit remplacée par la spécification supplémentaire de -filter [something] ).

vignette

-thumbnail fonctionne comme -resize le fait, à quelques différences près :

  • Il est optimisé pour la vitesse.

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


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

4 votes

Merci, cela a beaucoup plus de sens que la documentation d'ImageMagick.

0 votes

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

1 votes

@KurtPfeifle : Tout d'abord, merci pour cette réponse très instructive. S'il vous plaît, pouvez-vous suggérer un bon livre ou un pdf de documentation pour Imagemagick. La meilleure approche que j'ai actuellement est de gratter toutes les pages d'Imagemagick pour réduire le temps de lecture, mais cela fait beaucoup d'informations (qui, à mon avis, ne sont pas toujours assez descriptives). Toute aide est très appréciée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X