imagemagick thumbnails

¿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 de 400x300 . 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 de convert -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 de 400x300 . 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ón XxY deseada, no la geometría de píxeles XxY 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.

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