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?
Respuestas:
cambiar el tamaño
-resize
admite 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 400x300
crea exactamente el mismo resultado que lo-sample 400x300
hace, 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 Lanczos
cuá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 point
produce (que usa el más cercano regla de vecino para determinar el color de los píxeles recién agregados).muestra
-sample
no admite la configuración adicional de-filter
; si se establece de todos modos,-filter
simplemente 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
-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 colores (diferentes) que la imagen de entrada; aunque puede tener menos colores.
Por
-sample
lo 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
-sample
es que la nueva imagen no contendrá nuevos colores, aunque algunos colores de la imagen original pueden desaparecer.remuestrear
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
-density
de la línea de comando antes de especificar la-resample
resolución.escala
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
-filter [something]
).miniatura
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
-resize
directiva. Cada ilustración muestra un resultado diferente, dependiendo de los 'detalles finos' del método de cambio de tamaño exacto:fuente
Como dijo Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:
-resize
(8,0 kB)
-muestra
(2,2 KB)
-escala
(7,0 kB)
-adaptive-resize
(4,3 kB)
fuente