Ejemplos de ImageMagick -- Redimensionar o Escalar (Técnicas Generales)
Veamos cómo ampliar y reducir imágenes de diversas formas. La imagen permanece intacta y completa, pero los puntos individuales de color se fusionan o expanden para ocupar un área de lienzo más pequeña o más grande. Ten en cuenta que, si bien esto está relacionado con la resolución de una imagen (número de píxeles por longitud real), eso es más bien un producto de cómo se usa finalmente la imagen, y no una verdadera preocupación del Procesamiento Directo de Imágenes.
Redimensionar Imágenes La forma más obvia y común de cambiar el tamaño de una imagen es redimensionar o escalar una imagen. El contenido de la imagen se amplía o, más comúnmente, se reduce para ajustarse al tamaño deseado. Pero aunque los píxeles y colores reales de la imagen se modifican, el contenido representado por la imagen queda esencialmente inalterado. Sin embargo, redimensionar imágenes puede ser un asunto delicado. Puede modificar las imágenes de formas muy perjudiciales, y no existe una 'mejor manera', ya que lo que es mejor es subjetivo según lo que realmente quieras obtener del proceso de redimensionar. Como no hay una manera 'mejor' o 'perfecta', hay muchas opciones que quizás quieras considerar. IM siempre ha tratado de proporcionar opciones para darte el máximo margen de control al redimensionar imágenes. Hay cientos de posibilidades, estilos y técnicas, e incluso los expertos en redimensionar buscan constantemente nuevas y diferentes formas de cambiar el tamaño de una imagen. Por supuesto, para la mayoría de la gente, las opciones predeterminadas normales son suficientemente buenas, ya que fueron diseñadas pensando en el uso general. El operador de redimensionar ha sido cuidadosamente diseñado para tratar de producir un muy buen resultado con imágenes del mundo real. Es decir, no es que no puedas usarlo para diagramas o dibujos lineales, aunque para ese tipo de imagen quizás necesites usar algunas de las opciones más avanzadas que veremos más adelante.
Lo primero que deberías considerar al especificar una imagen para redimensionar es...
¿Realmente quieres modificar la imagen? Redimensionar provocará cambios drásticos en una imagen, y evitar o minimizar los 'artefactos' no deseados es de la máxima importancia. Quizás solo un ligero Recorte de borde (Shave) de los bordes, o un Recorte (Crop) más general de la imagen producirá un resultado mejor y más deseable que un redimensionado total de la imagen. Generalmente se verá mejor y el área restante será una copia perfecta del original. Como a menudo es mejor no redimensionar imágenes...
Redimensionar no hará absolutamente nada si la imagen redimensionada tiene el mismo tamaño.
La excepción a esto (siempre hay una excepción) es si realmente especificas un Filtro de Remuestreo usando un ajuste "[-filter](https://imagemagick.org/command-line-options/#filter)". En ese caso se anula el comportamiento normal de "no hacer nada si la imagen no se redimensiona" y se aplicará el filtro. Sin embargo, muchos filtros (incluso los filtros predeterminados) pueden desenfocar las imágenes ligeramente. Es parte de su naturaleza. Por eso, normalmente este 'cortocircuito' para un redimensionado sin efecto es algo bueno. El argumento del operador de redimensionar es el área en la que debe encajar la imagen. Este área no es el tamaño final de la imagen, sino el tamaño máximo del área en la que se debe ajustar la imagen. Es decir, porque IM trata de preservar la relación de aspecto de la imagen más que el tamaño final (a menos que se indique una bandera '!'), pero al menos una (si no ambas) de las dimensiones finales debe coincidir con el argumento de la imagen dado. Así que déjame ser claro...
Redimensionar ajustará la imagen dentro del tamaño solicitado.
NO rellena el tamaño de la caja solicitada.
La relación de aspecto se preserva básicamente para que cualquier círculo en la imagen de entrada siga siendo un círculo en la imagen de salida. Es decir, la imagen no se aplastará ni se estrujará, solo se redimensionará, a menos que indiques lo contrario. Por ejemplo, aquí intento ajustar dos imágenes de origen, una imagen más grande y una más pequeña, dentro de una caja cuadrada de 64x64 píxeles de tamaño.
magick dragon_sm.gif -resize 64x64 resize_dragon.gif
magick terminal_sm.gif -resize 64x64 resize_terminal.gif
Como puedes ver, "[-resize](https://imagemagick.org/command-line-options/#resize)" NO produjo una imagen cuadrada de 64x64. De hecho, las imágenes solo se ampliaron o redujeron lo justo para ajustarse mejor al tamaño dado. Ignorar la Relación de Aspecto (bandera '!')
Si quieres, puedes forzar a "[-resize](https://imagemagick.org/command-line-options/#resize)" a ignorar la relación de aspecto y distorsionar la imagen para que siempre genere una imagen exactamente del tamaño especificado. Esto se hace añadiendo el carácter '!' al tamaño. Lamentablemente, este carácter también se usa a veces con fines especiales en diversos intérpretes de línea de comandos de UNIX. Por eso quizás tengas que escapar el carácter de alguna forma para preservarlo.
magick dragon_sm.gif -resize 64x64\! exact_dragon.gif
magick terminal.gif -resize 64x64\! exact_terminal.gif
Solo Reducir Imágenes Más Grandes (bandera '>')
Otra opción comúnmente usada es restringir IM para que solo reduzca las imágenes que encajen en el tamaño dado. Nunca ampliar. Esta es la opción de redimensionar '>'. Piensa que solo aplica el redimensionado a imágenes 'mayores que' el tamaño dado (es un poco contraintuitivo).
magick dragon_sm.gif -resize 64x64\> shrink_dragon.gif
magick terminal.gif -resize 64x64\> shrink_terminal.gif
| Esta opción es a menudo muy importante para ahorrar espacio en disco con imágenes, o en la generación de miniaturas, cuando ampliar imágenes generalmente no es deseable, ya que tiende a producir ampliaciones 'borrosas'. | La bandera Solo Reducir ('>') es un carácter especial tanto en el intérprete de UNIX como en los scripts batch de Windows, y necesitarás escapar ese carácter (usando la barra invertida '\>' en el shell, y '^>' en batch de Windows). También es especial en las páginas web HTML, por lo que los scripts PHP también pueden necesitar algún manejo especial. |
|---|---|
Solo Ampliar Imágenes Más Pequeñas (bandera '<') |
|
La inversa de la bandera anterior es '<', que solo ampliará imágenes que sean más pequeñas que el tamaño dado, y rara vez se usa. Su uso más notable es con un argumento como '1x1<'. Este argumento de redimensionar nunca redimensionará realmente ninguna imagen. En otras palabras, es una operación sin efecto, que te permite cortocircuitar una operación de redimensionar en programas y scripts que siempre usan "[-resize](https://imagemagick.org/command-line-options/#resize)". Aparte de eso, probablemente no quieras usar esta característica realmente. Un ejemplo de uso de este argumento de 'cortocircuito' es para el ajuste "[-geometry](https://imagemagick.org/command-line-options/#geometry)" de "magick montage". Consulta Montage y Geometry, se necesita precaución para más detalles. |
La bandera Solo Ampliar ('<') es un carácter especial tanto en el intérprete de UNIX como en los scripts batch de Windows, y necesitarás escapar ese carácter (usando la barra invertida '\<' en el shell, y '^<' en batch de Windows). También es especial en las páginas web HTML, por lo que los scripts PHP también pueden necesitar algún manejo especial. |
| --- | --- |
Bandera de Rellenar Área (bandera '^') |
|
A partir de IM v6.3.8-3, IM tiene ahora una nueva bandera de la opción de geometría '^' que se usa para redimensionar la imagen basándose en la dimensión de ajuste más pequeña. Es decir, la imagen se redimensiona para llenar completamente (e incluso desbordar) el área de píxeles dada. |
magick dragon_sm.gif -resize 64x64^ fill_dragon.gif
magick terminal.gif -resize 64x64^ fill_terminal.gif
Tal como está, esta opción no parece muy útil, pero cuando se combina con un "[-crop](https://imagemagick.org/command-line-options/#crop)" centrado (o no centrado) o un "[-extent](https://imagemagick.org/command-line-options/#extent)" para eliminar las partes sobrantes de la imagen, puedes ajustar la imagen de modo que llene completamente el área especificada. Tanto el argumento de redimensionar como el del tamaño final de la imagen deben tener los mismos valores. Aunque el "[-crop](https://imagemagick.org/command-line-options/#crop)" es lo más lógico, puede requerir un "[+repage](https://imagemagick.org/command-line-options/#repage)" extra para eliminar la información de capas del lienzo virtual. El "[-extent](https://imagemagick.org/command-line-options/#extent)" no requiere esta limpieza, pero aún permite el uso de "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para el posicionamiento. Consulta Cortar y Bordear para más información.
magick dragon_sm.gif -resize 64x64^ \
-gravity center -extent 64x64 fill_crop_dragon.gif
magick terminal.gif -resize 64x64^ \
-gravity center -extent 64x64 fill_crop_terminal.gif
También se puede usar "[-extent](https://imagemagick.org/command-line-options/#extent)" para rellenar imágenes que usan el redimensionado normal (con un ajuste de color "[-background](https://imagemagick.org/command-line-options/#background)"). Consulta Miniaturas, Resumen de Ajuste a un Espacio Dado, para más sobre este tipo de operación. |
Recuerda que esto requiere IM v6.3.8-3 o superior para poder usarlo. De lo contrario, usa la técnica más antigua Redimensionar para Rellenar un Espacio Dado de más abajo. |
|---|---|
La bandera de Rellenar Área ('^') es un carácter especial en los scripts batch de Windows y necesitarás escapar ese carácter duplicándolo. Por ejemplo '^^', o no funcionará. Consulta Scripting Batch de Windows para esta y otras particularidades de Windows. |
|
| --- | --- |
Redimensionar por Porcentaje (bandera '%') |
|
Añadir un signo de porcentaje, '%', al argumento de "[-resize](https://imagemagick.org/command-line-options/#resize)" hace que el redimensionado escale la imagen por la cantidad especificada. |
magick dragon_sm.gif -resize 50% half_dragon.gif
magick terminal.gif -resize 50% half_terminal.gif
| Sin embargo, ten en cuenta que el tamaño final en píxeles de la imagen se redondeará al entero más cercano. Es decir, ¡no generarás píxeles parciales a lo largo del borde de la imagen! Como resultado, la escala real puede no coincidir exactamente con el factor de escala que proporciones, e incluso puede ser ligeramente diferente para las direcciones X e Y, pero será muy aproximada. (Consulta Redimensionar usando Distort más abajo). | Si realmente quieres redimensionar una imagen de modo que el tamaño final parezca tener diferencias de tamaño de píxel parcial, puedes usar el Operador General de Distorsión y específicamente la Escala-Rotación-Traslación (consulta Redimensionar con Distort más abajo). |
|---|---|
La bandera de Redimensionar por Porcentaje ('%') es un carácter especial en los scripts batch de Windows y necesitarás escapar ese carácter duplicándolo. Por ejemplo '%%', o no funcionará. Consulta Scripting Batch de Windows para esta y otras particularidades de Windows. |
|
| --- | --- |
_Todas estas opciones de 'bandera' '!', '<', '>', '^', '%' y '@' son simplemente interruptores de encendido/apagado para el operador "[-resize](https://imagemagick.org/command-line-options/#resize)". Lo que importa es simplemente la presencia (o ausencia) del carácter en el argumento de redimensionar, no su posición. Pueden aparecer al principio o al final del argumento, o antes o después de números individuales (aunque no en medio de un número). |
Es decir, '%50' tiene exactamente el mismo efecto que '50%', aunque este último es preferible por legibilidad. Además, '50%x30' realmente significa '50%x30%' y NO 50% de ancho y 30 píxeles de alto como podrías pensar.
Este es el caso de todos los argumentos de IM que usan un estilo de 'geometría' ('WxH' o '+X+Y'). Sin embargo, los desplazamientos como '+X+Y' nunca se tratan como un porcentaje._
---|---
Redimensionar usando un Límite de Recuento de Área en Píxeles (bandera '@')
Hay una última bandera de la opción "[-resize](https://imagemagick.org/command-line-options/#resize)". El símbolo "arroba" '@' redimensionará una imagen para que no contenga más del número dado de píxeles. Esto puede usarse, por ejemplo, para hacer que una colección de imágenes de todos los tamaños diferentes tengan aproximadamente el mismo tamaño. Por ejemplo, aquí redimensionamos ambas imágenes a un tamaño aproximado de 64x64, o 4096 píxeles de tamaño.
magick dragon_sm.gif -resize 4096@ pixel_dragon.gif
magick terminal.gif -resize 4096@ pixel_terminal.gif
Ten en cuenta que el tamaño final de la imagen no está limitado a 64 píxeles de alto o ancho, sino que tendrá un área lo más cercana posible (pero menor) a ese tamaño que IM pueda lograr. Eso significa que una dimensión generalmente será ligeramente mayor que 64 píxeles y otra será ligeramente menor. En cierto modo, este es un compromiso ideal para crear miniaturas de imágenes. Consulta Tamaño de Miniatura por Ajuste de Área. También puedes añadir la bandera '>' para reducir solo las imágenes que tengan más del número calculado de píxeles, dejando las imágenes que ya sean más pequeñas que ese tamaño. | _Lamentablemente, la bandera '<', ampliar imágenes más pequeñas, se ignora actualmente al usar el 'Redimensionado por Área'.
_
---|---
Redimensionar Durante la Lectura de la Imagen
El operador de redimensionar también puede aplicarse a las imágenes inmediatamente después de ser leídas, antes de que se añadan a la secuencia de imágenes actual y se lea la siguiente imagen. De esa manera se necesita una cantidad mínima de memoria para leer muchas imágenes. Consulta Modificadores de Lectura de Imágenes para más detalles. Por ejemplo...
magick dragon_sm.gif'[64x64]' read_dragon.gif
magick terminal.gif'[64x64]' read_terminal.gif
| El único problema con esta técnica es que no se pueden usar opciones especiales de redimensionado durante el proceso de lectura de la imagen. | El redimensionado y la transparencia plantearon un problema para ImageMagick antes de la v6.2.4, produciendo un efecto de halo negro alrededor de objetos de colores claros sobre transparencia. Esto se investigó y finalmente se corrigió a partir de esa versión. Para más detalles de este antiguo error consulta Error de Halo al Redimensionar |
|---|---|
Otros Operadores de Redimensionado Geometry - Redimensionar solo la última imagenGeometry es una opción muy especial. El operador se comporta de forma ligeramente diferente en cada comando de IM, y a menudo de formas especiales y mágicas. Las razones de esto se deben principalmente al uso heredado y deberían evitarse si es posible. Primero, en "magick display" se usa para dimensionar y posicionar la ventana de la imagen que se muestra. Este fue su uso y significado original cuando IM empezó. Fue a partir de esto que surgieron sus otras capacidades de 'redimensionar'. Para "montage", "[-geometry](https://imagemagick.org/command-line-options/#geometry)" es un ajuste que se guarda hasta que se han leído todos los argumentos. En ese punto define el tamaño final de la celda (mosaico) (o deja que "magick montage" lo calcule), mientras que los argumentos de posición se usan para especificar el espacio que rodea las celdas del mosaico. Consulta Ajustes de Control de Montage. En "[composite](basics.html#composite)", "[-geometry](https://imagemagick.org/command-line-options/#geometry)" también se guarda hasta que se ha alcanzado el final de los argumentos. Luego se usa para redimensionar y posicionar la imagen superpuesta (la primera imagen dada) antes de superponerla sobre la imagen de fondo (la segunda imagen). Por ejemplo, consulta Componer Múltiples Imágenes. Como puedes ver, se usa como un 'ajuste' en la mayoría de los comandos de IM, pero en "magick", "[-geometry](https://imagemagick.org/command-line-options/#geometry)" es tanto un operador especial de redimensionado de imágenes como un ajuste de posicionamiento. Lo que hace es "[-resize](https://imagemagick.org/command-line-options/#resize)" solo la última imagen en la secuencia de imágenes actual. Este es el único operador de procesamiento de imágenes diseñado específicamente para afectar a una sola imagen (la última) en la secuencia de imágenes actual. Para complicar más esta opción especial, las partes posicionales de la opción "[-geometry](https://imagemagick.org/command-line-options/#geometry)" son guardadas por el comando "magick", igual que en "[composite](basics.html#composite)". Es decir, cualquier posición se preserva para su uso posterior por "[-composite](https://imagemagick.org/command-line-options/#composite)", para posicionar la imagen 'superpuesta' (la penúltima imagen en la secuencia de imágenes actual) sobre la imagen 'de fondo' (la primera imagen en la secuencia de imágenes). Por esta razón, deberías limitar el uso de "[-geometry](https://imagemagick.org/command-line-options/#geometry)" en los comandos "magick" a justo antes de las operaciones "[-composite](https://imagemagick.org/command-line-options/#composite)" o "[-layers](https://imagemagick.org/command-line-options/#layers) composite". En resumen, este operador solo es realmente útil después de leer o crear una segunda imagen, justo antes de realizar algún tipo de Composición Alfa para procesar con esas imágenes. Para ejemplos prácticos del uso de "[-geometry](https://imagemagick.org/command-line-options/#geometry)" para redimensionar/posicionar imágenes, consulta Componer Múltiples Imágenes. Thumbnail - Redimensionar con eliminación de perfilesEl operador "-thumbnail" es una variación de "[-resize](https://imagemagick.org/command-line-options/#resize)" diseñada específicamente para reducir imágenes muy muy grandes a pequeñas miniaturas. Primero usa "[-strip](https://imagemagick.org/command-line-options/#strip)" para eliminar todos los perfiles y demás relleno de la imagen. Luego usa "[-sample](https://imagemagick.org/command-line-options/#sample)" para reducir la imagen a 5 veces la altura final. Finalmente realiza un "[-resize](https://imagemagick.org/command-line-options/#resize)" normal para reducir la imagen a su tamaño final. Todo esto sirve básicamente para acelerar la generación de miniaturas a partir de archivos muy grandes. Sin embargo, para miniaturas de imágenes JPEG, puedes limitar el tamaño de la imagen leída desde el disco usando el ajuste de opción especial "-define jpeg:size=". Consulta Leer Imágenes JPEG para más detalles. Como tal, esta mejora de velocidad rara vez es necesaria para JPEG en la generación de miniaturas, aunque la eliminación de perfiles sigue siendo muy importante. Para otros formatos de imagen, como TIFF, tanto la eliminación de perfiles como la mejora de velocidad siguen siendo de vital importancia. Por eso sigue siendo la forma recomendada de redimensionar imágenes para la creación de miniaturas. |
Antes de IM v6.5.4-7, "[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" eliminaba TODOS los perfiles de la imagen, incluidos los perfiles de color ICC. A partir de esta versión, los perfiles de color se preservan. Si no se desea el perfil de color, entonces usa "[-strip](https://imagemagick.org/command-line-options/#strip)" para eliminar todos los perfiles. |
|---|---|
Resample - Cambiar la resolución de una imagenAl igual que en los operadores alternativos de redimensionado anteriores, "-resample" también es un simple envoltorio del operador normal "[-resize](https://imagemagick.org/command-line-options/#resize)". Sin embargo, su propósito es ajustar el número de píxeles de una imagen para que, cuando se muestre con la Resolución o Densidad dada, la imagen siga viéndose del mismo tamaño en términos del mundo real. Es decir, la imagen dada se amplía o reduce, en términos del número de píxeles, mientras que el tamaño de la imagen en unidades del mundo real permanece igual. Está pensado para usarse con imágenes que se leyeron desde, o se escribirán hacia, un programa o dispositivo de una resolución o densidad particular. Esto es especialmente importante para ajustar una imagen a un dispositivo de salida de hardware específico, ya sea una pantalla, una impresora, o un formato de imagen postscript o PDF de una resolución específica. Solo recuerda que el tamaño en el mundo real de la imagen no cambia, solo su resolución y, por supuesto, el número de píxeles usados para representar la imagen. Por ejemplo, supón que tienes una imagen que escaneaste a 300dpi (puntos por pulgada). La imagen se guardó con esta resolución (densidad) o, cuando la leíste en IM, la especificaste como una imagen de 300dpi (usando "[-density](https://imagemagick.org/command-line-options/#density)"). Ahora decides mostrarla en una pantalla que tiene una resolución de 90dpi, así que haces un "-resample 90". IM ahora redimensionará la imagen en 90/300, o al 30% del tamaño original de la imagen, y establecerá la nueva densidad de la imagen en 90dpi. La imagen ahora es más pequeña en términos del número de píxeles usados, pero si se muestra en una pantalla de 90dpi aparecerá con el mismo tamaño físico que la imagen original que escaneaste. Es decir, ahora tiene una resolución apropiada para una pantalla de 90dpi, por lo que se mostrará al usuario con su tamaño original del mundo real. Un ajuste "[-units](https://imagemagick.org/command-line-options/#units)" (con los argumentos 'PixelsPerInch' o 'PixelsPerCentimeter') puede ser necesario en algunas situaciones para que este operador funcione correctamente. Este ajuste también puede ser importante para la salida a los formatos de archivo de imagen Postscript y PDF. Ten en cuenta que solo un pequeño número de formatos de archivo de imagen (como JPEG, PNG y TIFF) son capaces de almacenar la resolución o densidad de la imagen junto con los datos de la imagen. Para los formatos que no admiten una resolución de imagen, o que son formatos de imagen multi-resolución (basados en vectores), la resolución original de la imagen debe especificarse mediante el atributo "[-density](https://imagemagick.org/command-line-options/#density)" (consulta Metadatos de Densidad de Imagen) antes de ser leída. Si no se ha establecido ningún atributo de densidad, IM asumirá que tiene una densidad predeterminada de 72dpi. Establecer la densidad DESPUÉS de leer una imagen de este tipo solo afectará a su resolución de salida, y no afectará a su tamaño final en términos de píxeles. Scale - Reducir con promediado de píxelesEl operador de redimensionado "-scale" es una forma simplificada y más rápida del comando de redimensionar. Al ampliar una imagen, los píxeles de la imagen se replican para formar grandes bloques rectangulares de color. Lo cual es genial para mostrar una ampliación limpia y sin desenfoque de una imagen. Por ejemplo, aquí hay una vista ampliada de uno de los patrones de mosaico incorporados... |
magick -size 8x8 pattern:CrossHatch30 -scale 800% scale_crosshatch.gif
![[IM Output]](../static/img/resize/scale_crosshatch.gif)
Generalmente se usa un único valor porcentual que es múltiplo del 100% para la ampliación de la imagen, de modo que se garantice que todos los píxeles se amplíen en la misma cantidad; de lo contrario, puedes tener filas y columnas de píxeles de diferente tamaño que produzcan un patrón de Moiré a gran escala. Por ejemplo, aquí escalé mal un patrón de aspecto suave de 'cuadros gris 50%', usando un tamaño que no era múltiplo del tamaño de la imagen original. |
magick pattern:gray50 scale_gray_norm.gif
magick pattern:gray50 -scale 36 scale_gray_mag.gif
![[IM Output]](../static/img/resize/scale_gray_mag.gif)
Al reducir imágenes, los píxeles vecinos se promedian juntos para producir un nuevo píxel coloreado. Por ejemplo, escalar una imagen al 50% de su tamaño original promediará efectivamente bloques de 4 píxeles para crear un nuevo píxel (asumiendo que el tamaño de la imagen también es múltiplo de 2).Sin embargo, se aconseja precaución, ya que una imagen reducida con scale también puede generar patrones de Moiré, a menos que la nueva imagen sea una reducción de número entero exacto (una técnica conocida como 'binning'), lo cual también requiere que el tamaño de la imagen original sea algún múltiplo entero exacto del tamaño final. Además, una fotografía del mundo real que ha sido fuertemente reducida usando "[-scale](https://imagemagick.org/command-line-options/#scale)" tiende a verse demasiado nítida, con efectos de aliasing ('escalonado') a lo largo de los bordes nítidos. El promediado de píxeles de "[-scale](https://imagemagick.org/command-line-options/#scale)" le permite generar imágenes 'pixeladas'. Básicamente reduces el tamaño de la imagen para promediar los píxeles, luego la amplías de nuevo hasta el tamaño original de la imagen.
magick rose: -scale 25% -scale 70x46\! rose_pixelated.gif
Puedes usar una máscara para combinar la imagen pixelada anterior con la imagen original, de modo que 'ocultes' una parte 'subida de tono' mucho más pequeña presente en la imagen original. Consulta el ejemplo Proteger el Anonimato de Alguien para una demostración del uso de esta técnica. El algoritmo también está diseñado para iterar sobre filas de píxeles y luego columnas, lo cual es lo inverso de "[-resize](https://imagemagick.org/command-line-options/#resize)". Esto puede permitir que "[-scale](https://imagemagick.org/command-line-options/#scale)" maneje mejor una imagen en caché de disco "mpc:". |
Hasta IM v6.4.7, "[-scale](https://imagemagick.org/command-line-options/#scale)" todavía contenía el antiguo Error de Halo al Redimensionar. |
|---|---|
Aspectos Internos de Scale (mezcla de píxeles)...En muchos sentidos, el Operador Scale es similar al Operador Resize normal, pero usando un Filtro de Remuestreo '[Box](filter.html#box)'. Sin embargo, en realidad usa un algoritmo completamente diferente que es ligeramente más preciso en sus resultados que el producido por un Filtro Box. La forma en que funciona el Filtro Box es simplemente promediar cualquier píxel (muestra) que caiga dentro de la 'ventana de soporte' del filtro (consulta Control Experto del Soporte del Filtro). Esto significa que, al reducir una imagen en una cantidad muy pequeña, un Resize filtrado con Box solo producirá valores de píxel exactos o un valor de píxel perfectamente promediado. El Operador Scale, sin embargo, usa un algoritmo diferente que se conoce (a falta de un nombre mejor) como Mezcla de Píxeles (Pixel Mixing). En lugar de generar los colores basándose en un 'promedio de píxeles' dentro de la 'ventana de soporte', usa una 'área de píxeles' más precisa dentro de la ventana de soporte. Por ejemplo, aquí tomo un patrón de píxeles de 'tablero de ajedrez' y lo reduzco en 2 píxeles, comparando el resultado de Scale con el redimensionado usando los muy simples Filtros Box y Triangle. |
magick -size 10x10 pattern:gray50 checks.gif
magick checks.gif -filter box -resize 8x8 checks_box.gif
magick checks.gif -scale 8x8 checks_scale.gif
magick checks.gif -filter triangle -resize 8x8 checks_triangle.gif
![[IM Output]](../static/img/resize/checks_mag.gif)
'hash' de 10 píxeles | | ![[IM Output]](../static/img/resize/checks_box_mag.gif)
Resize Filtrado
con Box | ![[IM Output]](../static/img/resize/checks_scale_mag.gif)
Mezcla de Píxeles
Scale | ![[IM Output]](../static/img/resize/checks_triangle_mag.gif)
Resize Filtrado
con Triangle
---|---|---|---|---
Las imágenes de arriba han sido muy ampliadas
Lo anterior muestra el resultado que obtienes para 'puramente promediado', vs 'mezcla de píxeles', vs 'interpolación lineal'. También muestra cómo el Operador Scale es en realidad similar al de un Filtro Triangle, pero solo al reducir imágenes muy poco. En otros casos (reducción fuerte, ampliación o dimensionado entero exacto) producirá resultados más parecidos a los de un Filtro Box. Básicamente genera algo que es más bien una mezcla entre los filtros Box y Triangle dependiendo de exactamente cuánto se reduzca el tamaño de la imagen. Verás efectos similares al ampliar.
magick -size 8x8 pattern:gray50 checks_sm.gif
magick checks_sm.gif -filter box -resize 10x10 checks_sm_box.gif
magick checks_sm.gif -scale 10x10 checks_sm_scale.gif
magick checks_sm.gif -filter triangle -resize 10x10 checks_sm_triangle.gif
![[IM Output]](../static/img/resize/checks_mag.gif)
'hash' de 10 píxeles | | ![[IM Output]](../static/img/resize/checks_sm_box_mag.gif)
Resize Filtrado
con Box | ![[IM Output]](../static/img/resize/checks_sm_scale_mag.gif)
Mezcla de Píxeles
Scale | ![[IM Output]](../static/img/resize/checks_sm_triangle_mag.gif)
Resize Filtrado
con Triangle
---|---|---|---|---
Las imágenes de arriba han sido muy ampliadas
Al ampliar, un Filtro Box nunca producirá 'píxeles promediados', solo duplicaciones de filas/columnas de píxeles. Scale, sin embargo, generará píxeles de color promediado a lo largo de los bordes, de nuevo de forma muy parecida pero no exactamente igual a un Filtro Triangle. Por supuesto, este efecto solo es realmente visible para ampliaciones pequeñas y no enteras, y en escalados más grandes, solo a lo largo de los bordes, donde en un caso más típico puedes obtener uno o dos píxeles promediados. En resumen: Scale es mucho mucho más rápido que el Operador Resize normal, ya que es menos general en sus requisitos de procesamiento de imágenes. Pero también es un algoritmo completamente diferente, que produce un resultado ligeramente diferente cuando se usa para redimensionar imágenes con escalas no enteras. Para más detalles, consulta la página Mezcla de Píxeles (Pixel Mixing), así como la Discusión de los Foros de IM, Upscaling a few pixels linearly. Un agradecimiento especial al usuario del foro atnbueno, quien señaló la diferencia anterior. Sample - Redimensionar por replicación/eliminación de filas/columnasEl operador de redimensionado "-sample" es el operador de redimensionado más rápido, especialmente en la reducción de imágenes a gran escala. De hecho, es incluso más rápido que el operador "[-scale](https://imagemagick.org/command-line-options/#scale)" (ver arriba). Al ampliar o magnificar una imagen, solo realiza la replicación de píxeles (como el Filtro Box), generando 'bloques' rectangulares de colores de píxel. Sin embargo, al reducir una imagen, "[-sample](https://imagemagick.org/command-line-options/#sample)" simplemente elimina filas y columnas de píxeles. Como filas y columnas enteras de píxeles simplemente se añaden o eliminan, "[-sample](https://imagemagick.org/command-line-options/#sample)" no generará colores nuevos ni adicionales. Este hecho puede ser importante para algunas técnicas de procesamiento de imágenes, como redimensionar animaciones GIF. Otra forma de verlo es que la imagen tiene píxeles individuales 'muestreados' en un patrón muy uniforme y regular a través de toda la imagen. Puedes pensar en la imagen como dividida en una matriz de regiones, y se selecciona un píxel de cada región para la imagen resultante. Sin embargo, este 'muestreo' de píxeles individuales (o la eliminación total de filas/columnas) puede tener resultados bastante horribles, especialmente para imágenes que contienen líneas finas (en términos de ancho en píxeles). Por ejemplo, aquí dibujo una línea pero luego reduzco el tamaño de la imagen, resultando solo en una línea de puntos.
magick -size 150x60 xc: -draw 'line 0,59 149,0' line_orig.gif
magick line_orig.gif -sample 50x20 line_sample.gif
| Este es un efecto típico que se obtiene con el muestreo de imágenes, y se conoce como un efecto severo de Aliasing. Desplazamiento del Píxel MuestreadoA partir de IM v6.8.4-7, el píxel exacto que se muestrea en cada subregión de muestreo se define ahora como el píxel en el punto medio de cada región (o el píxel central superior izquierdo si la subregión tiene un número par de píxeles). Eso significa que si haces una muestra de un solo píxel de una imagen, obtendrás el píxel central de la imagen. | Antes de IM v6.8.4-7, el píxel seleccionado era el píxel superior izquierdo de cada región. Sin embargo, hay informes de algunas versiones donde este pudo haber sido el inferior derecho, o pudo incluso haber sido ligeramente variable debido a errores. |
|---|---|
Este tipo de información es especialmente útil para imágenes que se reducen por una división entera del tamaño original de la imagen. Como cuando estás creando o muestreando una imagen pixelada, o Desentrelazando Fotogramas de Vídeo. También a partir de esa versión puedes controlar exactamente qué píxel de cada subregión se selecciona usando el define "sample:offset", que toma uno o dos valores porcentuales ('50' por defecto para el punto medio). Ten en cuenta que se usa un porcentaje, ya que en el caso general las 'subregiones de muestreo' pueden no alinearse con los límites de los píxeles. Por eso se necesita un porcentaje y no un 'desplazamiento de píxeles'. Sin embargo, si el tamaño de la imagen es perfectamente divisible por el número de muestras, entonces puedes calcular fácilmente exactamente qué píxel quieres de cada subregión. Por ejemplo, si una imagen se muestrea de modo que tengas subregiones de 5 píxeles, entonces (Por ejemplo, muestreando una imagen que tiene 100 píxeles de ancho, hasta 20 muestras de píxeles), entonces puedes usar un porcentaje de desplazamiento de muestreo en el rango de 0 a 19.9 para seleccionar el primer píxel de cada región, de 20.1 a 39.9 para el segundo, y así sucesivamente. En otras palabras, puedes usar un valor porcentual de 10, 30, 50, 70 y 90 para especificar exactamente qué píxel quieres de cada región de muestreo de tamaño constante. Para más sobre los desplazamientos de muestreo, consulta la discusión del Foro de IM Sample Points. Magnify - Escalado de PíxelesLa opción "-magnify" duplica el tamaño de una imagen, pero lo hace usando una técnica conocida como "Escalado de Píxeles" usando el algoritmo Scale2X. Este algoritmo intenta suavizar las esquinas de los píxeles que se amplían, sin añadir colores extra. De este modo, las imágenes pixeladas muy pequeñas se amplían de forma más limpia, conservando los colores originales y un "aspecto retro de píxeles" de la imagen más pequeña. |
magick -size 8x8 pattern:CrossHatch30 -virtual-pixel tile \
-magnify -magnify -magnify magnify_crosshatch.gif
| Ten en cuenta que se usó el ajuste Píxel Virtual para asegurar que magnify entendiera que esta imagen específica 'se enrolla' alrededor de los bordes de la imagen. | Antes de IM v6.8.4-10, magnify era solo un envoltorio alrededor de resize para duplicar el tamaño de la imagen. No muy útil y rara vez usado. Usar el "Escalado de Píxeles" hace que esta opción sea mucho más útil. Consulta el foro de usuarios de IM sobre Escalado de Píxeles para más información. |
|---|---|
Una función "Minify()" también está disponible a menudo en las API que reducen a la mitad el tamaño de las imágenes, pero es solo un envoltorio alrededor de resize. Sin embargo, "-minify" no está disponible desde la API de línea de comandos, al menos no en el momento de escribir esto. |
|
| --- | --- |
Adaptive Resize - Redimensionados pequeños sin desenfoqueEl operador "-adaptive-resize" usa el método especial de Interpolación de Malla (Mesh) para redimensionar imágenes. Por ejemplo, aquí redimensiono una simple línea, usando primero un "[-resize](https://imagemagick.org/command-line-options/#resize)" normal, y luego de nuevo usando "[-adaptive-resize](https://imagemagick.org/command-line-options/#adaptive-resize)". |
magick -size 50x50 xc: -draw 'line 0,49 49,0' line_orig2.gif
magick line_orig2.gif -resize 80x80 line_resize.gif
magick line_orig2.gif -adaptive-resize 80x80 line_adaptive.gif
Si miras una ampliación de los dos resultados...
Puedes ver que la imagen Adaptive Resized de la derecha se ve mucho más limpia y menos borrosa que la imagen producida a la izquierda usando el operador "[-resize](https://imagemagick.org/command-line-options/#resize)" normal. Básicamente, el operador evita el desenfoque excesivo que un operador "[-resize](https://imagemagick.org/command-line-options/#resize)" puede producir con cambios de color nítidos. Esto funciona bien para ajustes ligeros del tamaño de la imagen, particularmente para la magnificación, y especialmente con imágenes con cambios de color nítidos. Sin embargo, como con todos los métodos de interpolación de píxeles, producirá aliasing y efectos de Moiré cuando las imágenes se amplíen o reduzcan en más del 50%. También puedes generar el resultado exactamente equivalente usando una operación Distort Resize pero con las opciones "-filter point -interpolate mesh". Es decir, redimensionar la imagen usando un simple método de búsqueda por Interpolación de Malla (Mesh), en lugar de un filtro de remuestreo más complejo. Interpolative Resize - Redimensionar usando un Método de InterpolaciónEl operador "-interpolative-resize" es prácticamente idéntico al operador Adaptive Resize anterior. Sin embargo, este operador usará el ajuste "[-interpolate](https://imagemagick.org/command-line-options/#interpolate)" actual en lugar de un método de interpolación 'Mesh' fijo.
Si usas un ajuste "[-interpolate](https://imagemagick.org/command-line-options/#interpolate)" de '[Nearest](misc.html#nearest)', obtendrás esencialmente el equivalente de un Operador Sample. De forma similar, muchos de los otros Métodos de Interpolación Simples equivaldrán a usar los equivalentes Filtros de Redimensionado Interpolado. Pero hay varios métodos de interpolación, como Mesh, que no tienen equivalencia como filtro de redimensionado.
Este es también un redimensionado sin escalar, lo que significa que funciona muy bien para ampliaciones y reducciones a pequeña escala, pero al reducir en más del 50% pueden aparecer severos Efectos de Aliasing, como se muestra en los otros 'operadores de redimensionado por muestreo' de arriba. Liquid Rescale - Tallado de Costuras (Seam Carving)Al igual que Sampling una imagen la redimensiona eliminando o duplicando directamente columnas y filas enteras de una imagen, el operador especial de IM "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" también elimina o duplica columnas y filas de píxeles de una imagen para reducirla/ampliarla. La diferencia es que intenta hacerlo de una manera más inteligente. Primero, en lugar de eliminar una simple línea de píxeles, elimina una 'costura' de píxeles. Es decir, la columna (o fila) que puede zigzaguear a través de la imagen, en ángulos de hasta 45 grados. Segundo, intenta eliminar las costuras que tienen la 'menor importancia' en términos del contenido de la imagen. Cómo selecciona esto es en términos de la energía de la imagen, o más simplemente, la cantidad de cambios de color que implica una 'costura' particular. La 'costura' con la menor cantidad de cambios se eliminará primero, seguida de costuras de mayor 'energía', hasta que la imagen tenga el tamaño deseado. Para información más detallada sobre el redimensionado líquido y el tallado de costuras, consulta Wikipedia: Seam Carving, el Vídeo de Demostración en YouTube, y el artículo PDF: Seam Carving for Content-Aware Image Resizing. Aquí, por ejemplo, está el logo de IM mientras se redimensiona a un tamaño más pequeño usando el operador "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" de IM.
magick logo: -resize 50% -trim +repage logo_trimmed.jpg
magick logo_trimmed.jpg -liquid-rescale 75x100%\! logo_lqr.jpg
magick logo_trimmed.jpg -sample 75x100%\! logo_sample.jpg
![[IM Output]](../static/img/resize/logo_trimmed.jpg)
Original | | ![[IM Output]](../static/img/resize/logo_lqr.jpg)
Redimensionado Líquido | ![[IM Output]](../static/img/resize/logo_sample.jpg)
Muestreado
---|---|---|---
Observa cómo "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" preservó al complejo mago, mientras estrujaba las estrellas menos complejas y la parte del título de la imagen. También estrujó ligeramente el pie derecho del mago, produciendo un poco de irregularidad en el borde de la capa, igual que hizo con la varita fina pero simple del mago. Por otro lado, la imagen Sample Resize simplemente eliminó columnas de píxeles equiespaciadas, lo que resultó en que toda la imagen se distorsionara por igual. Las estrellas no se preservan intactas y todos los bordes tienen efectos de aliasing distintos pero uniformes. Básicamente, "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" producirá una imagen 'estrujada' de aspecto generalmente mejor sin generar 'colores mezclados' extra ni desenfoque de la imagen. Sin embargo, puedes obtener algunos efectos de aliasing ligeros pero localizados en un punto (la varita del mago en este caso) en lugar de extender ese efecto por toda la imagen. También ampliará imágenes, 'duplicando' las costuras encontradas dentro de la imagen.
magick logo_trimmed.jpg -liquid-rescale 130x100%\! logo_lqr_expand.jpg
Como puedes ver, intenta primero duplicar la cantidad de espacio entre los diversos objetos (donde puede), separándolos. Aunque en este caso la estrella más a la izquierda y la 'm' se distorsionan a medida que las 'costuras' que pasan por estas regiones de 'baja energía' se agrupan. Sin embargo, ten en cuenta que solo duplicará cada costura una vez, y por ello la técnica empieza a fallar cuando las imágenes se expanden demasiado. A menudo, un mejor método es redimensionar la imagen primero a un tamaño mayor, y luego usar el redimensionado líquido para reducirla al tamaño deseado. O usar "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" en múltiples pasos más pequeños. Para mostrar mejor el efecto de "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)", aquí hay una animación, en la que la misma imagen se reduce a una imagen muy delgada, y luego se amplía de nuevo. Esta animación se creó usando el script de shell animate_lqr.
De nuevo, observa cómo intenta preservar las partes más complejas de la imagen, a medida que la imagen se comprime en un área cada vez más pequeña. Es decir, los espacios del título se comprimen preferentemente primero, luego el brazo del mago, luego el lado derecho del mago, dejando la parte central más compleja del mago para el final. Observa especialmente cómo las estrellas se juntan antes de que finalmente se vean afectadas por la eliminación de píxeles del remuestreo que implementa el redimensionado líquido. (Consulta los problemas a continuación) Puedes pensar en el redimensionado líquido como un intento de comprimir una imagen, como una esponja, comprimiendo primero las áreas abiertas, dejando las partes voluminosas y más estructuradas para el final. Problemas del Tallado de Costuras El Redimensionado Líquido, o Tallado de Costuras, funciona puramente eliminando píxeles enteros de la imagen. Por eso, como el muestreo (sampling), no generará ni fusionará colores, y las líneas rectas y los patrones dentro de la imagen pueden quedar muy distorsionados por la operación. Básicamente, puede resultar en serios Efectos de Aliasing, a menos que también se aplique algún método de suavizado. Sin embargo, generalmente los efectos de aliasing estarán agrupados y localizados en las áreas menos complejas de la imagen, en lugar de extenderse por toda la imagen. ¡Esta es la única razón por la que funciona tan bien! Como una 'costura' puede zigzaguear a través de la imagen, las costuras pueden, y a menudo parecen, rodear objetos complejos, eliminando el espacio entre los objetos antes de intentar comprimir los objetos en sí. Observa por ejemplo cómo la palabra 'Image' en la demostración anterior parece quedar empujada debajo de las otras letras del título sin demasiada distorsión. Sin embargo, este movimiento de lado a lado está limitado a ángulos de 45 grados. Para imágenes con fondos 'ocupados' y objetos en primer plano menos 'ocupados', como fotos que contienen rostros de personas, la función de energía puede asumir que el objeto en primer plano es menos importante que el fondo. Esto resulta en algunos efectos secundarios perjudiciales serios, que pueden requerir intervención humana para resolverse. | _El Redimensionado Líquido es actualmente una operación altamente experimental añadida para IM v6.3.8-4. Requiere que la biblioteca delegada "liblqr" esté instalada antes de que funcione para ti.
En este momento no se han proporcionado controles expertos de usuario. Controles como modificar la función de energía de contenido usada, o usar un filtro de preservación/eliminación proporcionado por el usuario (ajustando esa función de energía), o acceso a las imágenes intermedias talladas por costuras, y funciones que la biblioteca también proporciona. Se supone que dichos controles se proporcionarán en algún momento en el futuro, a medida que los usuarios los demanden, y obtengamos más control interno de las funciones de la biblioteca.
ADVERTENCIA No esperes que esto permanezca exactamente como está implementado actualmente. Es altamente experimental, y se espera que cambie y amplíe su funcionalidad._
---|---
Distort Resize - redimensionado de forma libreTodos los métodos de redimensionado anteriores tienen una limitación que mencionamos antes: redondearán el tamaño de la nueva imagen a un número entero de píxeles, y luego mapearán los píxeles de la imagen antigua a la nueva matriz de píxeles. Esto tiene dos efectos. Primero, al redimensionar a un tamaño muy pequeño, la escala X puede no coincidir exactamente con la escala Y de la imagen resultante (una relación de aspecto ligeramente diferente). Esta diferencia es menor, y a menos que llegues a tamaños muy pequeños, normalmente no es perceptible. El otro efecto es que no puedes redimensionar una imagen para ajustarla a un área que contenga un borde de píxel parcial, lo cual puede ser importante en procesamientos posteriores, como superposiciones de imágenes. También significa que no puedes usar redimensionar para simplemente desplazar (trasladar) una imagen medio píxel a la derecha (sin un redimensionado real) aunque el algoritmo podría hacer esto fácilmente. Con IM v6.3.6, el Operador General de Distorsión "[-distort](https://imagemagick.org/command-line-options/#distort)" te permitirá hacer esto y más, usando su método de distorsión Escala-Rotación-Traslación. También puedes hacer esto usando una distorsión Afín basada en movimientos de puntos de control. Sin embargo, ten en cuenta que, como el borde de la imagen puede contener píxeles parciales, la imagen final probablemente será de 2 a 3 píxeles más grande de lo que probablemente esperarías. Los píxeles extra que la rodean se mezclarán según el ajuste actual de Píxel Virtual, que normalmente estableces como transparente. Por ejemplo, aquí redimensiono la imagen de la rosa al 90% (.9) de su tamaño original, sin rotación (0), reduciéndola alrededor del centro de la imagen (el punto de control predeterminado si no se especifica)... |
magick rose: -alpha set -virtual-pixel transparent \
+distort SRT '.9,0' +repage rose_distort_scale.png
![[IM Output]](../static/img/resize/rose_distort_scale.png)
Puede que no parezca una mejora, de hecho tiene bordes difusos, pero es un redimensionado exacto sin ajustes para un tamaño de imagen entero final, justo como lo solicitaste. Debido a esto, los bordes son difusos, ya que los colores de los píxeles se están extendiendo sobre fracciones de un tamaño de píxel, y no solo a enteros completos. Ten en cuenta que usé la forma 'más' de "[+distort](https://imagemagick.org/command-line-options/#distort)" para permitir que este operador de procesamiento de la imagen establezca correctamente el tamaño y el desplazamiento final de la imagen en el Lienzo Virtual, para procesamientos y capas posteriores. Si este desplazamiento no es deseado, se puede eliminar usando el operador "[+repage](https://imagemagick.org/command-line-options/#page)". Pero si se deja en su lugar, entonces la ubicación real de la imagen en el lienzo más grande se preservará, permitiéndote posicionar la imagen correctamente de forma exacta con sus 'bordes difusos'. Aquí la redimensioné de modo que la esquina superior izquierda (0,0) se movió .5 píxeles a la derecha (a .5,0) y el resto de la imagen se escaló alrededor de ese punto de control... |
magick rose: -alpha set -virtual-pixel transparent \
+distort SRT '0,0 .9 0 .5,0' +repage rose_distort_shift.png
![[IM Output]](../static/img/resize/rose_distort_shift.png)
Observa que, como el borde superior no se movió realmente, permaneció relativamente nítido, mientras que todos los demás bordes se volvieron difusos. Aquí hay una magnificación de píxeles de la esquina superior, mostrando la transparencia que fue añadida por distort para proporcionar un redimensionado sub-píxel... |
magick rose_distort_shift.png -crop 15x15+0+0 +repage \
-scale 600% rose_distort_shift_mag.png
![[IM Output]](../static/img/resize/rose_distort_shift_mag.png)
Puedes ver que el borde superior permaneció nítido, mientras que el izquierdo (y todos los demás bordes) ahora son semitransparentes. Y ese es el punto. Tienes un control exacto del redimensionado, y de la ubicación sub-píxel final de la imagen resultante. No solo un ajuste cuantizado de la imagen redimensionada a un número entero de píxeles. Es decir, el distort es un reescalado y posicionamiento exacto de la imagen a fracciones de un píxel, permitiéndote ajustarla con precisión en otras imágenes. Esto puede volverse especialmente importante al trabajar con vídeo, donde un redimensionado impreciso de las imágenes incrustadas puede producir efectos 'discordantes'. | Técnicamente, el redimensionado de imágenes es una forma simplificada de Distorsión de Imágenes, ambas técnicas de remuestreo de imágenes. Su técnica de filtrado de 2 pasos muy rápida está limitada al escalado de píxeles alineado ortogonalmente y a un número entero de píxeles en el resultado final.
---|---
Affine, Transform A partir de IM v6.4.2-8, el antiguo ajuste "[-affine](https://imagemagick.org/command-line-options/#affine)" usado con los operadores "[-transform](https://imagemagick.org/command-line-options/#transform)" o "[-draw](https://imagemagick.org/command-line-options/#draw)" proporciona una capacidad de redimensionado de forma libre similar. Sin embargo, en realidad es equivalente a llamar a "[+distort](https://imagemagick.org/command-line-options/#distort)" con un método de distorsión '[AffineProjection](distorts.html#affine_projection)'. Por ello, se aplican todas las notas anteriores sobre Distort. Requiere más matemáticas, lo que lo hace difícil de usar para el usuario típico. Generalmente es mejor que uses el método de distorsión anterior, que proporciona varios métodos alternativos para especificar la distorsión afín que se aplicará.
Distort vs Resize
Si realmente quieres hacer una comparación directa entre usar Distort vs Resize, tendrás que limitar específicamente la distorsión de la imagen, para que coincida exactamente con la imagen redimensionada con la que la estás comparando. Esto no es una tarea sencilla. Para hacerlo más fácil, se añadió un Método de Distorsión Resize especial a IM v6.6.9-2. Aquí, por ejemplo, amplío enormemente la "rose:" incorporada usando un rápido Resize, y luego usando Distort...
magick rose: -filter Lanczos -resize 300x rose_resize.png
magick rose: -filter Lanczos -distort Resize 300x rose_distort.png
![[IM Text]](../static/img/resize/rose_resize.png)
Resize (Lanczos - Sinc) | ![[IM Text]](../static/img/resize/rose_distort.png)
Distort (Lanczos - Jinc)
---|---
Si miras a lo largo del borde inferior de la rosa, verás que el Operador Distort produjo en realidad un resultado más limpio y mejor que el Operador Resize. Con muy pocos Artefactos de Bloque, que son comunes al ampliar imágenes. Aparte de este borde inferior, el resto de la imagen es prácticamente idéntico, incluso cuando se compara usando un script "[flicker_cmp](../static/img/scripts/flicker_cmp)". Sin embargo, recuerda que Distort es mucho más lento que Resize, ya que usa una técnica de Remuestreo de Área más directa pero mucho más compleja, sin las optimizaciones de velocidad de 2 pasos que usa resize. | _La verdadera diferencia entre las dos imágenes anteriores es que el Operador Distort usa un método de filtro de Remuestreo de Área Elíptica bidimensional (también conocido como filtrado o remuestreo cilíndrico) para su procesamiento de imágenes. Esto es más lento que el método de remuestreo unidimensional de dos pasos usado por todos los demás métodos de redimensionado mostrados en esta sección. También es por eso que produjo un mejor resultado a lo largo del borde inferior diagonal de la imagen ampliada de la rosa de arriba. No está limitado solo al filtrado horizontal y vertical.
Puedes ver los efectos que esto tiene sobre el ringing en los ejemplos de Artefactos de Ringing.
_
---|---
Técnicas de Redimensionado
Redimensionar con Corrección de Espacio de Color
Aunque redimensionar funciona muy bien, la mayoría de la gente no lo usa correctamente. Incluso yo normalmente uso redimensionar directamente sobre las imágenes, tal cual, y por tanto técnicamente redimensiono las imágenes de forma incorrecta. Las imágenes se almacenan típicamente usando un espacio de color no lineal "sRGB", o con corrección de gamma. Consulta Percepción Humana del Color para más detalles. Pero redimensionar (como la mayoría de los demás operadores de procesamiento de imágenes) es un procesador matemáticamente lineal, que asume que los valores de la imagen representan directamente un brillo de color lineal. El espacio de color "sRGB" básicamente contiene una corrección de gamma de aproximadamente 2.2. En realidad es más complejo que eso, involucrando dos curvas separadas. Consulta wikipedia, sRGB y W3org, sRGB el Espacio de Color Predeterminado de Internet. A partir de la versión 6.7.5, ImageMagick sigue esta convención y define el espacio de color predeterminado de las imágenes (al menos para la mayoría de los formatos de archivo de imagen) como sRGB. Esto significa que simplemente necesitamos usar "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)" para transformar la imagen a un espacio lineal antes de redimensionar. |
Usar corrección de color en una versión Q8 de baja calidad de IM (consulta Calidad) no se recomienda debido a la pérdida de precisión que proporciona una calidad de tan baja memoria. |
|---|---|
| La imagen de la NASA "Earth's City Lights" es un caso muy extremo en el que los efectos del espacio de color no lineal tienen un gran impacto en los resultados de redimensionar la imagen. Aquí redimensionamos directamente la imagen sin corrección de espacio de color... |
magick earth_lights_4800.tif -resize 500 earth_lights_direct.png
Y aquí convertimos de un sRGB no lineal a RGB lineal, luego las redimensionamos, y la convertimos de nuevo...
magick earth_lights_4800.tif -colorspace RGB -resize 500 \
-colorspace sRGB earth_lights_colorspace.png
Como puedes ver, las 'luces' en las imágenes son mucho mucho más brillantes, ya que no están tan fuertemente influenciadas por el espacio de color no lineal de la imagen de origen. Aunque la mayoría de las imágenes no tienen un impacto tan grande como el que se ve arriba, está presente y puede tener muchos efectos. El efecto principal que se puede ver de los efectos no lineales de sRBG es que los colores más oscuros se guardan como valores mucho más oscuros (para ser más perceptualmente relevantes). Pero como son más oscuros, no se procesan correctamente matemáticamente, por lo que la imagen sRGB resultante es más oscura que una imagen procesada en un espacio de color lineal como RGB (o LAB o LUV). Consulta también Procesar Imágenes Reales con Color y Dibujar con Corrección de Gamma y Espacio de Color. El mismo manejo correcto del espacio de color también se aplica al uso de distort (filtro elíptico), al desenfoque de imágenes, y puede tener grandes efectos en la cuantización de imágenes, el difuminado (dithering) y el difuminado ordenado. Esto se examina en detalle en filtros de remuestreo. ADVERTENCIA: El espacio de color RGB puede producir problemas de recorte (clipping) a lo largo de los bordes que involucran cambios fuertes de color primario (no solo entre blanco y negro). Consulta la siguiente sección. | |
---|---|---
En versiones de IM anteriores a la v6.7.5, en las que el espacio de color de entrada predeterminado era 'RGB'. El espacio de color 'sRGB' significaba en realidad "convertido de sRGB a RGB lineal". ¡El resultado era que las dos etiquetas estaban intercambiadas! Raro pero cierto. Debido a esto, las versiones más antiguas de ImageMagick necesitarían hacer la corrección de espacio de color anterior con esos nombres de espacio de color intercambiados. Así... |
magick earth_lights_4800.tif -colorspace sRGB \
-resize 500 -colorspace RGB earth_lights_colorspace.png
* Este ejemplo está obsoleto ***
Ten en cuenta que la operación "-colorspace RGB" no era realmente necesaria, ya que se realizaba automáticamente al guardar en el formato de archivo de imagen PNG. Lo anterior se desarrolló a partir de una Discusión del Foro de IM Correct Resize.
Redimensionar con Corrección de Gamma
Así es como redimensionar correctamente imágenes usando solo corrección de gamma.
magick earth_lights_4800.tif -gamma 0.454545 \
-resize 500 -gamma 2.2 earth_lights_gamma.png
Una alternativa a la operación inversa de gamma "-gamma 0.454545" es usar "-evaluate POW 2.2". Ten en cuenta que la corrección de gamma solo es una aproximación burda a la conversión correcta de imágenes desde/hacia el espacio de color sRGB, pero es tan cercana que te costaría ver alguna diferencia entre la corrección por espacio de color y la corrección por gamma. La corrección de gamma tampoco juega con los ajustes de espacio de color RGB/sRGB de IMv7, por lo que puede ser una mejor opción cuando la versión exacta sea desconocida. También quizás quieras echar un vistazo al operador "[-auto-gamma](https://imagemagick.org/command-line-options/#auto-gamma)", que intenta ajustar la imagen para producir cantidades iguales de áreas claras y oscuras (asumiendo que la imagen está en un espacio de color lineal).
Redimensionar en espacio de color LAB
Un problema con usar el espacio de color sRGB, RGB o incluso XYZ para redimensionar o para cualquier tipo de procesamiento de imágenes es que los 3 canales de color no solo representan el color sino también la intensidad o el brillo. Eso significa que si un canal se distorsiona (como al ser recortado) el color del píxel también se distorsionará y puede resultar en un aspecto extraño. El espacio de color LAB no solo es un espacio de color lineal, sino que fue diseñado para que la intensidad (canal L) esté separada de dos canales de color (canales A y B). Eso significa que si cualquiera de los canales se recorta, no genera sesgo de color. También significa que generalmente ninguno de los canales está realmente cerca de los límites de recorte, a menos que trabajes específicamente con imágenes en blanco y negro puros, lo cual es poco común en imágenes de la vida real. Por ello, procesar imágenes usando el espacio de color LAB funciona en realidad mejor, y evita el recorte y el sesgo de color que puedes obtener al usar un espacio de color RGB o XYZ. | _Antes de IM v6.7.8-2, los valores LAB de los canales A y B se almacenaban usando enteros con signo, almacenados en un espacio de memoria de enteros sin signo. Esto creaba una discontinuidad entre los valores negativos y positivos, que no permitía que el procesamiento normal funcionara, solo las conversiones de formato de imagen.
Esto significaba que en versiones más antiguas de IM, el procesamiento de imágenes en espacio de color LAB no funcionaba, especialmente cuando se involucraba un color con valores tanto positivos como negativos. Es decir, al trabajar con colores que cambian entre azul-amarillo y rojo-verde.
Después de esta versión, los valores se almacenaron internamente usando un sesgo del 50%, lo que eliminó esa discontinuidad, y por tanto permitió que las operaciones lineales funcionaran como se esperaba.
_
---|---
Para redimensionados que involucran filtros de remuestreo de 'afilado' (muy comúnmente usados), usar el espacio de color Lab también moderará los cambios extremos de intensidad, que pueden generar Artefactos de Ringing demasiado fuertes (y recortados en rango) en los colores primarios RGB. Por ejemplo...
magick rose: -colorspace RGB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_rgb.png
magick rose: -colorspace LAB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_lab.png
![[IM Output]](../static/img/images/rose.png)
Original | | ![[IM Output]](../static/img/resize/rose_distort_rgb.png)
Espacio de color RGB | ![[IM Output]](../static/img/resize/rose_distort_lab.png)
Espacio de color LAB
---|---|---|---
Como puedes ver, mientras que el borde de la rosa se recortó en el espacio de color RGB lineal, no se recortó en el espacio de color LAB. En el espacio de color RGB, el borde inferior de la rosa ve un cambio de color de casi blanco puro a casi rojo puro, causando un cambio fuerte (negativo) en los canales 'verde' y 'azul'. Esto produce un efecto de ringing de 'lóbulo negativo' muy fuerte que luego se recorta en el espacio de color RGB. El resultado final es una severa distorsión de color, debido al efecto de afilado del filtro. En el espacio de color LAB, el cambio de blanco a rojo no es ni de lejos tan fuerte ni en intensidad ni en los canales de color, por lo que, aunque obtenemos un buen afilado en la intensidad, ni esta ni los canales de color se recortan, evitando así la distorsión de color. El resultado es una imagen redimensionada mucho mejor, con un efecto de afilado más apropiado del filtro. Simplemente separando la intensidad del color.
Redimensionar usando el espacio de color LUV
A partir de IM v6.7.8-8, IM también implementa un espacio de color estrechamente relacionado, LUV. Ambos están diseñados para ser perceptualmente uniformes (lineales), e incluso comparten los mismos resultados críticos del canal de intensidad 'L' o 'Lightness', aunque calculan los canales de color de forma diferente. La diferencia principal es que los ejes de color LUV se ajustaron para tener deltas de color (diferencias de color) perceptualmente iguales, lo que resulta en una escala de color ligeramente diferente a la del espacio de color LAB, aunque la intensidad permanece igual entre ambos. Consulta Espacio de color de valencia cromática de Adams. Los resultados de los redimensionados entre LAB y LUV son prácticamente idénticos.
magick rose: -colorspace LUV -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_luv.png
Consulta Espacio de Color para más información sobre estos dos espacios de color..
Resumen de Redimensionar usando diferentes espacios de color
¿O por qué no usar LAB o LUV para redimensionar?
Bueno, porque, al igual que sRGB, ¡el espacio de color LAB y LUV es un espacio de color perceptual no lineal! Y las matemáticas solo estaban destinadas a aplicarse a valores lineales. Por ejemplo, aquí están los resultados de redimensionar la imagen "Earth's City Lights" en el espacio de color 'Lab'.
magick earth_lights_4800.tif -colorspace Lab -resize 500 \
-colorspace sRGB earth_lights_lab.png
El resultado es prácticamente idéntico al que obtendrías si hubieras redimensionado directamente en el espacio de color perceptual sRGB. ¿Pero es realmente algo malo redimensionar en un espacio de color perceptual? En realidad eso es un punto debatible. Parece que evitar el recorte de los canales de color, mientras que el sesgo de color (cambios desiguales en diferentes canales de color) es menos importante. Pero entonces, ¡las imágenes LAB y LUV son lineales, perceptualmente! Por ello, quizás mezclar colores (que es lo que realmente hacen los Filtros de Remuestreo) en un espacio de color lineal-perceptual pueda ser en realidad algo bueno. Solo un punto final: sRGB solo es perceptualmente lineal en intensidad a lo largo de los componentes de color primarios. En realidad no es perceptualmente lineal en color, por lo que sigue siendo un mal espacio de color para hacer cualquier tipo de redimensionado de imágenes. Nicolas Robidoux lo resumió muy bien con... _Generalmente, los espacios de color de luz lineal (RGB lineal y XYZ) producen halos oscuros exagerados, y los espacios de color "perceptuales" (sRGB, LAB, LUV) producen halos claros exagerados.
Si lo piensas un minuto, esto tiene todo el sentido, porque los espacios de color perceptuales empaquetan muchos bits en el extremo más oscuro del espectro de intensidad, y "vacían" el extremo más claro, para imitar el SVH (Sistema Visual Humano). Así, 1 unidad de sobreimpulso oscuro te lleva menos "lejos" en sRGB que en RGB lineal, pero 1 unidad de sobreimpulso claro te lleva menos "lejos" en RGB lineal que en sRGB.
La sigmoidización (ver a continuación) trata los sobreimpulsos oscuros y claros por igual, y generalmente atenúa los extremos de ambos.
_
Redimensionar usando un Espacio de Color Sigmoidal
En una larga discusión en los Foros de Discusión de ImageMagick, Sigmoidal minimization of resampling filter haloing. Se ha desarrollado una nueva técnica en la que, en lugar de intentar redimensionar imágenes en un espacio de color lineal, la imagen se redimensiona en un espacio de color modificado usando el Operador Modificador de Color Sigmoidal ([-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast)). Esto puede reducir el recorte de halos extremos o Artefactos de Ringing que pueden desarrollarse a lo largo de bordes muy nítidos. Por ejemplo, aquí hay una secuencia de técnicas de redimensionado 'mejoradas', que se han discutido en los Foros de Procesamiento Digital de Imágenes...
magick rose: -colorspace RGB -filter Lanczos -resize 200x \
-colorspace sRGB rose_resize_RGB.png
magick rose: -colorspace RGB -filter Lanczos -distort resize 200x \
-colorspace sRGB rose_distort_RGB.png
magick rose: -colorspace RGB +sigmoidal-contrast 6.5,50% \
-filter Lanczos -distort resize 200x \
-sigmoidal-contrast 6.5,50% -colorspace sRGB rose_sigmoidal_RGB.png
![[IM Output]](../static/img/resize/rose_resize_RGB.png)
Resize (lineal normal) | ![[IM Output]](../static/img/resize/rose_distort_RGB.png)
Distort (cilíndrico) | ![[IM Output]](../static/img/resize/rose_sigmoidal_RGB.png)
Variación Sigmoidal
---|---|---
Esencialmente, lo que hace el ejemplo final de arriba es disminuir el contraste de la imagen, comprimiendo los grises de tono medio en un rango lineal más estrecho, mientras aleja los valores extremos de los bordes de recorte, antes de redimensionar. Luego elimina esa modificación después. Esto a su vez resta énfasis a los efectos extremos de los valores de color, mientras todavía permite que el filtro procese los tonos medios de forma lineal, para reducir las distorsiones de color. En muchos sentidos, esto es similar a redimensionar imágenes en el espacio de color no lineal sRGB predeterminado (que es una práctica demasiado común), pero funciona igual de bien tanto para los artefactos de ringing claros como oscuros. Es decir, es simétrico sobre todo el rango de valores de color, mientras que redimensionar en el espacio de color sRGB funciona solo desde el extremo oscuro inferior del rango de color (valores azules y verdes en el ejemplo de arriba). Es decir, es una técnica mucho más controlada.También se ha comentado que esta variación sigmoidal solo puede funcionar bien para ampliaciones. Prueba también diferentes valores para la intensidad del contraste sigmoidal (6.5 en el de arriba) para diferentes imágenes. Recuerda, al igual que con cada técnica de redimensionado, los resultados son altamente subjetivos, y pueden no ser buenos para todos los tipos de imagen. | _La transformación sigmoidal genera esencialmente un espacio de color no lineal especial hecho por ti mismo (DIY), que se basa en los resultados anteriores que se obtuvieron al usar un espacio de color perceptual no lineal (sRGB).
Ten en cuenta que redimensionar (distorsionar) una imagen con canales de color no lineales en el espacio de color RGB puede llevar a resultados ligeramente diferentes en cada canal de color. Esto resulta en un ligero cambio de color (en lugar de un color que se recorta, como vimos antes).
Esto solo es un problema con los espacios de color no lineales con canales mixtos de color-intensidad, como sRGB, o un espacio de color sigmoidal.
_
---|---
Redimensionado con Máscara de Enfoque (USM) -- Técnica de Redimensionado de Photoshop
A menudo, redimensionar imágenes (ya sea a un tamaño menor o mayor) añade algo de borrosidad (Artefactos de Desenfoque) a la imagen. Debido a esto, a mucha gente le gusta jugar con los diversos filtros (consulta Filtros de Remuestreo), para tratar de hacer los resultados más nítidos. Pero esto puede añadir otros Artefactos de Redimensionado a los resultados de la imagen. Un método que se usa comúnmente es afilar la imagen después de redimensionarla. Normalmente esto se hace usando la especial y extrañamente nombrada Operación Unsharp, que contiene aún más controles para controlar la calidad de los resultados. Por ejemplo, vamos a 'afilar' (unsharp) los resultados de la imagen muy borrosa filtrada con 'Spline'...
magick logo: -filter spline -resize 150x logo_spline.png
magick logo: -filter spline -resize 150x \
-unsharp 0x1 logo_spline_unsharp.png
![[IM Output]](../static/img/resize/logo_spline.png)
Spline | | ![[IM Output]](../static/img/resize/logo_spline_unsharp.png)
Afilado (Unsharped)
---|---|---
Como puedes ver, afilar la imagen después del redimensionado mejora los resultados. Fíjate en las estrellas y los detalles del sombrero en particular. Obtienes una imagen muy nítida y buena sin ningún aliasing, ringing o incluso atenuación de efectos. Aunque un Filtro Spline no es un filtro particularmente bueno para empezar, este método de afilado (en realidad 'unsharping') funcionará para CUALQUIER filtro. También proporciona más controles para ajustar finamente el resultado. De hecho, esto es lo que hace 'photoshop' para mejorar la calidad de sus imágenes redimensionadas, aunque no sé qué ajustes usa para la Operación Unsharp. Una técnica conocida como USM El valor predeterminado de "GIMP" (radius=6, amount=0.5, threshold=0) para unsharp es equivalente a "-unsharp 12x6+0.5+0", y esto es correcto (aparte de ignorar que GIMP establece un radio fijo en el doble de sigma). Sin embargo, recuerda que realmente no necesitas especificar el radio del kernel en ImageMagick, por lo que un valor de "-unsharp 0x6+0.5+0" funcionará mejor. Consulta también el tema del foro de IM unsharp parameters in GIMP. La publicación Image Resizing sugiere usar "-unsharp 0x0.75+0.75+0.008" como bueno para imágenes mayores de 500 píxeles. Mientras que una discusión del Open Photography Forum Downsampling with ImageMagick sugiere "-unsharp 1.5x1+0.7+0.02".
Redimensionar para Rellenar un Espacio Dado
| Básicamente: Redimensionar una imagen grande para llenar completamente un tamaño de imagen específico, pero recortando cualquier parte de la imagen que no encaje. | A partir de IM v6.3.8-3, una nueva bandera de redimensionado '^' te permitirá hacer esto directamente como un único paso de redimensionado. Estos ejemplos representan un método alternativo que pueden usar los usuarios con versiones más antiguas de IM. Consulta Bandera de Rellenar al Redimensionar arriba. |
|---|---|
| La solución es bastante delicada, ya que el requisito normal del usuario al redimensionar imágenes es ajustar la totalidad de una imagen a un tamaño dado. Como se preserva la relación de aspecto de la imagen, eso deja espacio extra sin usar en el área que estás intentando llenar. Aquí intentamos redimensionar una imagen para llenar una caja de 80x80. |
magick logo: -resize 80x80\> \
-size 80x80 xc:blue +swap -gravity center -composite \
space_resize.jpg
![[IM Output]](../static/img/resize/space_resize.jpg)
En el ejemplo anterior añadimos un lienzo de fondo para rellenar las partes no usadas de la caja de redimensionado para mostrar el espacio que queríamos que la imagen llenara, pero no se llenó, ya que preservó la relación de aspecto de la imagen. Ahora bien, si todas tus imágenes son de estilo apaisado (son más anchas que altas), entonces por supuesto puedes simplemente redimensionar la imagen para ajustar la altura o el ancho del área, y luego usar "[-crop](https://imagemagick.org/command-line-options/#crop)" para cortar la imagen y ajustarla exactamente. |
magick logo: -resize x80 \
-gravity center -crop 80x80+0+0 +repage space_crop.jpg
![[IM Output]](../static/img/resize/space_fill.jpg)
El problema es que lo anterior solo manejará imágenes de estilo apaisado. Fallará gravemente si la imagen es de estilo vertical (más alta que ancha). Esto, por supuesto, puede resolverse en un script obteniendo primero las dimensiones de la imagen, y luego eligiendo el método correcto para ajustar la imagen al espacio necesario. Pero una mejor solución sería que IM hiciera todo el trabajo para todas las imágenes. La solución dentro de IM es procesar la imagen redimensionando cada una de las dimensiones de la imagen por separado. Luego eligiendo la imagen más grande de los dos resultados. Para hacer esto más fácil, redimensionar tiene una opción de prueba incorporada que solo redimensionará una imagen si eso la haría más grande. Esto nos permite usar una solución muy ingeniosa para nuestro problema. |
magick logo: \
-resize x160 -resize '160x<' -resize 50% \
-gravity center -crop 80x80+0+0 +repage space_fill.jpg
![[IM Output]](../static/img/resize/space_fill.jpg)
En el ejemplo anterior, el segundo redimensionado de la serie solo redimensionará si el ancho producido por el primer redimensionado fue menor que el área que estamos intentando llenar. El orden específico de los redimensionados (altura primero, luego ancho) se eligió porque la mayoría de las imágenes son fotografías que normalmente son más largas horizontalmente. Con el orden anterior, en ese caso la segunda operación de redimensionado se omitirá. Si tus imágenes son más a menudo verticales (más largas verticalmente), entonces cambia los argumentos para redimensionar la imagen primero por altura, luego por ancho. Por ejemplo... |
magick logo: \
-resize 160x -resize 'x160<' -resize 50% \
-gravity center -crop 80x80+0+0 +repage space_fill_2.jpg
![[IM Output]](../static/img/resize/space_fill_2.jpg)
El resultado de ambos ejemplos debería ser muy similar, y el comando funcionará tanto para estilos de imagen apaisados como verticales, aunque funciona mejor para uno de ellos. El mayor problema con este método es que la imagen ahora se redimensiona 2 o 3 veces, produciendo desenfoque extra y otros posibles artefactos en el resultado final. Para reducir esto, los redimensionados iniciales se realizan al doble de las dimensiones finales, lo que asume que la imagen original es al menos 3 o más veces el tamaño del resultado final deseado. No es un problema para la producción de miniaturas, pero algo a tener en cuenta.
Redimensionar Dibujos Lineales
Hacer un redimensionado fuerte de una imagen que contiene líneas finas puede representar un gran problema... Redimensionar imágenes a miniaturas muy pequeñas hace que las líneas finas que solo tienen unos pocos píxeles de ancho se desvanezcan y desaparezcan en el fondo. Esto puede llegar a ser tan grave que he visto miniaturas de un dibujo lineal que parecían completamente en blanco. Es decir, ¡cada detalle del dibujo original 'desapareció', haciendo la miniatura bastante inútil! Si esto es un problema, hay algunas técnicas que pueden ayudar...
- Redimensionar y luego ajustar el contraste para hacer las líneas más visibles. Aunque esto hará las líneas más aliasadas (escalonadas). También tiene límites en cuanto a hasta dónde se puede usar esta técnica.
- Desenfocar y umbralizar la imagen (un método muy similar al 'dilatar' o 'erosionar' morfológico) para hacer las líneas de un solo píxel un 300% más gruesas. Ahora, después de redimensionar en 1/3, la imagen será más pequeña pero las líneas permanecerán igual de fuertes y visibles que antes.
- Engrosar las líneas usando técnicas de Morfología de Engrosamiento. Quizás quieras hacer el redimensionado por etapas, engrosando y redimensionando la imagen en un 50% cada vez hasta que llegues al tamaño final. Aunque a medida que el espaciado entre las líneas se reduce, puedes encontrar que acabas con más bien un 'borrón' que un dibujo lineal. Es decir, puedes obtener el problema opuesto. Ajustar la proporción de engrosamiento respecto al redimensionado, sin embargo, debería producir un resultado aceptable.
- Separar el bordeado de líneas de una imagen de las áreas de colores sólidos, y redimensionar cada uno por métodos diferentes (las líneas usando lo anterior). Después, las dos partes pueden volver a fusionarse, permitiéndote preservar el bordeado de líneas de la imagen. Esto reproducirá en efecto el resultado que a menudo obtienes al redimensionar imágenes vectoriales.
- Convertir la imagen a una imagen vectorial, y luego redimensionar. Esto puede ser delicado, pero también puede producir el mejor resultado posible para redimensionar dibujos lineales, con bordes perfectamente anti-aliasados (nítidos), e imágenes claras.
Si se te ocurre alguna otra forma de redimensionar dibujos lineales de manera efectiva, o probaste algunas de las técnicas anteriores, por favor házmelo saber (a mí y a otros usuarios de IM).
![[IM Output]](../static/img/resize/dragon_sm.gif)
![[IM Output]](../static/img/resize/resize_dragon.gif)
![[IM Output]](../static/img/images/terminal.gif)
![[IM Output]](../static/img/resize/resize_terminal.gif)
![[IM Output]](../static/img/resize/exact_dragon.gif)
![[IM Output]](../static/img/resize/exact_terminal.gif)
![[IM Output]](../static/img/resize/shrink_dragon.gif)
![[IM Output]](../static/img/resize/shrink_terminal.gif)
![[IM Output]](../static/img/resize/fill_dragon.gif)
![[IM Output]](../static/img/resize/fill_terminal.gif)
![[IM Output]](../static/img/resize/fill_crop_dragon.gif)
![[IM Output]](../static/img/resize/fill_crop_terminal.gif)
![[IM Output]](../static/img/resize/half_dragon.gif)
![[IM Output]](../static/img/resize/half_terminal.gif)
![[IM Output]](../static/img/resize/scale_gray_norm.gif)
![[IM Output]](../static/img/images/rose.gif)
![[IM Output]](../static/img/resize/line_orig.gif)
![[IM Output]](../static/img/resize/line_sample.gif)
![[IM Output]](../static/img/resize/magnify_crosshatch.gif)
![[IM Output]](../static/img/resize/line_orig2.gif)
![[IM Output]](../static/img/resize/line_resize.gif)
![[IM Output]](../static/img/resize/line_adaptive.gif)
![[IM Output]](../static/img/resize/line_resize_mag.gif)
![[IM Output]](../static/img/resize/line_adaptive_mag.gif)
![[IM Output]](../static/img/resize/logo_lqr_expand.jpg)
![[IM Output]](../static/img/resize/animated_lqr.gif)
![[IM Text]](../static/img/resize/earth_lights_direct.png)
![[IM Text]](../static/img/resize/earth_lights_colorspace.png)
![[IM Text]](../static/img/resize/earth_lights_gamma.png)
![[IM Output]](../static/img/resize/rose_distort_luv.png)
![[IM Text]](../static/img/resize/earth_lights_lab.png)