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?
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 de400x300
. 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 de400x300
. 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 leXxY
résolution, pas leXxY
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.
-filter [something]
).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: