¿Cuál es la diferencia para los operadores de muestra / resample / scale / resize / adaptive-resize / thumbnail en ImageMagick convert?

84

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 necesito hacer una miniatura de imagen grande de varios tamaños con una relación de aspecto fija (es necesario recortar), ¿cuál es mi mejor opción?

est
fuente
2
Esta URL - Ejemplos de ImageMagick v6 - Redimensionar o Escalar debería ayudarlo.
Harvey
Para obtener más información, consulte imagemagick.org/Usage/filter e imagemagick.org/Usage/filter/nicolas
fmw42

Respuestas:

136

cambiar el tamaño

-resize 400x300+20+30(como los ejemplos de -scaley a -samplecontinuación) convierte una entrada en 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 la parte inferior. Además, hay algunas diferencias más para -scale:

  • -resizeadmite una configuración adicional de -filter(¡que debería ocurrir 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 caso de ampliación, o 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 convert -list filter.

  • -filter point -resize 400x300crea exactamente el mismo resultado que lo -sample 400x300hace, pero aún funciona un poco más lento.

  • Si no se establece al lado (antes) -resize, la conversión se establecerá por defecto silenciosamente en -filter Lanczoscuál 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 nuevos agregados) que -filter pointproduce (que usa el más cercano regla de vecino para determinar el color de los píxeles recién agregados).

muestra

-sample 400x300convierte una imagen de entrada en una imagen de salida que tiene las dimensiones en píxeles de 400x300. Sin embargo, existen algunas diferencias muy importantes para -resize:

  • -sampleno admite la configuración adicional de -filter; si se establece de todos modos, -filtersimplemente se ignora.

  • Al ampliar (debido a que el tamaño de la imagen de entrada puede ser menor que 400x300), los píxeles se replican en bloques.

  • Al minificar (porque el tamaño de la imagen de entrada puede ser mayor que 400x300), los píxeles se submuestran con un algoritmo muy simple: algunas filas y columnas simplemente se omiten.

  • El argumento de geometría de -sampleno admite ninguna parte de desplazamiento (a diferencia de -resize, que respeta las directivas de desplazamiento para la salida).

  • La salida nunca tendrá más colores (diferentes) que la imagen de entrada; aunque puede tener menos colores.

  • Por -samplelo tanto, es muy rápido (más rápido que -resize), pero la calidad de salida es (normalmente) peor: puede obtener fácilmente efectos extremos de bloqueo y alias en la salida resultante.

  • Una característica importante de -samplees que la nueva imagen no contendrá nuevos colores, aunque algunos colores de la imagen original pueden desaparecer.

remuestrear

-resampleutiliza como parámetro la XxY resolución deseada , no la geometría de XxYpíxeles de la imagen de destino. El propósito de este operador es preservar el tamaño renderizado de una imagen: suponga que su imagen mide 4 pulgadas por 3 pulgadas en un dispositivo que la renderiza a 300 DPI. Luego, pedir un o cambiará el tamaño de la imagen para que mida (nuevamente) 4 pulgadas por 3 pulgadas en un dispositivo de 72 DPI.-resample 72-resample 72x72

  • Esta operación funciona solo 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 resolución de imagen: JPEG, PNG y TIFF sí).

  • Si la imagen de origen está en un formato en el que falta el soporte interno para una resolución de imagen, entonces la resolución original (asumida) de la imagen debe especificarse a través -densityde la línea de comando antes de especificar la -resampleresolución.

escala

-scale 400x300produce el resultado equivalente (pero es más rápido, porque evita todo el procesamiento del filtro) al igual que usar -filter box -resize 400x300. También ignora por completo cualquier -filterconfiguración actual .

  • Al minificar, cambia el tamaño de la imagen simplemente reemplazando los colores de los píxeles promediando los respectivos colores de los píxeles de entrada juntos.

  • Al ampliar, simplemente replica los píxeles de entrada respectivos para los píxeles adicionales necesarios.

cambio de tamaño adaptativo

-adaptive-resize 400x300no admite (o ignora, si se establece) la parte de desplazamiento de un parámetro de geometría y también ignora la -gravityconfiguración si está presente.

miniatura

-thumbnailfunciona igual que lo -resizehace, con algunas diferencias:

  • Está optimizado para la velocidad.

  • También elimina los perfiles de color incrustados para reducir el tamaño de las miniaturas.


La siguiente respuesta muestra algunos ejemplos (¡ilustrados!) De la -resizedirectiva. Cada ilustración muestra un resultado diferente, dependiendo de los 'detalles finos' del método de cambio de tamaño exacto:

Kurt Pfeifle
fuente
4
Gracias, eso tiene mucho más sentido que la documentación de ImageMagick.
Paul Brannan
Si tuviera imágenes de muestra, esto sería aún más perfecto :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@KurtPfeifle: Primero que nada, gracias por la respuesta tan informativa. Por favor, ¿puede sugerir algún buen libro o un pdf de documentación para Imagemagick? El mejor enfoque que tengo ahora es raspar todas las páginas de Imagemagick para reducir el tiempo de lectura, pero es mucha información (que en mi opinión, no siempre es lo suficientemente descriptiva). Cualquier ayuda es muy apreciada.
saurabheights
5

Como dijo Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:

Si tuviera imágenes de muestra, esto sería aún más perfecto :-)

-resize

google play con -resize (8,0 kB)

-muestra

-muestra (2,2 KB)

-escala

-escala (7,0 kB)

-adaptive-resize

ingrese la descripción de la imagen aquí (4,3 kB)

serv-inc
fuente