¿Cuál es la diferencia para los operadores de muestra/remuestreo/escala/cambio de tamaño/tamaño adaptativo/miniatura en ImageMagick convert?
thumbnails (1)
Encontré varias formas de cambiar la resolución de una imagen usando convert
:
-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail
¿Cuál es la diferencia de esos?
Si tengo que hacer varios tamaños de miniaturas de imágenes grandes con una relación de aspecto fija (es necesario recortar), ¿cuál es mi mejor opción?
redimensionar
-resize 400x300+20+30
(como los ejemplos de-scale
y-sample
continuación) convierte una entrada a una imagen de salida que tiene las dimensiones en píxeles de400x300
. También desplaza la salida 20 píxeles hacia la derecha y 30 píxeles hacia abajo. Además, hay algunas diferencias más a-scale
:
-resize
admite una configuración adicional de-filter
(que debería aparecer en la línea de comandos antes de usar-resize
!).-filter
determina el algoritmo exacto que se utilizará para los colores de los píxeles añadidos en el caso de la ampliación, o para los colores que se utilizarán para los píxeles restantes cuando se eliminen algunos de sus vecinos en caso de minificación.Para obtener una lista de filtros compatibles, simplemente ejecute el
convert -list filter
de la lista deconvert -list filter
.-filter point -resize 400x300
crea exactamente el mismo resultado que-sample 400x300
, pero se ejecuta un poco más lento.Si no se establece junto con (antes)
-resize
, la conversión-resize
defecto a-filter Lanczos
que es más lento, pero que genera una calidad mucho mejor (porque tiene en cuenta los colores de todos los píxeles circundantes para los recién agregados) que-filter point
produce (que utiliza la regla de vecino más cercano para determinar el color de los píxeles recién agregados).
muestra
-sample 400x300
convierte una imagen de entrada a una imagen de salida que tiene las dimensiones en píxeles de400x300
. Sin embargo, hay algunas diferencias muy importantes para el-resize
:
-sample
no admite la configuración adicional de-filter
; si se establece de todos modos, entonces-filter
simplemente se ignora.Al aumentar (porque el tamaño de la imagen de entrada puede ser menor que
400x300
), los píxeles se replican en bloques.Al minimizar (porque el tamaño de la imagen de entrada puede ser mayor que
400x300
), los píxeles se muestrean por debajo con un algoritmo muy simple: algunas filas y columnas simplemente se omiten.El argumento de geometría para
-sample
no admite ninguna parte de desplazamiento (a diferencia de-resize
, que respeta las directivas de desplazamiento para la salida).La salida nunca tendrá más (diferentes) colores que la imagen de entrada; sin embargo, puede tener menos colores.
Por
-sample
tanto, la-sample
es muy rápida (más rápida que el-resize
), pero la calidad de salida es (por lo general) peor: puede obtener fácilmente efectos de blocking y aliasing extremos en la salida resultante.Una característica importante de la
-sample
es que la nueva imagen no contendrá ningún color nuevo, aunque algunos colores de la imagen original pueden desaparecer.
remuestreo
-resample
usa como parámetro la resoluciónXxY
deseada, no la geometría de píxelesXxY
de la imagen objetivo. El objetivo de este operador es preservar el tamaño representado de una imagen: suponga que su imagen mide 4 pulgadas por 3 pulgadas en un dispositivo que la renderiza en 300 DPI. Luego, al solicitar un-resample 72
o-resample 72x72
cambiará el tamaño de la imagen para que mida (nuevamente) 4 pulgadas por 3 pulgadas en un dispositivo de 72 DPI.
Esta operación solo funciona para aquellas imágenes que ya tienen una resolución deseada almacenada en sus metadatos (no todos los formatos de imagen admiten el concepto de una resolución de imagen, como hacen JPEG, PNG y TIFF).
Si la imagen de origen está en un formato donde falta el soporte interno para una resolución de imagen, entonces la resolución original (asumida) de la imagen debe especificarse mediante
-density
en la línea de comando antes de especificar la resolución de la resolución.
escala
-scale 400x300
produce el resultado equivalente (pero es más rápido, ya que evita todo el procesamiento del filtro) al igual que el uso de-filter box -resize 400x300
. También ignora por completo cualquier configuración de-filter
actual.
Cuando se minimiza, cambia el tamaño de la imagen simplemente reemplazando los colores de los píxeles al promediar los respectivos colores de los píxeles de entrada.
Al aumentar, simplemente replica los píxeles de entrada respectivos para los píxeles adicionales requeridos.
adaptable-redimensionar
-adaptive-resize 400x300
no admite (o ignora, si se establece) la parte de desplazamiento de un parámetro de geometría y también ignora la configuración de-gravity
si está presente.
- Utiliza por defecto la triangulación dependiente de datos al redimensionar (a menos que el método de cambio de tamaño sea anulado especificando adicionalmente
-filter [something]
).
miniatura
-thumbnail
funciona igual que-resize
, con algunas diferencias:
Está optimizado para la velocidad.
También elimina los perfiles de color incrustados para reducir el tamaño del archivo de las miniaturas.
La siguiente respuesta muestra algunos ejemplos (¡ilustrados!) De la directiva -resize
. Cada ilustración muestra un resultado diferente, dependiendo de los "detalles finos" del método de cambio de tamaño exacto:
- El comando ImageMagick crop no da resultado perfecto