Ejemplos de ImageMagick -- Recortar y Bordear
- El operador básico de recorte
- La Imagen Fallida (de un recorte erróneo)
- Recortar una imagen con lienzo virtual existente
- Eliminar el lienzo virtual de los resultados usando +repage *
- Recorte de viewport con ajustes del lienzo virtual
- Recorte relativo a la gravedad
- Recortar un porcentaje de una imagen
- Recorte en mosaico, subdividir una imagen en múltiples imágenes
- Recorte en mosaico centrado, dejando los restos alrededor del borde
- Recorte en tiras, recortar filas y columnas
- Cuadrantes, cortar alrededor de un solo punto
- Usar desplazamientos negativos, eliminar el borde inferior o izquierdo
- Recortar en divisiones de tamaño aproximadamente igual
- Marco, añadir bordes tipo 3D a las imágenes
- Afeitar, eliminar los bordes de las imágenes
- Recortar con un color específico
- Recortar solo un lado de una imagen
- Recortar imágenes 'difusas' -- Imágenes JPEG de baja calidad
- Recortar imágenes 'ruidosas' -- Imágenes escaneadas o de vídeo
Aquí exploramos las operaciones de ImageMagick que te permiten poner tus imágenes bajo el cuchillo, y añadir marcos y bordes alrededor de la imagen. Es decir, examinamos operaciones que cambian el tamaño de una imagen, sin escalar el contenido de la imagen. Puedes pensar que esto es una operación simple, y lo es. Tan simple que IM proporciona una enorme cantidad de formas y métodos para realizar esta tarea. Tantos que necesité dedicarle su propia página de ejemplos solo para demostrarlos todos.
Recortar (reducir imágenes a su tamaño)
Recorte y lienzo de página
El operador de imagen "[-crop](https://imagemagick.org/command-line-options/#crop)" simplemente recortará la parte de todas las imágenes de la secuencia actual al tamaño y posición que especifiques mediante su argumento de geometría.
magick rose: rose.gif
magick rose: -crop 40x30+10+10 crop.gif
magick rose: -crop 40x30+40+30 crop_br.gif
magick rose: -crop 40x30-10-10 crop_tl.gif
magick rose: -crop 90x60-10-10 crop_all.gif
magick rose: -crop 40x30+90+60 crop_miss.gif
Solo para que puedas comprobar exactamente qué ocurrió, aquí está la salida de "magick identify" sobre los resultados del recorte anterior.
magick identify rose: crop.gif crop_br.gif crop_tl.gif \
crop_all.gif crop_miss.gif
Observa que el tamaño de la imagen mostrada (su lienzo virtual) no se ha visto afectado por la operación "[-crop](https://imagemagick.org/command-line-options/#crop)". La imagen real en sí ha sido recortada, y puede ser más pequeña, pero el lienzo en el que se muestra la imagen GIF sigue teniendo el mismo tamaño que el lienzo original. También notarás que el tamaño de la imagen real producida puede no ser el tamaño exacto que solicitaste en el recorte. Podría ser mucho más pequeño de lo que esperabas, ya que el recorte en sí estaba parcial o totalmente fuera del área de imagen real que se estaba recortando. También notarás que el 'desplazamiento' de la imagen sobre el lienzo virtual también se cambió en muchos casos para que los píxeles de la imagen recortada sigan estando exactamente en la misma posición que estaban en la imagen original. Es decir, el contenido de la imagen en sí no se mueve, aunque la imagen real en sí sea más pequeña. Esto significa que si ahora modificas la imagen más pequeña, y luego la superpones (usando los operadores de capas de imagen) de nuevo sobre la original, encajará exactamente donde la subimagen provenía originalmente. Es decir, IM conserva la información de 'lienzo virtual', 'página' o 'capas' de la imagen para preservarla para uso posterior. Esto es especialmente importante para el correcto funcionamiento del manejo de animaciones GIF. Para más información sobre esto, consulta Deconstruir animaciones GIF. | _Las imágenes GIF hacen un uso activo de la información de 'página' o 'lienzo virtual', tamaño y desplazamiento en imágenes recortadas por IM. Si no quieres esta información, elimínala con "[+repage](https://imagemagick.org/command-line-options/#repage)" inmediatamente después del "[-crop](https://imagemagick.org/command-line-options/#crop)".
Ten en cuenta que muchos formatos de imagen no guardan esta información de página/lienzo virtual, por lo que guardar en tales formatos la elimina automáticamente. JPEG es un ejemplo típico de un formato que elimina esta información.
El formato PNG no hace mucho uso de la información de página/lienzo (excepto en el formato multi-png (MNG)), pero sí guarda la información de desplazamiento de página (incluso desplazamientos negativos). IM también añadirá una pequeña cantidad de metadatos para preservar el tamaño del lienzo virtual para uso posterior por otros comandos de IM.
Debido a esta preservación, recomiendo encarecidamente que sigas aplicando un "[+repage](https://imagemagick.org/command-line-options/#repage)" incluso al guardar en JPEG u otro formato de imagen sin página cuando no necesites esa información, como precaución, y para dejar claro que no la quieres.
_
---|---
Ten en cuenta que el comportamiento del recorte puede verse afectado por estos defines:
| trim:percent-background=X% | Establece la cantidad de fondo que se tolera en un borde. Se especifica como porcentaje. 0% significa que no se tolera nada de fondo. 50% significa que un borde puede contener hasta un 50% de píxeles que sean fondo según el factor de difusión. |
|---|---|
| trim:edges={north,east,south,west} | Solo recorta los bordes especificados de la imagen. |
| trim:minSize=geometry | Limita el recorte al tamaño especificado. |
| type:features=string | Añade una característica de fuente para que la use el delegado RAQM durante la composición de texto complejo. Normalmente se usa para activar características de fuente opcionales que no están habilitadas por defecto, pero también puede usarse para desactivar características de fuente predeterminadas. Las características incluyen aquellas para controlar el interletraje (kerning), las ligaduras y el árabe. |
| type:hinting=false | Desactiva el hinting de fuentes. La representación correcta de los glifos necesita que los puntos escalados se alineen a lo largo de la rejilla de píxeles del dispositivo de destino, mediante una operación a menudo llamada hinting. Uno de sus principales propósitos es asegurar que los anchos y alturas importantes se respeten en toda la fuente. (Por ejemplo, muy a menudo es deseable que los glifos 'I' y 'T' tengan su línea vertical central del mismo ancho de píxel. El hinting también gestiona características como los astiles (stems) y los desbordamientos (overshoots), que pueden causar problemas con tamaños de píxel pequeños. |
La Imagen Fallida (de un recorte erróneo)
La última imagen del ejemplo anterior (p. ej. "crop_miss.gif") también produjo una imagen vacía especial. Tales imágenes pueden ser producidas por operaciones como Recortar, Trim, Comparación de capas, e incluso Optimizaciones de animación GIF, que generan resultados vacíos o sin sentido. Por ejemplo, en el ejemplo anterior, la operación "[-crop](https://imagemagick.org/command-line-options/#crop)" falló la imagen real que estaba recortando, por lo que produjo esta imagen 'fallida' especial, así como algunos mensajes de advertencia informativos...
La imagen de salida, o imagen 'fallida', es una imagen mínima, de un píxel de tamaño con un desplazamiento de 0, pero con el tamaño de página o lienzo de la imagen original, así como cualquier otro metadato que la imagen pueda tener asociado. Aquí representa la imagen 'vacía' o de 'tamaño cero' que debería haber sido devuelta por "[-crop](https://imagemagick.org/command-line-options/#crop)", pero como ningún formato de imagen puede generar una imagen de dimensiones 'cero', se usa en su lugar una imagen de un solo píxel transparente. Solo para que lo veas más claramente, aquí está la salida de "[identify](basics.html#identify)" de la imagen fallida, así como una 'enumeración de píxeles de IM' de esa imagen de un solo píxel, mostrando que solo contiene un único píxel transparente.
magick identify crop_miss.gif
magick crop_miss.gif crop_miss_data.txt
Esta imagen 'fallida' es básicamente lo mismo que crear una imagen "[null:](files.html#null)" pero con el tamaño de página o lienzo virtual de la imagen original establecido (pero no su desplazamiento), y todos los demás metadatos de imagen, como los retardos de tiempo de la animación GIF. Sin embargo, el método de descarte (disposal) del GIF puede modificarse para asegurar que las animaciones sigan siendo correctas después del recorte. Básicamente, debes tener en cuenta que "[-crop](https://imagemagick.org/command-line-options/#crop)" y otros operadores relacionados de forma similar pueden producir una imagen 'fallida' especial. Por lo tanto, deberías planear buscar el mensaje de advertencia, o esta 'Imagen Fallida' especial al escribir un script usando IM, si tal imagen mínima es posible y puede causarte problemas. Si no quieres el mensaje de advertencia (por ejemplo, porque esperas y manejas la ocasional imagen 'fallida'), puedes añadir un ajuste de control operacional "[-quiet](https://imagemagick.org/command-line-options/#quiet)" a la línea de comandos. Esto le indica a IM que no genere mensajes de advertencia informativos, solo errores reales. Por ahora no hay método para eliminar imágenes 'fallidas', o "[null:](files.html#null)", de la secuencia de imágenes actual. Sin embargo, tal método ha sido propuesto para una versión futura de IM. Escríbeme si descubres que necesitas tal método.
Recortar una imagen con lienzo virtual existente
Si una imagen ya tiene un lienzo virtual existente (por ejemplo, un fotograma de una animación GIF), entonces la operación "[-crop](https://imagemagick.org/command-line-options/#crop)" se aplicará en relación al lienzo virtual, y NO a la imagen real. Es decir, intentará preservar el desplazamiento de los datos de píxeles reales de la imagen recortada sobre el lienzo. Es decir, un píxel específico antes del recorte debería seguir ubicándose en el mismo desplazamiento relativo al lienzo virtual después. De esta manera, el recorte de imágenes en capas, o animaciones GIF, seguirá funcionando correctamente, aunque el 'lienzo' en sí no haya sido recortado. Aquí creamos una imagen centrada en un lienzo de página, y la recortamos de varias formas. Como antes, el tamaño del lienzo en sí no es modificado por la operación.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 32x32+16+16 crop_page.gif
magick paged.gif -crop 32x32+0+0 crop_page_tl.gif
magick paged.gif -crop 32x32+32+32 crop_page_br.gif
magick paged.gif -crop 60x60+2+2 crop_page_all.gif
magick paged.gif -quiet -crop 32x32+56+56 crop_page_miss.gif
magick identify paged.gif crop_page.gif crop_page_tl.gif crop_page_br.gif \
crop_page_all.gif crop_page_miss.gif
Ese último ejemplo anterior fue, por supuesto, la especial Imagen Fallida. Ten en cuenta que suprimí el mensaje de advertencia normal de IM usando un ajuste "[-quiet](https://imagemagick.org/command-line-options/#quiet)". Solo para que veas qué está pasando, echemos un vistazo más de cerca al recorte paginado de la esquina inferior derecha de la imagen. Aquí he dibujado un cuadrado semitransparente sobre el área que se recortó.
magick paged.gif -page 64x64+32+32 -size 32x32 xc:'#fff8' \
-alpha set -background none -mosaic crop_area_br.png
A partir de esto puedes ver justo lo que está ocurriendo. Aunque el recorte está contenido completamente en el lienzo de página, el recorte no cubrió la imagen real por completo. El resultado es que la imagen real es más pequeña de lo que el usuario pudo haber pretendido, pero todavía está posicionada sobre un lienzo o página más grande.
Eliminar el lienzo virtual de los resultados
Si esta información de lienzo virtual no se desea, entonces puedes usar el operador especial "[+repage](https://imagemagick.org/command-line-options/#repage)" para restablecer el lienzo de página y la posición de modo que coincidan con la imagen recortada real.
magick rose: -crop 40x30+10+10 +repage repage.gif
magick rose: -crop 40x30+40+30 +repage repage_br.gif
magick rose: -crop 40x30-10-10 +repage repage_tl.gif
magick rose: -crop 90x60-10-10 +repage repage_all.gif
magick rose: -quiet -crop 40x30+90+60 +repage repage_miss.gif
Este es, por supuesto, el resultado que los nuevos usuarios de IM normalmente habrían esperado del operador "[-crop](https://imagemagick.org/command-line-options/#crop)". En realidad es algo tan común de hacer que podrías llamarlo una regla general.
Usa siempre "[+repage](https://imagemagick.org/command-line-options/#repage)" después de cualquier operación tipo 'crop'.
A menos que realmente necesites preservar esa información.
La última imagen de arriba es, por supuesto, la especial imagen fallida de recorte, pero suprimí el mensaje de advertencia usando el ajuste operacional "[-quiet](https://imagemagick.org/command-line-options/#quiet)". |
Para IM versión 5 y anteriores, la operación "[+repage](https://imagemagick.org/command-line-options/#repage)" se manejaba mediante una secuencia de argumentos "-page +0+0", normalmente justo antes de guardar en un formato que usa información de lienzo virtual y desplazamiento, como GIF. Pero eso solo era usable al leer o escribir la imagen en un archivo, impidiendo su uso entre múltiples operaciones de procesamiento de imagen.__Con IM versión 6, reestructuración de la línea de comandos, la opción "[-page](https://imagemagick.org/command-line-options/#page)" se convirtió puramente en un ajuste de lectura/creación de imagen para usar al crear animaciones GIF y Capas de imágenes. Por ello se añadieron operadores separados "[-repage](https://imagemagick.org/command-line-options/#repage)" y "[-set](https://imagemagick.org/command-line-options/#set) page" para permitir a los usuarios establecer o cambiar la información del lienzo virtual. |
|---|---|
Recorte de viewport con ajustes del lienzo virtual
Desde la versión 6.2.4-5 de ImageMagick, puedes añadir una nueva bandera especial al argumento de "[-crop](https://imagemagick.org/command-line-options/#crop)". Esta bandera '!' le indicará al recorte que ajuste la información del lienzo virtual de la imagen devuelta de modo que sea relativa al área recortada. En otras palabras, independientemente del tamaño resultante de la imagen real recortada, el lienzo y el desplazamiento de la imagen devuelta se ajustarán para coincidir con el área que solicitaste recortar. Puedes pensar en esta bandera como un recorte de una imagen para que coincida con una 'ventana' o 'viewport' del área de recorte. Incluso si la mitad de la imagen no es visible en esa 'ventana', el lienzo virtual y el desplazamiento de la parte devuelta coincidirán con ese 'viewport'. Por ejemplo...
magick rose: -crop 40x30+10+10\! crop_vp.gif
magick rose: -crop 40x30+40+30\! crop_vp_br.gif
magick rose: -crop 40x30-10-10\! crop_vp_tl.gif
magick rose: -crop 90x60-10-10\! crop_vp_all.gif
magick rose: -quiet -crop 40x30+90+60\! crop_vp_miss.gif
magick identify rose.gif crop_vp.gif crop_vp_br.gif crop_vp_tl.gif \
crop_vp_all.gif crop_vp_miss.gif
| El carácter '!' tiene un significado especial para algunos shells de UNIX, como "csh", y debe escaparse con una barra invertida, incluso cuando se coloca entre comillas.
---|---
Observa cómo el tamaño del lienzo de la imagen devuelta ahora coincide con el área en la que se recortó la imagen. Para recortes de imágenes que están completamente dentro de la imagen real, el resultado será equivalente a seguir el recorte con un "[+repage](https://imagemagick.org/command-line-options/#repage)". Sin embargo, para cualquier recorte parcial o fallido de la imagen, el resultado será un lienzo más grande y un posible desplazamiento de la imagen resultante. Por lo tanto, esto no sustituye a hacer un "[+repage](https://imagemagick.org/command-line-options/#repage)" después de recortar para restablecer la información de página/lienzo. Sin embargo, puedes seguir un 'recorte de viewport' con un Aplanar (Flatten) para 'rellenar' el nuevo lienzo virtual de la imagen con píxeles reales. Es decir, te quedarás con una imagen que está garantizada de tener el tamaño del recorte solicitado, con cualquier área 'fallida' rellenada con el 'viewport' del color actual de "[-background](https://imagemagick.org/command-line-options/#background)". Por ejemplo, al Rellenar una imagen. |
magick rose: -crop 100x100-15-25\! -background skyblue -flatten \
crop_viewport.gif
![[IM Output]](../static/img/crop/crop_viewport.gif)
Aplanar una imagen después de un recorte de viewport es en realidad equivalente a usar el Operador Extender (Extent) (ver más abajo), para proporcionar un 'recorte rellenado'. Una bandera de 'recorte de viewport' también es muy importante al recortar animaciones GIF, ya que no solo ajusta el tamaño del lienzo, sino que también asegura que todos los fotogramas de la imagen sigan estando correctamente posicionados dentro del área recortada. Sin esta opción, recortar una animación GIF es muy difícil, requiriendo una corrección externa del tamaño y desplazamientos del lienzo de la imagen. Para un ejemplo de esto, consulta Recorte de animación, también con el lienzo. En muchos aspectos, un 'recorte de viewport' está estrechamente relacionado con el especial Ajuste de viewport de distorsión (Distort), en que ambos actúan como si fueran una 'ventana' hacia la imagen resultante. Ambos pueden usarse como método de 'recorte'. | La bandera '!' NO puede usarse al generar recortes en mosaico de múltiples imágenes, ni con el recorte en mosaico de área igual, donde tiene un significado diferente. Consulta las secciones apropiadas más abajo.
---|---
Recorte relativo a la gravedad
La posición de desplazamiento del "[-crop](https://imagemagick.org/command-line-options/#crop)" es por defecto relativa a la esquina superior izquierda de la imagen. Sin embargo, al establecer el ajuste "[-gravity](https://imagemagick.org/command-line-options/#gravity)", puedes indicarle a "[-crop](https://imagemagick.org/command-line-options/#crop)" que corte la imagen en relación al centro, a una esquina o a un borde de la imagen. El uso más común de un recorte con gravedad es recortar el 'center' (centro) de una imagen. |
magick rose: -gravity Center -crop 32x32+0+0 +repage crop_center.gif
![[IM Output]](../static/img/crop/crop_center.gif)
El ajuste "[-gravity](https://imagemagick.org/command-line-options/#gravity)" no solo afecta a la posición inicial 'cero' del recorte, sino que también afecta a la dirección del desplazamiento del recorte. Por ejemplo, si usas una "[-gravity](https://imagemagick.org/command-line-options/#gravity)" de 'South', y un desplazamiento de '+0+5' desplazará el área de recorte hacia arriba, en lugar de hacia abajo como lo haría normalmente. |
magick rose: -gravity South -crop 20x20+0+5 crop_south.gif
![[IM Output]](../static/img/crop/crop_south.gif)
Observa la posición del ejemplo de recorte anterior. Dejé deliberadamente sin hacer la operación "[+repage](https://imagemagick.org/command-line-options/#repage)" para que puedas ver cómo el área de recorte se desplazó del borde inferior de la imagen. También nota que el área de recorte no solo es relativa al borde inferior (sur), sino que el área está 'justificada' al centro para quedar en medio del borde inferior. Esto se hace con todas las operaciones afectadas por la gravedad.
Recortar un porcentaje de una imagen
El operador "[-crop](https://imagemagick.org/command-line-options/#crop)" también entiende cómo recortar una imagen a solo un porcentaje de su tamaño original. Por ejemplo, esto reducirá a la mitad el tamaño de la imagen. |
magick rose: -crop 50%x+0+0 crop_half.gif
![[IM Output]](../static/img/crop/crop_half.gif)
| Si solo se da un número de tamaño, entonces ese valor se usa para los porcentajes tanto de ancho como de alto, y el tamaño final del área que se recorta se redondeará al entero más cercano. El desplazamiento no es opcional.
---|---
Ten en cuenta que aunque el tamaño puede ser un porcentaje, el desplazamiento siempre estará en píxeles. No puedes proporcionar un desplazamiento como porcentaje del tamaño de la imagen. |
magick rose: -crop 50%x+30+20 crop_percent.gif
![[IM Output]](../static/img/crop/crop_percent.gif)
| _Cuando un recorte se da con un desplazamiento,debes suministrar un símbolo 'x' en el argumento para que el argumento pueda interpretarse correctamente. Esto es especialmente importante cuando solo se proporciona un único número para el ancho y el alto del área de recorte.
Por lo tanto, no puedes usar un argumento como '50%+30+20 que es un error, y resultará en que el recorte no haga nada en silencio._
---|---
Más comúnmente, un recorte porcentual se hace desde el centro de una imagen. |
magick rose: -gravity Center -crop 50x80%+0+0 crop_percent_center.gif
![[IM Output]](../static/img/crop/crop_percent_center.gif)
| El símbolo de porcentaje '%' puede aparecer en cualquier parte de un argumento, y si se da, se referirá a los números tanto de ancho como de alto. Es una bandera que simplemente declara que las partes de 'tamaño de imagen' son una fracción porcentual del tamaño del lienzo virtual o página de la imagen. Los desplazamientos siempre se dan en píxeles.
---|---
También puedes usar una bandera de 'recorte de viewport' con recortes porcentuales, para establecer automáticamente el tamaño del lienzo y el desplazamiento del recorte, al área que se está recortando. |
magick rose: -gravity Center -crop 50%\! crop_percent_vp.gif
![[IM Output]](../static/img/crop/crop_percent_vp.gif)
| _No puedes usar tamaños porcentuales para el recorte en mosaico (ver el siguiente). Por lo tanto, si no se proporciona el desplazamiento, y se da un tamaño porcentual (como arriba), se asume un desplazamiento de +0+0.
_
---|---
La bandera '!' significa que no se necesita un "[+repage](https://imagemagick.org/command-line-options/#repage)". Sin embargo, se sigue recomendando precaución para imágenes de entrada que también puedan tener tamaño de lienzo virtual y desplazamientos.
Recorte en mosaico, subdividir una imagen en múltiples imágenes
Uno de los aspectos más útiles del recorte es cuando no das una posición específica al comando de recorte. Es decir, das un tamaño, y no una posición dentro de la imagen donde recortar. En este caso, en lugar de generar solo una imagen, el recorte genera una serie completa de imágenes.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif +gravity -crop 32x32 tiles_%d.gif
magick identify paged.gif tiles_?.gif
| Si solo quieres extraer un número específico de mosaicos de una imagen, echa un vistazo a Recortar en divisiones de tamaño aproximadamente igual más abajo. | Es una buena idea asegurarse de que la gravedad esté desactivada usando "[+gravity](https://imagemagick.org/command-line-options/#gravity)". Esto se debe a que en un caso especial (recorte porcentual centrado) el ajuste de gravedad puede desactivar el recorte en mosaico. Otros efectos de la gravedad sobre el recorte en mosaico también son indefinidos. |
|---|---|
Usando los operadores de capas de imagen "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" o "[-flatten](https://imagemagick.org/command-line-options/#flatten)", (ver Aplanar capas) puedes superponer todas estas imágenes una encima de la otra, restaurando la imagen original. |
magick tiles_[0-3].gif -background white -mosaic tiles_mosaic.gif
![[IM Output]](../static/img/crop/tiles_mosaic.gif)
Sin embargo, como puedes ver, el lienzo virtual de la imagen ha sido rellenado con el color de fondo por "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)". Una alternativa es usar "[-layers](https://imagemagick.org/command-line-options/#layers) merge" (ver Fusionar capas), que fusiona las múltiples imágenes de capa en una nueva imagen de capa lo suficientemente grande para contener todas las imágenes dadas. Es decir, el lienzo virtual no se rellena, como lo harían los métodos de capas "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" o "[-flatten](https://imagemagick.org/command-line-options/#flatten)". |
magick tiles_[0-3].gif -background none -layers merge tiles_layered.gif
magick identify tiles_layered.gif
[![\[IM Text\]](../static/img/crop/tiles_layered_ident.txt.gif)](../static/img/crop/tiles_layered_ident.txt)
Si hubieras restablecido la información de lienzo y desplazamiento usando "[+repage](https://imagemagick.org/command-line-options/#repage)", entonces las imágenes ya no contienen el desplazamiento de donde fueron recortadas, ni el tamaño original de la imagen de origen. En ese caso, puedes volver a unir todas las imágenes de nuevo usando el modo especial de 'concatenation' (concatenación) de "magick montage". Tendrás que indicarle a montage cuántas filas o columnas de imágenes se extrajeron de la imagen original.
magick rose: -crop 20x20 +repage +adjoin rose_tiles_%02d.gif
montage -mode concatenate -tile 4x rose_tiles_*.gif rose_rejoined.gif
Ten en cuenta que los nombres de las imágenes individuales van de "rose_tiles_00.gif" a "rose_tiles_11.gif", que es simplemente el número de secuencia de los mosaicos en memoria. Esto no es muy agradable, ya que los nombres de archivo no dan una indicación fácil de la posición real a la que pertenece cada mosaico, ni del número total de mosaicos por fila y columna. A partir de IM v6.4.8-4 también puedes usar escapes de porcentaje en nombres de archivo especiales para generar e incluir etiquetas especiales en el nombre del archivo de salida. Usando esto con escapes de porcentaje FX puedes calcular una 'posición de mosaico' diferente para cada imagen. Por ejemplo...
magick rose: -crop 20x20 \
-set filename:tile "%[fx:page.x/20+1]_%[fx:page.y/20+1]" \
+repage +adjoin "rose_tile_%[filename:tile].gif"
Generará los nombres de archivo de las imágenes de mosaico "rose_tile_1_1.gif" a "rose_tile_4_3.gif", que es un esquema de nomenclatura de archivos mucho mejor. Engañoso, pero funciona. Lamentablemente, no puedes formatear el número generado por un escape de porcentaje, para incluir un relleno con ceros o especificar un número exacto de dígitos de punto flotante. Al menos no por ahora.
Recorte en mosaico centrado
En una discusión del Foro de IM se hizo una petición para centrar el recorte en mosaico de modo que las 'imágenes restantes' se distribuyeran uniformemente alrededor de los bordes. Al hacer esto, maximizamos el efecto de los mosaicos completos colocándolos en el centro de la imagen. Por supuesto, también terminas con más mosaicos de borde incompletos. La solución fue centrar la imagen de entrada en un lienzo virtual, que fuera algún múltiplo del tamaño de mosaico deseado. Por ejemplo, para recortar en mosaico la imagen "rose:" (de 70x46 píxeles de tamaño) en el máximo número de mosaicos completos de 30x20, en el centro de la imagen (y rodeada por mosaicos restantes), harías lo siguiente.
-
Primero calcula el número de mosaicos completos que puedes obtener de la imagen dividiendo los tamaños de la imagen...
70x46 / 30x20 => 2x2 mosaicos completos + resto -
Ahora añade 2 filas y columnas más para contener las imágenes restantes (si es necesario)
2x2 + 2x2 => 4x4 imágenes de mosaico -
Multiplica el tamaño del mosaico por esto para obtener el tamaño del lienzo virtual.
30x20 * 4x4 => 120x80 tamaño de lienzo -
Resta el tamaño de la imagen original y divide entre dos para el desplazamiento de centrado.
( 120x80 - 70x46 ) / 2 => +25+17
Así que el lienzo virtual y el desplazamiento de centrado es 120x80+25+17. Y aquí usamos los cálculos anteriores para realizar un recorte en mosaico centrado...
magick rose: -repage 120x80+25+17 -crop 30x20 +repage rose_30x20_%02d.gif
Si quieres preservar la ubicación de desplazamiento original de los mosaicos, pero eliminar el desplazamiento de centrado, puedes hacer un ajuste de desplazamiento relativo usando "-repage -25-17\!" (reemplazando el "[+repage](https://imagemagick.org/command-line-options/#repage)" en el ejemplo anterior). Si no añadiste dos columnas y filas al número de mosaicos y, por tanto, generas un desplazamiento negativo, puedes ignorar efectivamente los mosaicos de borde restantes, y solo generar mosaicos completos que existan en la imagen.
magick rose: -repage 60x40-5-3 -crop 30x20 +repage rose_ctiles_%d.gif
Básicamente, como los restos están ahora 'fuera' del lienzo virtual calculado, el operador "[-crop](https://imagemagick.org/command-line-options/#crop)" no sabe que estaban ahí y los ignora. De nuevo, reemplazando el "[+repage](https://imagemagick.org/command-line-options/#repage)" del ejemplo anterior, con un ajuste de desplazamiento relativo usando los valores de desplazamiento negados "-repage +5+3\!" se restaurarán las ubicaciones de desplazamiento originales desde las cuales se recortaron los mosaicos. Una alternativa para un recorte en mosaico centrado e ignorando los restos es simplemente reemplazar el ajuste de lienzo virtual con un recorte apropiado.
magick rose: -gravity center -crop 60x40+0+0 +gravity +repage \
-crop 30x20 +repage rose_ctiles2_%d.gif
El ejemplo anterior es más fácil de entender, pero también es un poco más lento, ya que ahora estás realizando dos recortes. Sin embargo, se necesitan menos cálculos. Pero si quieres recuperar los desplazamientos originales de los mosaicos, igual tendrás que calcular el desplazamiento relativo necesario, en cuyo caso bien podrías hacer la tarea por el método anterior más rápido usando el lienzo virtual de la imagen.
Recorte en tiras, recortar filas y columnas
Con IM versión 6.1.1, "[-crop](https://imagemagick.org/command-line-options/#crop)" se mejoró de modo que si falta uno de los argumentos de tamaño, o se establece en cero, entonces el argumento de tamaño faltante se establece al tamaño del lienzo/página de la imagen. En la mayoría de los casos, esto es lo suficientemente grande para cubrir la imagen ubicada en el lienzo, si el desplazamiento relacionado también se establece en cero. Este pequeño cambio te permite cortar fácilmente una sola fila o columna de la imagen, sin necesitar un número enorme como '999999' para cubrir el tamaño de la imagen. Por ejemplo, aquí extraemos una fila y columna simple de nuestra imagen rose 'paginada'.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 20x0+30+0 strip_column.gif
magick paged.gif -crop 0x20+0+30 strip_row.gif
magick identify paged.gif strip_column.gif strip_row.gif
[![\[IM Text\]](../static/img/crop/strip_ident.txt.gif)](../static/img/crop/strip_ident.txt)
Si eliminas ambos desplazamientos así como uno de los argumentos de tamaño, puedes dividir la imagen en una serie de tiras o columnas, en lugar de mosaicos.
magick rose: -crop 40x30+10+10 crop.gif
magick crop.gif -quiet -crop 20x strips_%d.gif
magick identify crop.gif strips_?.gif
[![\[IM Text\]](../static/img/crop/strips_ident.txt.gif)](../static/img/crop/strips_ident.txt)
Observa que el recorte en mosaico, en tiras o de otra forma, se realiza a través de todo el lienzo de página de la imagen, y por tanto está alineado a ese lienzo, y NO solo a la imagen real. Por eso, la primera y la última imagen real generada en el ejemplo anterior tiene solo 10 píxeles de ancho. Por supuesto, si un mosaico específico, o en este caso una 'columna', falla la imagen real sobre el lienzo virtual (como la última imagen del ejemplo anterior), entonces se genera una imagen fallida de recorte. La advertencia que IM normalmente habría producido se suprimió usando un ajuste "[-quiet](https://imagemagick.org/command-line-options/#quiet)". Esto no se recomienda a menos que estés esperando tal evento, y estés preparado para ello, como en un script. | _Es posible que una imagen esté posicionada de tal forma que ni siquiera aparezca en su propia página o lienzo virtual, o que sea tan grande que el lienzo de página solo pueda contener una pequeña ventana o parte de la imagen.
En tales casos raros, el recorte en tiras sin ningún argumento de tamaño hará mal la subdivisión de la imagen, y producirá respectivamente, imágenes fallidas, o mosaicos más pequeños de solo las partes dentro de los límites del lienzo virtual.
El operador "[-crop](https://imagemagick.org/command-line-options/#crop)" sin embargo no será corregido para manejar estos casos especiales raros, ya que hacerlo impediría su uso en otros casos, como los que se ejemplifican más abajo.
Si esto es un problema para ti, sanea los desplazamientos de página de la imagen antes de recortar usando "[+repage](https://imagemagick.org/command-line-options/#repage)" para eliminar el lienzo virtual antes de intentar generar las imágenes de mosaico._
---|---
Como forma alternativa de dividir imágenes en filas separadas, mira el script especial "[divide_vert](../static/img/scripts/divide_vert)". Este programa te permitirá dividir una imagen según 'huecos' horizontales de un solo color sólido. Por ejemplo, si se le da una imagen de texto simple, la dividirá en imágenes alternas de 'líneas' y 'huecos'. Una opción simple te permite eliminar esos huecos.
Cuadrantes, cortar alrededor de un solo punto
Como cualquiera de los números de tamaño del recorte que faltan, se reemplazan con el tamaño del lienzo de imagen de la imagen que estás recortando. Esto debería, en la mayoría de los casos, resultar en que la totalidad de la imagen en esa dimensión se convierta en parte del resultado del recorte. Esto permite, con un uso cauteloso de los argumentos, la capacidad de recortar una imagen en cuartos alrededor de un punto específico (con ese píxel específico colocado como el píxel superior derecho de la imagen del cuadrante inferior izquierdo). No necesitas saber lo grande que es la imagen para hacer esto. Por ejemplo, aquí recorto la imagen en cuadrantes alrededor del punto 30,40
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 30x40+0+0 quadrant_tl.gif
magick paged.gif -crop 0x40+30+0 quadrant_tr.gif
magick paged.gif -crop 30x0+0+40 quadrant_bl.gif
magick paged.gif -crop +30+40 quadrant_br.gif
Por supuesto, si el punto alrededor del cual estabas recortando falla la imagen real, entonces dos o incluso tres de las imágenes de cuadrante resultantes serán las imágenes especiales de error de recorte fallido.
Usar desplazamientos negativos, eliminar el borde inferior o izquierdo
No hay ninguna razón por la que no puedas usar un desplazamiento negativo con "[-crop](https://imagemagick.org/command-line-options/#crop)". De hecho, a veces puede tener beneficios muy concretos. Por ejemplo, tomemos nuestra imagen rose paginada y recortémosla progresivamente con desplazamientos negativos cada vez mayores. No suministraremos un tamaño de imagen al argumento de "[-crop](https://imagemagick.org/command-line-options/#crop)", así que por defecto tomará el tamaño del lienzo de la imagen.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop -10-10 neg_offset_1.gif
magick paged.gif -crop -20-20 neg_offset_2.gif
magick paged.gif -crop -30-30 neg_offset_3.gif
magick paged.gif -crop -40-40 neg_offset_4.gif
magick paged.gif -crop -50-50 neg_offset_5.gif
Como puedes ver, disminuir constantemente el desplazamiento a un valor negativo mayor resulta lentamente en que los bordes inferior y derecho sean 'cortados', con el último ejemplo casi fallando la imagen real. Si lleváramos esto un paso más allá, se generaría una Imagen Fallida. Es un poco como usar un operador "[-chop](https://imagemagick.org/command-line-options/#chop)" pero sin un ajuste "[-gravity](https://imagemagick.org/command-line-options/#gravity)". Consulta Cortar, eliminando bordes. Por supuesto, al usar "[-crop](https://imagemagick.org/command-line-options/#crop)" puede que necesites usar un operador "[+repage](https://imagemagick.org/command-line-options/#repage)" para ajustar la información de lienzo/página, mientras que un "[-chop](https://imagemagick.org/command-line-options/#chop)" realiza tal ajuste automáticamente. Así es la vida.
Recortar en divisiones de tamaño aproximadamente igual
El mayor problema con el Recorte en mosaico es que solo puedes definir el tamaño final de cada mosaico. Esto funciona muy bien cuando el tamaño de la imagen es un múltiplo exacto del tamaño de mosaico deseado, pero como has visto, si este no es el caso, puedes terminar con mosaicos 'cortos' en los bordes derecho e inferior. Por ejemplo, dividamos de nuevo la imagen rose incorporada, pero intentemos dividirla en mosaicos de 3x3. La imagen original es de 70x46 píxeles, así que dividida entre 3 hace que cada mosaico sea de 23x15 píxeles...
magick rose: -crop 23x15 +repage +adjoin rose_23x15_%02d.gif
Bueno, como puedes ver, esto no funcionó, porque la imagen rose no se puede dividir exactamente en 3 mosaicos de igual tamaño. En este caso terminas con un mosaico 'corto' de 1 píxel. Incluso si expandes el tamaño del mosaico a 24x16 píxeles, igual terminarás con un mosaico que es 2 píxeles 'más corto' que los demás mosaicos. Esta situación empeora a medida que el número de mosaicos deseado aumenta. Por ejemplo, intenta subdividir una longitud de 100 en 30 mosaicos. Es imposible. O bien usas una longitud de 3 y obtienes 34 mosaicos, o de 4 y obtienes 25 mosaicos. ¡Obtener exactamente 30 mosaicos de igual tamaño es imposible! A partir de IM v6.5.8-9 ahora puedes añadir la bandera especial '@' al argumento de "[-crop](https://imagemagick.org/command-line-options/#crop)". Esta bandera le indica al operador "[-crop](https://imagemagick.org/command-line-options/#crop)" que haga lo mejor posible para dividir la imagen equitativamente en el número de mosaicos dado. Por ejemplo...
magick rose: -crop 3x3@ +repage +adjoin rose_3x3@_%d.gif
El resultado es que la imagen se dividió en mosaicos que tienen tamaños ligeramente diferentes. ¡Sin embargo, el tamaño de los mosaicos diferirá en 1 píxel como máximo! ¡Compruébalo! Como ventaja adicional, también puedes subdividir la imagen de modo que cada mosaico se 'superponga' a sus vecinos. Esto lo haces no solo usando una bandera '@' sino también especificando el número de píxeles de superposición que deseas. Por ejemplo, dividamos la rose en cuartos pero con una superposición de 20 píxeles.
magick rose: -crop 2x2+20+20@ +repage +adjoin rose_2x2+20+20@_%d.gif
¡De nuevo, todas las piezas solo diferirán en tamaño en un píxel como máximo! Aunque en este caso las imágenes resultantes son del mismo tamaño, ya que la rose se puede dividir entre 2 de forma exacta. Eso, sin embargo, no sería el caso si la superposición o la imagen tuvieran un tamaño impar. En ese caso, el elemento más grande quedaría a lo largo de los bordes superior e izquierdo. ¡Con tres mosaicos, sin embargo, el elemento más grande (o más pequeño) se colocaría en el medio! ¡Incluso puedes usar una superposición negativa para 'saltar' exactamente esa cantidad de píxeles entre mosaicos! Exactamente cómo debes aplicar el operador depende de qué píxeles exactamente quieres 'superponer', o 'saltar'. Y eso depende de las características de 'borde' de la imagen (ver Separar imágenes en mosaico espaciadas más abajo). Como con cualquier uso del operador "[-crop](https://imagemagick.org/command-line-options/#crop)", se recomienda usar un "[+repage](https://imagemagick.org/command-line-options/#repage) para eliminar el desplazamiento de 'página' si no se desea. Pero la información de desplazamiento de la imagen recortada puede ser muy útil, por lo que se preserva. Puedes, por ejemplo, usarla para nombrar los archivos de salida, o para averiguar el tamaño y las ubicaciones de los mosaicos que IM calculó. Ten en cuenta que el recorte en mosaico de igual tamaño es la única situación en la que el operador "[-crop](https://imagemagick.org/command-line-options/#crop)" ignora el lienzo virtual real de la imagen al determinar qué parte de la imagen se recorta. Es decir, los cálculos para el recorte en mosaico se basan en el tamaño real de la imagen en lugar del tamaño del lienzo virtual. Aun así, los desplazamientos finales de los mosaicos seguirán siendo relativos al lienzo virtual original. Esta opción de recorte también puede usarse como alternativa al Operador Afeitar (Shave) para imágenes 'paginadas'. |
Antes de la versión de IM v6.6.1-0, el recorte en mosaico de igual tamaño para imágenes con un desplazamiento de lienzo virtual estaba roto. |
|---|---|
Separar imágenes en mosaico espaciadas
A menudo tienes una imagen que tiene mosaicos de tamaño fijo que están separados por una cantidad fija de espacio. El nuevo operador de recorte con bandera '@' te permitirá recortar esos mosaicos más fácilmente, ya sea incluyendo o saltando el espacio circundante. El principal problema, sin embargo, es que mientras las imágenes de 'mosaico' tienen una cantidad fija de espacio a su alrededor, la cantidad de espacio alrededor del borde normalmente no es tan fija. Esto produce tres estilos básicos de características de borde para un conjunto de imágenes 'espaciadas', y cada tipo necesita ser manejado de forma ligeramente diferente. Mosaicos montados (Montaged Tiles) Aquí las imágenes originales simplemente recibieron un borde de tamaño fijo antes de ser unidas. El resultado es que siempre tendrás un número par de píxeles de espaciado entre mosaicos. Más importante aún, el 'espaciado de borde' es exactamente la mitad del espaciado que se colocó entre los mosaicos. Esto es de hecho cómo "[montage](montage.html)" espacia las 'celdas' del mosaico, y fue usando este comando que se generó la imagen mostrada más abajo. Como las imágenes simplemente fueron unidas en mosaico, puedes usar ya sea un Recorte en mosaico normal (si conoces el tamaño del mosaico), o usar Recorte de igual tamaño (si conoces el número de mosaicos), para separar las subimágenes y el borde circundante. Básicamente no hay superposición entre los mosaicos, y un simple Operador Afeitar (Shave), puede usarse luego para eliminar ese borde de los mosaicos resultantes.
magick montage.gif -crop 5x1@ +repage +adjoin montage_%d.gif
magick montage_?.gif -shave 3x3 montage-3_%d.gif
Mismo espaciado alrededor del borde Aquí las subimágenes no solo fueron 'espaciadas' por 6 píxeles, sino que también tienen un espaciado de 6 píxeles alrededor del borde, lo que hace que se vea bastante pulcro y ordenado. Esto se maneja usando el Recorte de igual tamaño predeterminado con la cantidad apropiada de 'superposición' de píxeles. Por ejemplo...
magick edged.gif -crop 5x1+6+6@ +repage +adjoin edged+6_%d.gif
Observa cómo el operador separó las imágenes de modo que permanecen del mismo tamaño, pero con una superposición de 6 píxeles. Esto es específicamente para lo que fue diseñado. Al usar un desplazamiento negativo, le indicas a IM que el área superpuesta (las partes de espaciado) no debe incluirse en los resultados finales.
magick edged.gif -crop 5x1-6-6@ +repage +adjoin edged-6_%d.gif
Si fuera a ir más allá y restar más píxeles, incluso puedo recortar parte del borde blanco de los números anteriores.
magick edged.gif -crop 5x1-8-8@ +repage +adjoin edged-8_%d.gif
Incluso puedes usar esto como método alternativo al Operador Afeitar (Shave), simplemente especificando un recorte de 1 mosaico...
magick edged+6_0.gif -crop 1x1-6-6@ +repage tile-shave.gif
Mosaicos simplemente espaciados Las imágenes en mosaico espaciadas más simples no tienen espaciado de borde, o han tenido ese espaciado de borde Recortado (Trim) de la imagen. Sin embargo, para que esto se maneje, necesitas indicarle a IM de esta situación especial, incluyendo AMBAS banderas '@' y '!'.
magick spaced.gif -crop 5x1+6+6@\! +repage +adjoin spaced+6_%d.gif
Observa que las imágenes en los bordes de esta subdivisión son ligeramente más cortas que las imágenes del medio. Por eso este 'modo' especial de operación NO es el predeterminado, aunque sea en realidad más simple que la categoría anterior de mosaicos espaciados. También nota que al usar ambas banderas '@' y '!', un recorte de un solo mosaico (verticalmente en este caso) no tiene ningún efecto, ya que tanto la parte superior como la inferior del mosaico son 'bordes', y por tanto no tienen 'espacio de borde' que eliminar. De nuevo, usando un valor negativo para la superposición, puedes indicarle a IM que no incluya el área superpuesta (de espaciado) en los resultados del recorte en mosaico.
magick spaced.gif -crop 5x1-6-6@\! +repage +adjoin spaced-6_%d.gif
| El carácter '!' tiene un significado especial para algunos shells de UNIX, como "csh", y debe escaparse con una barra invertida, incluso cuando se coloca entre comillas.
---|---
Con estas fórmulas ahora deberías ser capaz de recortar en mosaico imágenes que forman una rejilla, incluso cuando las imágenes se superponen, o están espaciadas. Incluso si el problema específico que tienes no encaja exactamente en uno de los casos anteriores, deberías ser capaz de añadir o eliminar píxeles de borde apropiadamente de modo que la imagen sí encaje en una de las categorías anteriores de imágenes espaciadas.
Añadir/Eliminar bordes de imagen
Borde, añadir espacio alrededor de la imagen
A menudo simplemente quieres añadir un poco de espacio de trabajo alrededor del borde de una imagen, pero no quieres necesitar o depender de conocer el tamaño de una imagen para hacerlo. Ahora bien, hay muchas formas de añadir espacio extra a una imagen, fuera de las adiciones directas de espacio, incluyendo anexar imágenes o etiquetas en blanco, componer superposiciones 'Src', o incluso simplemente posicionar la imagen en un lienzo más grande. Pero estos métodos normalmente necesitan al menos alguna idea de lo grande que es realmente la imagen con la que estás trabajando. Una de las formas más simples de añadir espacio a una imagen es la operación "[-border](https://imagemagick.org/command-line-options/#border)". El color del espacio añadido es el ajuste "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Aquí hay algunos ejemplos sencillos...
magick rose: -bordercolor SkyBlue -border 10x10 border.gif
magick rose: -border 15x6 border_default.gif
magick rose: -bordercolor LimeGreen -border 10x0 border_sides.gif
magick rose: -bordercolor Tomato -border 0x10 border_topbot.gif
magick rose: -alpha set -bordercolor none -border 10 border_none.gif
Observa la última imagen de ejemplo anterior. El color del borde se estableció en el color transparente "none", pero para que esto funcione como se espera necesitábamos asegurarnos de que la imagen contuviera realmente un canal 'matte' o 'alfa'. También nota que si los tamaños del borde vertical y horizontal son iguales, puedes omitir el segundo número en el borde, usando solo un único número. |
Como se muestra arriba, el color predeterminado usado por el operador "[-border](https://imagemagick.org/command-line-options/#border)" es un gris claro, ya que coincide muy bien con el color de página gris predeterminado de las páginas web en la WWW. |
|---|---|
| Puedes especificar bordes como un porcentaje del tamaño de la imagen... |
magick rose: -border 10%x10% border_percent.jpg
![[IM Output]](../static/img/crop/border_percent.jpg)
Internamente lo que realmente ocurre es que "[-border](https://imagemagick.org/command-line-options/#border)" crea una nueva imagen del tamaño correcto, luego superpone la imagen de origen original sobre este nuevo fondo. Esto en sí mismo es una operación muy útil en ImageMagick, para establecer el fondo de imágenes transparentes y semitransparentes. Es decir, la operación aparentemente inútil "-border 0" es, en IM versión 6, una muy útil. Por ejemplo...
magick star.gif -bordercolor LimeGreen -border 0 star_background.gif
| Por supuesto, hay muchas otras formas de Eliminar la transparencia alfa. | El hecho de que añadir un borde a imágenes con transparencia también rellene por defecto el fondo transparente de la imagen, ha sido motivo de cierto debate entre los usuarios de IM y el equipo de desarrollo. Un resumen de este debate se da enBorde, marco y uso de BorderColor. |
|---|---|
Borde y composición alfa
La superposición de la imagen sobre el lienzo de bordercolor está controlada por el ajuste "[-compose](https://imagemagick.org/command-line-options/#compose)", que por defecto está establecido en composición alfa '[Over](compose.html#over)'. Si se establece en algún otro ajuste, la operación "[-border](https://imagemagick.org/command-line-options/#border)" puede producir resultados inesperados. Por ejemplo, aquí están algunos de los usos más interesantes de "[-compose](https://imagemagick.org/command-line-options/#compose)" con el operador de imagen "[-border](https://imagemagick.org/command-line-options/#border)", cuando se aplica a una imagen que contiene algunas áreas transparentes.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -border 5 {_result_}
La elección entre usar 'Over' y 'Copy' esencialmente decide si quieres preservar la transparencia en la imagen o no. Por ejemplo, aquí está la misma imagen 'star' con transparencia, pero esta vez el borde se añadió sin destruir la transparencia de la imagen. |
magick star.gif -bordercolor LimeGreen -compose Copy \
-border 5 star_border_copy.gif
![[IM Output]](../static/img/crop/star_border_copy.gif)
La composición '[Src](compose.html#src)' añadirá un borde transparente a una imagen (si tiene un canal alfa), independientemente del ajuste actual de "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Básicamente, el lienzo de fondo que "[-border](https://imagemagick.org/command-line-options/#border)" generó se ignora. El '[Dst](compose.html#dst)' puede no parecer muy útil, pero puede usarse para generar un lienzo del mismo tamaño (o un poco más grande) que la imagen original. La imagen original solo se usa para determinar el tamaño final del lienzo. Para más ejemplos, consulta Lienzos dimensionados según una imagen existente. Para más información sobre los diversos métodos de "[-compose](https://imagemagick.org/command-line-options/#compose)", consulta los Ejemplos de composición alfa.
Borde y lienzo virtual
Cuando "[-border](https://imagemagick.org/command-line-options/#border)" se aplica a una imagen que contiene un lienzo virtual, seguirá añadiendo el borde alrededor de la imagen real sobre ese lienzo virtual, y NO alrededor de todo el lienzo.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
Observa que el tamaño del lienzo virtual también se incrementó en el doble del grosor del borde para acomodar el borde añadido. Esto, por supuesto, significa que no puedes simplemente añadir un Borde a una animación GIF típica directamente, a menos que realmente quieras identificar los subfotogramas individuales de la animación (por ejemplo, consulta el script Montaje de fotogramas de animación que usa esto como opción para 'enmarcar' las imágenes superpuestas). Si quieres añadir un borde, deberías Fusionar (Coalesce) la animación primero para eliminar cualquier Optimización de fotogramas que pueda tener primero.
Marco, añadir un borde tipo 3D
El operador "[-frame](https://imagemagick.org/command-line-options/#frame)" es muy similar a "[-border](https://imagemagick.org/command-line-options/#border)", y si miras la primera imagen de ejemplo generada abajo, descubrirás que produce exactamente el mismo resultado, excepto que usó el "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" en lugar de "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Nota que "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" todavía se usa en la generación de imágenes enmarcadas, ver más abajo. Para usar "[-frame](https://imagemagick.org/command-line-options/#frame)" correctamente necesitas suministrar cuatro argumentos al comando, en lugar de solo 2. Los argumentos extra especifican el ancho de los biseles 'exterior' e 'interior' del marco que se produce. Aquí hay algunos ejemplos de uso del operador "[-frame](https://imagemagick.org/command-line-options/#frame)" con varios ajustes.
magick rose: -frame 10x10 frame.gif
magick rose: -frame 15x6+2+2 frame_wierd.gif
magick rose: -mattecolor SkyBlue -frame 6x6+2+2 frame_blue.gif
magick rose: -mattecolor Tomato -frame 10x10+5+5 frame_red.gif
magick rose: -frame 10x10+10+0 frame_rasied.gif
magick rose: -frame 10x10+6+0 frame_rasied_part.gif
magick rose: -frame 10x10+0+6 frame_sunken_part.gif
magick rose: -frame 10x10+0+10 frame_sunken.gif
Usar múltiples operaciones de marco también puede producir estilos de enmarcado más extraños.
magick rose: -frame 10x10+3+3 frame_normal.gif
magick rose: -frame 3x3+3+0 -frame 7x7+3+0 frame_popped.gif
magick rose: -frame 7x7+0+3 -frame 3x3+0+3 frame_pressed.gif
magick rose: -frame 3x3+3+0 -frame 4x4 -frame 3x3+0+3 frame_inverted.gif
| El "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" predeterminado es un gris ligeramente más oscuro que el del ajuste predeterminado de "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Esto también le permite coincidir con el color gris predeterminado de las páginas web en la WWW (usado por navegadores antiguos como "mosaic" y "netscape". (Ver más abajo)
---|---
| Aunque "[-frame](https://imagemagick.org/command-line-options/#frame)" puede usar realmente el color "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)", también genera cuatro colores más extra a partir de esta base para usar al dibujar el marco. Es decir, probablemente se añadirán cinco colores relacionados a una imagen, no solo uno.
---|---
Con algo de esfuerzo puedes incluso reproducir una imagen enmarcada tipo "magick montage" completa con etiqueta de texto. |
magick rose: -mattecolor grey -background grey -frame 3x3+0+3 \
-gravity South -splice 0x15 -annotate 0x0 'A Red Rose' \
-frame 6x6+3+0 frame_montage.gif
![[IM Output]](../static/img/crop/frame_montage.gif)
Incluso puedes usar un "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" semitransparente para el marco "[-frame](https://imagemagick.org/command-line-options/#frame)" y luego 'subponer' un patrón interesante (como un Lienzo de plasma fractal), para producir un marco más colorido. |
magick rose: -alpha set -mattecolor '#CCC6' -frame 10x10+3+4 \
\( -size 100x100 plasma:fractal -normalize -blur 0x1 \) \
-compose DstOver -composite frame_plasma.gif
![[IM Output]](../static/img/crop/frame_plasma.gif)
Alternativamente, puedes colorear el marco por separado (generado usando un ajuste especial de composición 'Dst'), luego superponer la imagen en el marco una vez que lo tengas coloreado. Pero eso se vuelve muy complicado de verdad. Para técnicas más avanzadas de uso de marcos, consulta Técnicas de enmarcado.
Marco y composición alfa
El marco está estrechamente relacionado con el operador "[-border](https://imagemagick.org/command-line-options/#border)". No solo se dibuja un marco usando el "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)", sino que este operador también hará uso del ajuste "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" para definir el fondo sobre el que el marco se dibuja inicialmente. Ahora bien, para imágenes que no tienen transparencia, el "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" no será visible, ya que está superpuesto por la imagen misma. Pero para imágenes que sí contienen algunas áreas transparentes, el color de fondo sí se vuelve visible. |
magick star.gif -frame 6x6+2+2 star_framed.gif
![[IM Output]](../static/img/crop/star_framed.gif)
En otras palabras "[-frame](https://imagemagick.org/command-line-options/#frame)" actúa como si tomaras tu imagen y la superpusieras sobre un marco de cuadro con un fondo de color sólido. Por lo tanto, cualquier parte de tu imagen que sea transparente será reemplazada por el "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)", que por defecto es un color gris claro. | El hecho de que añadir un marco a imágenes con transparencia también rellene por defecto el fondo transparente de la imagen con el bordercolor ha causado cierto debate entre los usuarios de IM y el equipo de desarrollo. Un resumen de este debate se da enBorde, marco y uso de BorderColor.
---|---
Si quieres preservar la transparencia de la imagen, mientras la enmarcas, tienes dos soluciones. La primera es usar un "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" transparente como 'none'. |
magick star.gif -bordercolor none -frame 6x6+2+2 star_framed_none.gif
![[IM Output]](../static/img/crop/star_framed_none.gif)
La otra solución y el método preferido es asegurar que los píxeles transparentes se preserven cuando la imagen se añade al marco. Esto se hace usando un método especial de "[-compose](https://imagemagick.org/command-line-options/#compose)" llamado '[Copy](compose.html#copy)'. |
magick star.gif -compose Copy -frame 6x6+2+2 star_framed_copy.gif
![[IM Output]](../static/img/crop/star_framed_copy.gif)
| El uso de "-bordercolor" como imagen de fondo tanto para "[-border](https://imagemagick.org/command-line-options/#border)" como para "[-frame](https://imagemagick.org/command-line-options/#frame)" se añadió a IM con la versión 6.1.4. Antes de esto, el lienzo de fondo generado consistía en un lienzo negro sobre el que se dibujaba el borde o el marco.
Este uso del negro era especialmente malo para el comando "magick montage" que hace un uso intensivo de la función interna "[-frame](https://imagemagick.org/command-line-options/#frame)" en su procesamiento interno. (Ver Manejo de fondo y transparencia en Montage)
---|---
Como puedes ver, el operador "[-frame](https://imagemagick.org/command-line-options/#frame)", al igual que "[-border](https://imagemagick.org/command-line-options/#border)", también usa el ajuste "[-compose](https://imagemagick.org/command-line-options/#compose)" para definir cómo se superpone la imagen de origen sobre el marco de fondo.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -frame 6x6+2+2 {_result_}
El uso de un ajuste "[-compose](https://imagemagick.org/command-line-options/#compose)" de '[Copy](compose.html#copy)' se vuelve muy importante si también quieres usar el ajuste "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" en los marcos de "magick montage". Consulta Manejo de fondo y transparencia en Montage para más detalles.
Marco y lienzo virtual
Como con Borde y lienzo virtual, el marco también se aplica alrededor de la imagen real sobre ese lienzo virtual, y NO alrededor de todo el lienzo.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -frame 5x5+2+2 paged_framed.gif
Observa que el tamaño del lienzo virtual también se incrementó en el doble del grosor del borde para acomodar el marco añadido. Esto, por supuesto, significa que no puedes simplemente añadir un Marco a una animación GIF típica directamente, a menos que realmente quieras identificar los subfotogramas individuales de la animación (por ejemplo, consulta Montaje de fotogramas de animación). Si quieres añadir un borde, deberías Fusionar (Coalesce) la animación primero para eliminar cualquier Optimización de fotogramas que pueda tener primero.
Afeitar, eliminar bordes de una imagen
El inverso de los operadores "[-border](https://imagemagick.org/command-line-options/#border)" o "[-frame](https://imagemagick.org/command-line-options/#frame)", es "[-shave](https://imagemagick.org/command-line-options/#shave)", que si se le dan los mismos argumentos, eliminará el espacio añadido por estos comandos.
magick border.gif -shave 10x10 shave.gif
magick border.gif -shave 10x0 shave_sides.gif
magick border.gif -shave 0x20 shave_topbot.gif
Lo principal a tener en cuenta sobre estos tres operadores es que añaden y eliminan espacio en lados opuestos de las imágenes, no solo en un lado, o en lados adyacentes. Si quieres eliminar solo un borde de una imagen, entonces tendrás que usar el operador "[-chop](https://imagemagick.org/command-line-options/#chop)" en su lugar. (Ver los Ejemplos de Chop más abajo). Como antes, todos los operadores "[-border](https://imagemagick.org/command-line-options/#border)", "[-frame](https://imagemagick.org/command-line-options/#frame)", y "[-shave](https://imagemagick.org/command-line-options/#shave)", solo afectan a la imagen real sobre el lienzo virtual y no al lienzo virtual en sí.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
magick paged_border.gif -frame 5x5+2+2 paged_frame.gif
magick paged_frame.gif -shave 10x10 paged_shave.gif
Una alternativa a usar shave es usar el nuevo operador de Recorte en mosaico de igual tamaño. La ventaja de este operador es que, a diferencia de "[-shave](https://imagemagick.org/command-line-options/#shave), no modificará el tamaño del lienzo de la imagen resultante.
magick paged_frame.gif -crop 1x1-10-10@ paged_tile_shave.gif
| Antes de la versión de IM v6.6.1-0, el recorte en mosaico de igual tamaño para imágenes con un desplazamiento de lienzo (como el anterior) estaba roto.
---|---
Extender, ajuste directo del tamaño de la imagen
Tras algunas discusiones, se añadió a IM versión 6.2.4 un operador para ajustar directamente el tamaño final de una imagen. El operador "[-extent](https://imagemagick.org/command-line-options/#extent)". Si el tamaño de la imagen aumenta, se añadirá espacio a los bordes derecho o inferior de la imagen. Si disminuye, los datos de la imagen simplemente se descartan o se recortan para ajustarse al nuevo tamaño de imagen. En ambos casos, el área superior izquierda de la imagen probablemente permanecerá inalterada.
magick rose: -background skyblue -extent 100x60 extent_enlarge.gif
magick rose: -background skyblue -extent 40x40 extent_shrink.gif
magick rose: -background skyblue -extent 100x40 extent_wider.gif
magick rose: -background skyblue -extent 40x60 extent_taller.gif
Como puedes ver, rellenará cualquier área nueva con el color "[-background](https://imagemagick.org/command-line-options/#background)" de cualquier área nueva añadida a la imagen. |
Antes de la versión de IM v6.3.2, "[-extent](https://imagemagick.org/command-line-options/#extent)" simplemente limpiaba la memoria de cualquier área nueva a cero, o negro puro. No rellenaba las áreas con el color "[-background](https://imagemagick.org/command-line-options/#background)". |
|---|---|
También después de IM v6.3.2, "[-extent](https://imagemagick.org/command-line-options/#extent)" usará la "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para definir dónde se posicionan las áreas añadidas/eliminadas en relación a la imagen original. |
magick rose: -gravity north -extent 100x80 extent_north.gif
magick rose: -gravity south -extent 100x80 extent_south.gif
magick rose: -gravity east -extent 100x80 extent_east.gif
magick rose: -gravity west -extent 100x80 extent_west.gif
magick rose: -gravity center -extent 100x80 extent_center.gif
magick rose: -gravity center -extent 40x80 extent_center2.gif
El último ejemplo anterior muestra que extent también puede hacer recortes centrados, pero sin necesidad de un "[-repage](https://imagemagick.org/command-line-options/#repage)", aunque sí 'aplana' la imagen con el color actual de "[-background](https://imagemagick.org/command-line-options/#background)". Incluso puedes usar desplazamientos, lo que básicamente significa que el Operador Extender (Extent) es simplemente un Recorte sencillo con relleno de fondo, independientemente de la posición. |
magick rose: -background skyblue -extent 100x100-15-25 extent.png
![[IM Output]](../static/img/crop/extent.png)
Esta capacidad de recortar y extender una imagen según la gravedad hace que el operador sea perfecto para rellenar o recortar una imagen de modo que encaje en un área de tamaño específico, por ejemplo, consulta Rellenar/Ajustar una miniatura para que encaje. Ten en cuenta que "[-extent](https://imagemagick.org/command-line-options/#extent)" funciona usando la misma técnica de 'superposición' que usan tanto el operador Borde como Marco. Por lo tanto, por defecto, usarlo con una imagen que contiene transparencia reemplazará la transparencia con el color actual de "[-background](https://imagemagick.org/command-line-options/#background)". |
magick star.gif -background LimeGreen -extent 80x80-10-10 star_extent.gif
![[IM Output]](../static/img/crop/star_extent.gif)
De nuevo, la solución a esto es establecer un método "[-compose](https://imagemagick.org/command-line-options/#compose)" apropiado, o establecer el color "[-background](https://imagemagick.org/command-line-options/#background)" en 'None'.
Añadir/Eliminar filas, columnas y bordes
Empalmar, añadir filas, columnas y bordes
El operador "[-splice](https://imagemagick.org/command-line-options/#splice)" es nuevo en IM versión 6, ver Splice, ejemplo de la creación de un nuevo operador de imagen. Básicamente proporciona la muy necesaria capacidad de añadir una fila, columna de espacio en el medio o en un borde de una imagen. El color del espacio insertado proviene del ajuste de color "[-background](https://imagemagick.org/command-line-options/#background)".
magick rose: -background blue -splice 20x10+40+30 splice.gif
magick rose: -background blue -splice 20x0+40+0 splice_column.gif
magick rose: -background blue -splice 0x10+0+30 splice_row.gif
magick rose: -background blue -splice 20x10 splice_topleft.gif
| Si el color de fondo no está establecido, IM intentará determinar este valor a partir de la imagen misma. Esto significa que para algunas imágenes puede ser blanco (el predeterminado normal), en otras puede ser negro, o para el formato GIF podría ser cualquier color de fondo que estuviera establecido cuando esa imagen se guardó. Lo que esto básicamente significa es que si no estableces el color "[-background](https://imagemagick.org/command-line-options/#background)", su valor predeterminado depende de la imagen, y podrías obtener prácticamente cualquier cosa. Establece siempre "[-background](https://imagemagick.org/command-line-options/#background)", antes de usar un operador que lo use.
---|---
Ahora bien, aunque añadir una fila y columna a una imagen es bueno, el operador "[-splice](https://imagemagick.org/command-line-options/#splice)" es ideal para añadir espacio a solo un borde de una imagen. Qué borde se determina usando la opción "[-gravity](https://imagemagick.org/command-line-options/#gravity)" y el ajuste de geometría del splice.
magick rose: -background blue -splice 0x10 splice_top.gif
magick rose: -gravity south \
-background blue -splice 0x10 splice_bottom.gif
magick rose: -background blue -splice 20x0 splice_left.gif
magick rose: -gravity east \
-background blue -splice 20x0 splice_right.gif
magick rose: -gravity southeast \
-background blue -splice 20x10 splice_botright.gif
Uno de los usos más comunes de splice es añadir espacio en el que dibujar una etiqueta. (Ver Etiquetar imágenes) |
magick rose: -gravity South -background LimeGreen -splice 0x15 \
-annotate 0x0 'Rose' splice_label.gif
Cortar, eliminar filas, columnas y bordes
El inverso natural de "[-splice](https://imagemagick.org/command-line-options/#splice)" es el operador mucho más antiguo "[-chop](https://imagemagick.org/command-line-options/#chop)". Dado el mismo argumento que "[-splice](https://imagemagick.org/command-line-options/#splice)" y el mismo ajuste "[-gravity](https://imagemagick.org/command-line-options/#gravity)", "[-chop](https://imagemagick.org/command-line-options/#chop)" restaurará la imagen a su forma original.
magick splice.gif -chop 20x10+40+30 splice_chop.gif
magick splice_chop.gif -chop 20x10+30+20 chop.gif
magick chop.gif -background grey \
-splice 20x10+30+20 chop_splice.gif
Continué procesando el último ejemplo para mostrar cómo puedes invertir el orden de "[-splice](https://imagemagick.org/command-line-options/#splice)" y "[-chop](https://imagemagick.org/command-line-options/#chop)" para 'limpiar' una fila o columna (o ambas) del medio de una imagen sin usar dibujos ni superposiciones. Chop se usa más comúnmente para cortar un solo borde de una imagen, usando la gravedad para seleccionar ese borde. Por ejemplo...
magick frame_red.gif -chop 0x10 chop_top.gif
magick frame_red.gif -chop 10x0 chop_left.gif
magick frame_red.gif -gravity East -chop 10x0 chop_right.gif
magick frame_red.gif -gravity South -chop 0x10 chop_bottom.gif
Como alternativa a usar "[-chop](https://imagemagick.org/command-line-options/#chop)" para eliminar un solo borde, de hecho puedes usar el operador más universal "[-crop](https://imagemagick.org/command-line-options/#crop)" en su lugar. Esto no requiere el uso de "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para obtener los bordes inferior o derecho, sin embargo, sí requiere que hagas un "[+repage](https://imagemagick.org/command-line-options/#repage)" del lienzo de la imagen después.
magick frame_red.gif -crop +0+10 +repage crop_edge_top.gif
magick frame_red.gif -crop +10+0 +repage crop_edge_left.gif
magick frame_red.gif -crop -10+0 +repage crop_edge_right.gif
magick frame_red.gif -crop +0-10 +repage crop_edge_bottom.gif
Esto se basa en el hecho de que si a "[-crop](https://imagemagick.org/command-line-options/#crop)" no se le da un área de imagen para eliminar, por defecto tomará el tamaño del lienzo de la imagen (no la imagen real sino el lienzo virtual de la imagen). Esto significa que puedes (para imágenes simples) eliminar bordes de imagen simplemente desplazando el área de recorte que se está cortando. El método de usar "[-crop](https://imagemagick.org/command-line-options/#crop)" para 'cortar' bordes de imagen fue descubierto y publicado por Don Sheythe, y tras alguna discusión se consideró una 'característica' de IM, y por tanto se incluye aquí.
Técnicas avanzadas de recorte
Recortar a una relación de aspecto dada
Puedes recortar imágenes para que se ajusten a una relación de aspecto específica, pero es complicado y usa algunas técnicas matemáticas caseras (DIY). Por ejemplo, puedes escribir un script que haga los cálculos y luego hacer el Recorte. O en IM v6 puedes hacer cálculos con el Viewport de distorsión (Distort), para extraer la parte deseada de la imagen durante una Distorsión No-Op, como se describe en Recorte cuadrado centrado. Sin embargo, en ImageMagick versión 7, ahora puedes hacer cálculos matemáticos directamente en comandos como "[-crop](https://imagemagick.org/command-line-options/#crop)" y "[-extent](https://imagemagick.org/command-line-options/#extent)", evitando así la necesidad de hacer un mal uso de "[-distort](https://imagemagick.org/command-line-options/#distort)". Esto se discute en detalle en el Foro de desarrolladores de IM Recortar a relación de aspecto.
Recortar (Trim), el operador de 'auto-recorte'
El operador "[-trim](https://imagemagick.org/command-line-options/#trim)" es un pariente muy cercano del muy versátil operador "[-crop](https://imagemagick.org/command-line-options/#crop)" discutido arriba. Sin embargo, en lugar de suministrar un argumento, este operador intenta eliminar cualquier borde o margen de una imagen que no cambie de color o transparencia. En otras palabras, elimina las partes 'aburridas' que rodean una imagen. |
Ten en cuenta que en ImageMagick versión 5 y anteriores, una operación de auto-recorte se conseguía usando un argumento '0x0' para el operador "[-crop](https://imagemagick.org/command-line-options/#crop)". Esto ya no es así, ya que los argumentos de tamaño 'cero' en crop ahora denotan 'infinito' o 'hasta el límite del tamaño de la imagen'. Por lo tanto, un argumento '0x0' para crop ahora efectivamente significa recortar la imagen en mosaicos, del tamaño del lienzo de imagen original. En otras palabras, con IM v6, el resultado será el mismo que la imagen original, o un 'no-op'. |
|---|---|
| Por ejemplo, aquí tomamos el logo de IM, que redimensionamos, y 'recortamos' (trim) o 'auto-recortamos' todo el espacio extra circundante del logo. |
magick logo: -resize 30% -trim trim.gif
Dos cosas deben notarse de lo anterior. Primero, al igual que "[-crop](https://imagemagick.org/command-line-options/#crop)", "[-trim](https://imagemagick.org/command-line-options/#trim)" retendrá el tamaño del lienzo de la imagen. Esto significa que los argumentos numéricos del trim pueden extraerse, para permitir un procesamiento posterior, o el ajuste del procesamiento de la imagen (ver Recortar imágenes "ruidosas" para un ejemplo de cómo hacer esto). ![[IM Output]](../static/img/crop/trim.gif)
Aquí recortamos la imagen, pero solo para listar el resultado de qué parte de la imagen fue recortada, no la imagen recortada real.
magick logo: -resize 30% -trim info:-
Sin embargo, si no te importa esta información, simplemente deséchala restableciendo la información de página de la imagen, ya sea usando un operador "[+repage](https://imagemagick.org/command-line-options/#repage)", o guardando en un formato que no guarde información de lienzo (como el formato JPEG). Aquí hacemos ambas cosas, para dejar claro que estamos desechando la información de lienzo. |
magick logo: -resize 30% -trim +repage trim_repage.jpg
![[IM Output]](../static/img/crop/trim_repage.jpg)
La segunda cosa a notar es que trim no recortó realmente hasta el borde mismo de la imagen final. Esto es especialmente notable en la esquina inferior derecha de la imagen del logo, donde podemos ver un hueco distintivo entre el pie y su sombra y el borde recortado. En esta esquina, los colores aquí se volvieron numéricamente diferentes al color de fondo de la imagen. Así que aunque no podamos ver ningún cambio real en la imagen, el operador "[-trim](https://imagemagick.org/command-line-options/#trim)" ve un cambio de color menor, por lo que no recortó tan cerca de la imagen como habríamos esperado. Si la imagen es toda de un solo color, entonces "[-trim](https://imagemagick.org/command-line-options/#trim)" recortará la imagen hasta una Imagen Fallida mínima de un solo píxel transparente. Esto es lógico y previene problemas más serios si la imagen se dejara tal cual.
Recortar con un color específico
Uno de los problemas más preocupantes con "[-trim](https://imagemagick.org/command-line-options/#trim)", especialmente en scripts de procesamiento de imagen automatizados, es que trim puede ser un poco impredecible. No se limita, por ejemplo, a un solo color específico, ni siquiera a un color. Por lo tanto, podrías recortar fácilmente mucho más de lo que esperas. Por ejemplo, hagamos un recorte simple de una imagen simple de colores en franjas.
magick -size 32x32 xc:red xc:green xc:blue +append stripes.gif
magick stripes.gif -trim +repage stripes_trimmed.gif
Como puedes ver, "[-trim](https://imagemagick.org/command-line-options/#trim)" recortó no solo un color sino dos colores. En un script automático, esto puede ser muy malo y producir resultados inesperados. Si sabes qué color quieres recortar de una imagen, entonces la mejor manera es añadir un pequeño "[-border](https://imagemagick.org/command-line-options/#border)" de un píxel de ancho de ese color a la imagen. Tomemos 'red' (rojo) en este caso.
magick stripes.gif -bordercolor red -border 1x1 \
-trim +repage stripes_trim_red.gif
magick stripes.gif -bordercolor red -border 1x1 -trim \
stripes_trim_red_shifted.gif
![[IM Output]](../static/img/crop/stripes_trim_red_shifted.gif)
Así que intentemos corregir el tamaño del lienzo virtual (restar _border_width_ x2 ) y el desplazamiento (restar _border_width_) al recortar un color específico. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-set page '%[fx:page.width-2]x%[fx:page.height-2]+%[fx:page.x-1]+%[fx:page.y-1]' \
stripes_trim_red_fix.gif
![[IM Output]](../static/img/crop/stripes_trim_red_fix.gif)
Ten en cuenta que estoy restaurando el tamaño del lienzo y el desplazamiento de la imagen original, que el Operador Borde agrandó y desplazó en lo anterior. La operación "[-trim](https://imagemagick.org/command-line-options/#trim)" en sí misma preservó la ubicación de la imagen correctamente. Es, como puedes ver, un ajuste bastante engorroso. Alternativamente, si no te importa el tamaño del lienzo (típico en una imagen en capas), puedes usar un Repaginado relativo mucho más simple para ajustar solo la posición de la imagen sobre el lienzo agrandado. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-repage -1-1\! stripes_trim_red_fix2.gif
Recortar solo un lado de una imagen
Como viste arriba, "[-trim](https://imagemagick.org/command-line-options/#trim)" recortará tantos lados como pueda. Llegando incluso a eliminar dos colores diferentes de lados diferentes (o si se organiza muy cuidadosamente, podrían haberse eliminado cuatro colores). Esto lo hace un poco más difícil cuando quieres restringir el recorte a solo un lado. Para garantizar que solo recortemos un lado, necesitamos añadir algunas franjas de color al otro lado para proteger los otros tres lados. Aquí está el proceso paso a paso para recortar solo el lado 'izquierdo' u 'oeste' de la imagen 'border' que creamos previamente. Usé franjas mucho más gruesas de lo necesario para que puedas verlas mejor en este ejemplo. Normalmente un ancho de un solo píxel es todo lo que se necesita.
magick border.gif -gravity East \
-background white -splice 5x0 \
-background black -splice 5x0 trim_protect.gif
magick trim_protect.gif -trim +repage trim_oneside.gif
magick trim_oneside.gif -gravity East -chop 5x0 trim_west.gif
Ten en cuenta que añado franjas de dos colores diferentes. De esa manera, si uno de los colores coincide con el color de borde existente que rodea la imagen, el otro seguirá funcionando para proteger esos tres bordes. Además, solo uno de los colores también será recortado, dejando solo una franja de color que limpiar. Aquí está el recorte completo de un lado como un solo comando, pero para recortar el borde superior (las franjas se añaden al borde inferior o 'Sur').
![[IM Output]](../static/img/crop/trim_west.gif)
|
magick border.gif -gravity South \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_north.gif
![[IM Output]](../static/img/crop/trim_north.gif)
Y aquí está un recorte de solo el borde inferior. Por supuesto, el ajuste "[-gravity](https://imagemagick.org/command-line-options/#gravity)" usado en el ejemplo anterior no es necesario y el ajuste por defecto es 'North-West' (noroeste) para las imágenes. |
magick border.gif \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_south.gif
![[IM Output]](../static/img/crop/trim_south.gif)
Por supuesto, como antes con el borde, empalmar colores extra a una imagen cambiará de nuevo el tamaño del lienzo virtual de la imagen y el desplazamiento de las imágenes en capa. De nuevo, esto puede corregirse usando los mismos métodos que mostramos en la sección anterior, pero depende de qué lado añadiste los colores extra para preservar esos bordes.
Recortar con selección de color difusa -- Imágenes JPEG de baja calidad
Como JPEG tiene 'pérdida', los colores en la imagen generalmente no son un solo color sino una banda de colores diferentes que varía ligeramente. Debido a esto, "[-trim](https://imagemagick.org/command-line-options/#trim)" a menudo fallará para imágenes JPEG o del mundo real. FUTURO: Ejemplo de fallo aquí Por lo tanto, necesitas indicarle a ImageMagick que los colores que no son exactamente iguales, pero que están razonablemente cerca, deben tratarse como iguales. Añadir un ajuste "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" muy pequeño hará esto.
magick image.jpg -fuzz 1% -trim +repage image_fuzzy_trim.jpg
También es muy buena idea especificar el color concreto al que quieres que esa difusión sea relativa. Esto puede añadirse agregando específicamente un borde de ese color usando el operador "[-border](https://imagemagick.org/command-line-options/#border)". El borde, por supuesto, siempre coincidirá con el color que se va a recortar, así que siempre será eliminado por "[-trim](https://imagemagick.org/command-line-options/#trim)". FUTURO: Ejemplo de recorte de borde difuso aquí
Recortar imágenes 'ruidosas' -- Imágenes escaneadas
Un problema similar se enfrenta con las imágenes escaneadas, donde los escáneres a menudo producen pequeños errores de un solo píxel, causados por polvo, suciedad, ligeras variaciones en el escáner, o simplemente ruido electrónico captado por el lector. Sin embargo, los errores de píxeles en este caso son normalmente demasiado grandes para que un pequeño factor de difusión (fuzz) los supere, por lo que se necesita una técnica diferente para recortar tales imágenes. La solución más simple, aunque a menudo la menos práctica, es tomar múltiples escaneos de la misma imagen, o múltiples fotogramas en una secuencia fija de vídeo), y luego promediar los resultados para reducir la interferencia. Sin embargo, esto no eliminará las motas de polvo del escáner ni ayudará cuando solo hay una sola imagen o fotograma disponible, haciendo este método poco práctico en la mayoría de los casos. Una solución práctica es de dos pasos. Con una copia de la imagen, procésala de alguna manera para restar importancia a los errores de un solo píxel, o al polvo del escáner, mientras realzas el efecto de grandes bloques de colores muy contrastados. Luego, usando "[-trim](https://imagemagick.org/command-line-options/#trim)" en esta copia, y examinando exactamente qué hizo, puedes entonces "[-crop](https://imagemagick.org/command-line-options/#crop)" la imagen original sin modificar en la misma cantidad. Hay varios métodos para restar importancia a los errores de un solo píxel. Estos incluyen "[-blur](https://imagemagick.org/command-line-options/#blur)", "[-median](https://imagemagick.org/command-line-options/#median)", o incluso usar Operadores básicos de morfología para eliminar detalles específicos, como texto y líneas finas. El método 'blur' (desenfoque) da dos controles principales:
- El radio sigma de "
[-blur](https://imagemagick.org/command-line-options/#blur)", o el radio de convolución de "[-median](https://imagemagick.org/command-line-options/#mediam)", que determina el tamaño de las motas de polvo que quieres ignorar. Ten en cuenta que ambos valores pueden ser un número de punto flotante, por lo que tienes un control fino sobre la cantidad de desenfoque aplicada. Para más información sobre el desenfoque, consulta Desenfocar imágenes. - El segundo control es el factor de color "
[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" que controla la cantidad de cambio de color que coincide con el operador "[-trim](https://imagemagick.org/command-line-options/#trim)". Es decir, qué tan cerca de la imagen deseada quieres que llegue el recorte.
Por ejemplo, usemos una imagen "logo:" más pequeña. |
magick logo: -resize 30% noisy.jpg
En esta pequeña imagen podríamos considerar las estrellas y el título de la imagen como ruido que queremos que trim ignore. Las estrellas de arriba miden unos 5 píxeles de ancho, así que queremos usar un valor de aproximadamente el doble de eso para que trim básicamente las ignore. ![[IM Output]](../static/img/crop/noisy.jpg)
Aquí está el resultado. Ten en cuenta que en este caso no queremos una imagen, solo la información de lienzo de la imagen.
magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim info:
| _Puede que necesites comprobar el ajuste dePíxel virtual para asegurar que obtienes los 'efectos de borde' correctos con el desenfoque.
Alternativamente, puedes añadir un borde ancho del mismo color de fondo a la imagen antes de desenfocar y ajustar los resultados de desplazamiento apropiadamente. Esto puede ser mejor para obtener resultados más precisos tanto del operador "[-blur](https://imagemagick.org/command-line-options/#blur)" como de "[-trim](https://imagemagick.org/command-line-options/#trim)"._
---|---
A partir del resultado anterior podemos determinar que "[-trim](https://imagemagick.org/command-line-options/#trim)" había usado internamente un argumento "[-crop](https://imagemagick.org/command-line-options/#crop)" de '89x121+78+23'. Este es el tamaño real de la imagen recortada, y su desplazamiento sobre el lienzo virtual, y presumiblemente la ubicación del objeto principal (único) que buscamos dentro de la imagen. Esto puede entonces usarse sobre la imagen original, que no ha sido desenfocada. |
magick noisy.jpg -crop 89x121+78+23 +repage noisy_trimmed.jpg
¡Y aquí hemos recortado nuestra imagen hasta dejar solo el mago! ![[IM Output]](../static/img/crop/noisy_trimmed.jpg)
Esto puede hacerse en una sola línea, usando un poco de 'scripting de shell de UNIX' extra, y algo de formateo de los resultados de ese primer comando. |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% \
-trim -format '%wx%h%O' info:` +repage noisy_trimmed_2.jpg
Consulta Escapes de propiedad de imagen para más información sobre el ajuste "[-format](https://imagemagick.org/command-line-options/#format)" usado para controlar la salida de "[info:](files.html#info)". ![[IM Output]](../static/img/crop/noisy_trimmed_2.jpg)
| _Lo anterior usa una característica del shell de línea de comandos de UNIX para el método de 'sustitución de comandos' usando comillas invertidas '...' para insertar el argumento "[-crop](https://imagemagick.org/command-line-options/#crop)" generado en el comando "magick" exterior.
Puedes hacer esto en un Script por lotes de Windows, usando una construcción especial FOR..DO. Sigue el enlace anterior para más detalles._
---|---
Ten en cuenta que, aunque la mano del mago es completamente visible, la punta del sombrero no lo es. Este es el inconveniente de este método: ignorará puntas afiladas y detalles finos. Pero entonces eso es lo que le pedíamos que ignorara en primer lugar. El método podría mejorarse expandiendo el área recortada en una pequeña cantidad (10 píxeles en las 4 direcciones), usando algún Escape FX para hacer las matemáticas... |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-format '%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]' \
info:` +repage noisy_trimmed_3.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_3.jpg)
Si los límites calculados se expanden más allá de la imagen original, el operador de recorte lo limitará automáticamente a los límites de la imagen. En IMv7 (usando el comando "magick") puedes hacerlo todo en un solo comando, guardando el tamaño de recorte calculado en un ajuste para uso posterior. |
magick noisy.jpg \
\( +clone -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-set option:fuzzy_trim \
'%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]'\
+delete \) \
-crop %[fuzzy_trim] noisy_trimmed_4.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_4.jpg)
Otros métodos de recorte difuso son usar varios Métodos morfológicos para eliminar las partes no deseadas de la imagen, antes de recortar para encontrar los límites del área deseada en la imagen original. Un usuario, HugoRune, necesitaba recortar una imagen hasta una región de contraste muy diferente para fines de escaneo. Consulta la Discusión en los foros de IM, para más detalles.
![[IM Output]](../static/img/crop/rose.gif)
![[IM Output]](../static/img/crop/crop.gif)
![[IM Output]](../static/img/crop/crop_br.gif)
![[IM Output]](../static/img/crop/crop_tl.gif)
![[IM Output]](../static/img/crop/crop_all.gif)
![[IM Output]](../static/img/crop/crop_miss.gif)
![[IM Text]](../static/img/crop/crop_indent.txt.gif)
![[IM Text]](../static/img/crop/crop_error.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_ident.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_data.txt.gif)
![[IM Output]](../static/img/crop/paged.gif)
![[IM Output]](../static/img/crop/crop_page.gif)
![[IM Output]](../static/img/crop/crop_page_tl.gif)
![[IM Output]](../static/img/crop/crop_page_br.gif)
![[IM Output]](../static/img/crop/crop_page_all.gif)
![[IM Output]](../static/img/crop/crop_page_miss.gif)
![[IM Text]](../static/img/crop/crop_page_ident.txt.gif)
![[IM Output]](../static/img/crop/crop_area_br.png)
![[IM Output]](../static/img/crop/repage.gif)
![[IM Output]](../static/img/crop/repage_br.gif)
![[IM Output]](../static/img/crop/repage_tl.gif)
![[IM Output]](../static/img/crop/repage_all.gif)
![[IM Output]](../static/img/crop/repage_miss.gif)
![[IM Output]](../static/img/crop/crop_vp.gif)
![[IM Output]](../static/img/crop/crop_vp_br.gif)
![[IM Output]](../static/img/crop/crop_vp_tl.gif)
![[IM Output]](../static/img/crop/crop_vp_all.gif)
![[IM Output]](../static/img/crop/crop_vp_miss.gif)
![[IM Text]](../static/img/crop/crop_vp_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_0.gif)
![[IM Output]](../static/img/crop/tiles_1.gif)
![[IM Output]](../static/img/crop/tiles_2.gif)
![[IM Output]](../static/img/crop/tiles_3.gif)
![[IM Text]](../static/img/crop/tiles_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_layered.gif)
![[IM Output]](../static/img/crop/rose_tiles_00.gif)
![[IM Output]](../static/img/crop/rose_tiles_01.gif)
![[IM Output]](../static/img/crop/rose_tiles_02.gif)
![[IM Output]](../static/img/crop/rose_tiles_03.gif)
![[IM Output]](../static/img/crop/rose_tiles_04.gif)
![[IM Output]](../static/img/crop/rose_tiles_05.gif)
![[IM Output]](../static/img/crop/rose_tiles_06.gif)
![[IM Output]](../static/img/crop/rose_tiles_07.gif)
![[IM Output]](../static/img/crop/rose_tiles_08.gif)
![[IM Output]](../static/img/crop/rose_tiles_09.gif)
![[IM Output]](../static/img/crop/rose_tiles_10.gif)
![[IM Output]](../static/img/crop/rose_tiles_11.gif)
![[IM Output]](../static/img/crop/rose_rejoined.gif)
![[IM Output]](../static/img/crop/rose_tile_1_1.gif)
![[IM Output]](../static/img/crop/rose_tile_2_1.gif)
![[IM Output]](../static/img/crop/rose_tile_3_1.gif)
![[IM Output]](../static/img/crop/rose_tile_4_1.gif)
![[IM Output]](../static/img/crop/rose_tile_1_2.gif)
![[IM Output]](../static/img/crop/rose_tile_2_2.gif)
![[IM Output]](../static/img/crop/rose_tile_3_2.gif)
![[IM Output]](../static/img/crop/rose_tile_4_2.gif)
![[IM Output]](../static/img/crop/rose_tile_1_3.gif)
![[IM Output]](../static/img/crop/rose_tile_2_3.gif)
![[IM Output]](../static/img/crop/rose_tile_3_3.gif)
![[IM Output]](../static/img/crop/rose_tile_4_3.gif)
![[IM Output]](../static/img/crop/rose_30x20_00.gif)
![[IM Output]](../static/img/crop/rose_30x20_01.gif)
![[IM Output]](../static/img/crop/rose_30x20_02.gif)
![[IM Output]](../static/img/crop/rose_30x20_03.gif)
![[IM Output]](../static/img/crop/rose_30x20_04.gif)
![[IM Output]](../static/img/crop/rose_30x20_05.gif)
![[IM Output]](../static/img/crop/rose_30x20_06.gif)
![[IM Output]](../static/img/crop/rose_30x20_07.gif)
![[IM Output]](../static/img/crop/rose_30x20_08.gif)
![[IM Output]](../static/img/crop/rose_30x20_09.gif)
![[IM Output]](../static/img/crop/rose_30x20_10.gif)
![[IM Output]](../static/img/crop/rose_30x20_11.gif)
![[IM Output]](../static/img/crop/rose_30x20_12.gif)
![[IM Output]](../static/img/crop/rose_30x20_13.gif)
![[IM Output]](../static/img/crop/rose_30x20_14.gif)
![[IM Output]](../static/img/crop/rose_30x20_15.gif)
![[IM Output]](../static/img/crop/rose_ctiles_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles_3.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_3.gif)
![[IM Output]](../static/img/crop/strip_column.gif)
![[IM Output]](../static/img/crop/strip_row.gif)
![[IM Output]](../static/img/crop/strips_0.gif)
![[IM Output]](../static/img/crop/strips_1.gif)
![[IM Output]](../static/img/crop/strips_2.gif)
![[IM Output]](../static/img/crop/strips_3.gif)
![[IM Output]](../static/img/crop/quadrant_tl.gif)
![[IM Output]](../static/img/crop/quadrant_tr.gif)
![[IM Output]](../static/img/crop/quadrant_bl.gif)
![[IM Output]](../static/img/crop/quadrant_br.gif)
![[IM Output]](../static/img/crop/neg_offset_1.gif)
![[IM Output]](../static/img/crop/neg_offset_2.gif)
![[IM Output]](../static/img/crop/neg_offset_3.gif)
![[IM Output]](../static/img/crop/neg_offset_4.gif)
![[IM Output]](../static/img/crop/neg_offset_5.gif)
![[IM Output]](../static/img/crop/rose_23x15_00.gif)
![[IM Output]](../static/img/crop/rose_23x15_01.gif)
![[IM Output]](../static/img/crop/rose_23x15_02.gif)
![[IM Output]](../static/img/crop/rose_23x15_03.gif)
![[IM Output]](../static/img/crop/rose_23x15_04.gif)
![[IM Output]](../static/img/crop/rose_23x15_05.gif)
![[IM Output]](../static/img/crop/rose_23x15_06.gif)
![[IM Output]](../static/img/crop/rose_23x15_07.gif)
![[IM Output]](../static/img/crop/rose_23x15_08.gif)
![[IM Output]](../static/img/crop/rose_23x15_09.gif)
![[IM Output]](../static/img/crop/rose_23x15_10.gif)
![[IM Output]](../static/img/crop/rose_23x15_11.gif)
![[IM Output]](../static/img/crop/rose_23x15_12.gif)
![[IM Output]](../static/img/crop/rose_23x15_13.gif)
![[IM Output]](../static/img/crop/rose_23x15_14.gif)
![[IM Output]](../static/img/crop/rose_23x15_15.gif)
![[IM Output]](../static/img/crop/rose_3x3@_0.gif)
![[IM Output]](../static/img/crop/rose_3x3@_1.gif)
![[IM Output]](../static/img/crop/rose_3x3@_2.gif)
![[IM Output]](../static/img/crop/rose_3x3@_3.gif)
![[IM Output]](../static/img/crop/rose_3x3@_4.gif)
![[IM Output]](../static/img/crop/rose_3x3@_5.gif)
![[IM Output]](../static/img/crop/rose_3x3@_6.gif)
![[IM Output]](../static/img/crop/rose_3x3@_7.gif)
![[IM Output]](../static/img/crop/rose_3x3@_8.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_0.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_1.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_2.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_3.gif)
![[IM Output]](../static/img/crop/montage.gif)
![[IM Output]](../static/img/crop/montage_0.gif)
![[IM Output]](../static/img/crop/montage_1.gif)
![[IM Output]](../static/img/crop/montage_2.gif)
![[IM Output]](../static/img/crop/montage_3.gif)
![[IM Output]](../static/img/crop/montage_4.gif)
![[IM Output]](../static/img/crop/montage-3_0.gif)
![[IM Output]](../static/img/crop/montage-3_1.gif)
![[IM Output]](../static/img/crop/montage-3_2.gif)
![[IM Output]](../static/img/crop/montage-3_3.gif)
![[IM Output]](../static/img/crop/montage-3_4.gif)
![[IM Output]](../static/img/crop/edged.gif)
![[IM Output]](../static/img/crop/edged+6_0.gif)
![[IM Output]](../static/img/crop/edged+6_1.gif)
![[IM Output]](../static/img/crop/edged+6_2.gif)
![[IM Output]](../static/img/crop/edged+6_3.gif)
![[IM Output]](../static/img/crop/edged+6_4.gif)
![[IM Output]](../static/img/crop/edged-6_0.gif)
![[IM Output]](../static/img/crop/edged-6_1.gif)
![[IM Output]](../static/img/crop/edged-6_2.gif)
![[IM Output]](../static/img/crop/edged-6_3.gif)
![[IM Output]](../static/img/crop/edged-6_4.gif)
![[IM Output]](../static/img/crop/edged-8_0.gif)
![[IM Output]](../static/img/crop/edged-8_1.gif)
![[IM Output]](../static/img/crop/edged-8_2.gif)
![[IM Output]](../static/img/crop/edged-8_3.gif)
![[IM Output]](../static/img/crop/edged-8_4.gif)
![[IM Output]](../static/img/crop/tile-shave.gif)
![[IM Output]](../static/img/crop/spaced.gif)
![[IM Output]](../static/img/crop/spaced+6_0.gif)
![[IM Output]](../static/img/crop/spaced+6_1.gif)
![[IM Output]](../static/img/crop/spaced+6_2.gif)
![[IM Output]](../static/img/crop/spaced+6_3.gif)
![[IM Output]](../static/img/crop/spaced+6_4.gif)
![[IM Output]](../static/img/crop/spaced-6_0.gif)
![[IM Output]](../static/img/crop/spaced-6_1.gif)
![[IM Output]](../static/img/crop/spaced-6_2.gif)
![[IM Output]](../static/img/crop/spaced-6_3.gif)
![[IM Output]](../static/img/crop/spaced-6_4.gif)
![[IM Output]](../static/img/crop/border_default.gif)
![[IM Output]](../static/img/crop/border_sides.gif)
![[IM Output]](../static/img/crop/border_topbot.gif)
![[IM Output]](../static/img/crop/border_none.gif)
![[IM Output]](../static/img/images/star.gif)
![[IM Output]](../static/img/crop/star_background.gif)
![[IM Output]](../static/img/crop/border_compose.jpg)
![[IM Output]](../static/img/crop/paged_border.gif)
![[IM Output]](../static/img/crop/frame.gif)
![[IM Output]](../static/img/crop/frame_wierd.gif)
![[IM Output]](../static/img/crop/frame_blue.gif)
![[IM Output]](../static/img/crop/frame_red.gif)
![[IM Output]](../static/img/crop/frame_rasied.gif)
![[IM Output]](../static/img/crop/frame_rasied_part.gif)
![[IM Output]](../static/img/crop/frame_sunken_part.gif)
![[IM Output]](../static/img/crop/frame_sunken.gif)
![[IM Output]](../static/img/crop/frame_normal.gif)
![[IM Output]](../static/img/crop/frame_popped.gif)
![[IM Output]](../static/img/crop/frame_pressed.gif)
![[IM Output]](../static/img/crop/frame_inverted.gif)
![[IM Output]](../static/img/crop/frame_compose.jpg)
![[IM Output]](../static/img/crop/paged_framed.gif)
![[IM Output]](../static/img/crop/shave.gif)
![[IM Output]](../static/img/crop/shave_sides.gif)
![[IM Output]](../static/img/crop/shave_topbot.gif)
![[IM Output]](../static/img/crop/paged_frame.gif)
![[IM Output]](../static/img/crop/paged_shave.gif)
![[IM Output]](../static/img/crop/paged_tile_shave.gif)
![[IM Output]](../static/img/crop/extent_enlarge.gif)
![[IM Output]](../static/img/crop/extent_shrink.gif)
![[IM Output]](../static/img/crop/extent_wider.gif)
![[IM Output]](../static/img/crop/extent_taller.gif)
![[IM Output]](../static/img/crop/extent_north.gif)
![[IM Output]](../static/img/crop/extent_south.gif)
![[IM Output]](../static/img/crop/extent_east.gif)
![[IM Output]](../static/img/crop/extent_west.gif)
![[IM Output]](../static/img/crop/extent_center.gif)
![[IM Output]](../static/img/crop/extent_center2.gif)
![[IM Output]](../static/img/crop/splice.gif)
![[IM Output]](../static/img/crop/splice_column.gif)
![[IM Output]](../static/img/crop/splice_row.gif)
![[IM Output]](../static/img/crop/splice_topleft.gif)
![[IM Output]](../static/img/crop/splice_top.gif)
![[IM Output]](../static/img/crop/splice_bottom.gif)
![[IM Output]](../static/img/crop/splice_left.gif)
![[IM Output]](../static/img/crop/splice_right.gif)
![[IM Output]](../static/img/crop/splice_botright.gif)
![[IM Output]](../static/img/crop/splice_label.gif)
![[IM Output]](../static/img/crop/splice_chop.gif)
![[IM Output]](../static/img/crop/chop.gif)
![[IM Output]](../static/img/crop/chop_splice.gif)
![[IM Output]](../static/img/crop/chop_top.gif)
![[IM Output]](../static/img/crop/chop_left.gif)
![[IM Output]](../static/img/crop/chop_right.gif)
![[IM Output]](../static/img/crop/chop_bottom.gif)
![[IM Output]](../static/img/crop/crop_edge_top.gif)
![[IM Output]](../static/img/crop/crop_edge_left.gif)
![[IM Output]](../static/img/crop/crop_edge_right.gif)
![[IM Output]](../static/img/crop/crop_edge_bottom.gif)
![[IM Text]](../static/img/crop/trim_info.txt.gif)
![[IM Output]](../static/img/crop/stripes.gif)
![[IM Output]](../static/img/crop/stripes_trimmed.gif)
![[IM Output]](../static/img/crop/stripes_trim_red.gif)
![[IM Output]](../static/img/crop/stripes_trim_red_fix2.gif)
![[IM Text]](../static/img/crop/blur_trim_info.txt.gif)