Ya hemos visto cómo dividir horizontal y verticalmente en partes iguales una imagen, pero, ¿y si queremos hacer la dividisión únicamente en un eje?

Se lo indicaremos a crop con el porcentaje seguido de x100% si queremos que los cortes sean verticales o con 100%x seguido del porcentaje si queremos que la división sea horizontal. Así:

convert $origen -crop 50%x100% $corteshorizontales
convert $origen -crop 100%x50% $cortesverticales

Veamos un ejemplo: supongamos que queremos desordenar aleatoriamente una imagen en 10 franjas verticales.

Para pasar de:

guarderia_calle_Reino.jpg

A esto (o parecido, porque al ser aleatorio, cada vez que ejecutemos el script nos generará una imagen distinta): 

guarderia_desordenada.jpg

Veamos el script:

 

 

#!/bin/bash

origen="guarderia_calle_Reino.jpg"
destino="guarderia_desordenada.jpg"
ordendeimagenes=""

convert $origen -crop 10%x100% temporales%d.jpg

numerosaleatorios=$(shuf -i 0-9)

for i in $(seq 1 10)
do
      posicion=$(echo $numerosaleatorios | cut -d " " -f $i)
      ordendeimagenes="temporales"$posicion".jpg "$ordendeimagenes
done

convert $ordendeimagenes +append $destino

Explicación del script

Como siempre, vamos a ver paso a paso qué hemos hecho en este script:

#!/bin/bash -> Para indicar el shell que queremos usar
Después, las variables que vamos a utilizar. No me cansaré de repetir que ser ordenados ayuda a mantener y mejorar nuestros scripts, así como que otras personas puedan adaptarlos a sus necesidades. 
convert $origen -crop 10%x100% temporales%d.jpg -> dividimos en recortes iguales de un tamaño del 10% horizontalmente y un 100% vertical de la imagen original 
numerosaleatorios=$(shuf -i 0-9) -> Creamos una variable que contenga una serie de números del 0 al 9 (indicamos el rango con -i 0-9) ordenados aleatoriamente (shuf desordena)
Después recorremos esa variable con un for que irá del 1 al 10 ya que cut empieza a contar desde el 1, mientras que las imágenes creadas con -crop empiezan en 0.
Con posicion=$(echo $numerosaleatorios | cut -d " " -f $i) recortamos el listado anterior indicando que las partes a recortar están separadas con un espacio en blanco (indicado con -d " ") y que cada vez que pasa por el for muestre la columna correspondiente (indicado con -f $i) recordando que cut comienza a contar por 1.
Concatenamos los nombres de los ficheros a unir con       ordendeimagenes="temporales"$posicion".jpg "$ordendeimagenes. Lo que hacemos es añadir a una cadena de texto que hemos inicializado al comienzo como una cadena vacía (ordendeimagenes="") los ficheros con el patrón fijo que hemos indicado al hacer el recorte ("temporales"), la posición de la imagen que hemos extraido de la cadena aleatoria ($posicion) y la extensión seguida de un espacio (".jpg ") para que entre los nombres de los ficheros haya un espacio en blanco que permita que al unirlos después, lo entienda como ficheros distintos. 
Y, por último, concatenamos esos ficheros horizontalmente con +append. (Para concatenarlos verticalmente sería con -append). 

Publicado en Multimedia

A todos nos encantan las pantallas gigantes en los conciertos, en escaparates, en espectáculos y eventos de todo tipo... en general, en cualquier sitio donde vemos pantallas, nos quedamos mirándolas (por eso las ponen). Y si además, las imágenes cambian si interactuamos con la pantalla o con el entorno, nos gustan más todavía (por ejemplo, imágenes procesadas sobre la marcha con ImageMagick). Y cuanto más grandess sean, mejor. Tanto es así, que muchas veces se utilizan varias pantallas para mostar una imagen. 

Y si somos nosotros los que programamos la interacción con los usuarios, lo último que queremos es que se vea mal o que se descuadre la imagen al mostrarse en las pantallas. Así que vamos a ver cómo dividir una imagen para mostrar cada una de las partes en una pantalla distinta.

Usaremos una imagen cualquiera:

fuente_plaza_Emperador_Carlos.jpg

 

Y supongamos que queremos dividirla en cuatro imágenes iguales para cuatro pantallas distintas. ¿Cómo lo haremos? Cortando por la mitad horizontalmente y por la mitad verticalmente. Es decir, al 50% horizontalmente y al 50% verticalmente. Esto es muy importante, porque instintivamente podemos pensar en divididir al 25%. Pero esto nos haría cuatro cortes (100/25=4) horizontales y otros tantos cortes verticales, por lo que nos dejaría una imagen dividida en 16 partes (4x4 cortes). 
Vamos a comprobarlo:

convert fuente_plaza_Emperador_Carlos.jpg -crop 50% fuente_plaza_Emperador_Carlos%d.jpg

Explicación:

convert -> el comando de ImageMagick con el que trabajamos.
fuente_plaza_Emperador_Carlos.jpg -> El nombre de la imagen con la que vamos a trabajar. En este caso, como es una fuente que está en la Plaza del Emperador Carlos, la he llamado así. Si fuera una foto de mi prima bailando una jota, se llamaría mi_prima_bailando_una_jota.jpg. Pero no es el caso. 
-crop 50% -> Le indicamos a convert que corte por la mitad horizontalmente y por la mitad verticalmente. Podemos usar también -crop 50%x50% pero como el valor es el mismo para el corte horizontal y el vertical, nos podemos ahorrar unos caracteres indicando sólo una vez el porcentaje. 
fuente_plaza_Emperador_Carlos%d.jpg -> Cómo queremos que se llamen los ficheros generados. Le indicamos tres patrones:

  • fuente_plaza_Emperador_Carlos -> el nombre de todas las imágenes generadas a través de esta instrucción comenzará con la cadena "fuente_plaza_Emperador_Carlos"
  • %d -> después de la primera cadena que será igual para todos los ficheros, cada uno llevará un número correlativo desde 0 y que irá aumentando de izquierda a derecha. Es decir:
    • 0.- Recorte superior izquierdo
    • 1.- Recorte superior derecho
    • 2.- Recorte inferior izquierdo
    • 3.- Recorte inferior derecho
  • .jpg -> Las imágenes generadas tendrán la extensión .jpg

Veamos el resultado:

fuente_plaza_Emperador_Carlos0.jpg: 

fuente_plaza_Emperador_Carlos0.jpg
fuente_plaza_Emperador_Carlos1.jpg: fuente_plaza_Emperador_Carlos1.jpg
fuente_plaza_Emperador_Carlos2.jpg fuente_plaza_Emperador_Carlos2.jpg
fuente_plaza_Emperador_Carlos3.jpg fuente_plaza_Emperador_Carlos3.jpg
Y, ya que estamos troceando imágenes, vamos a ver cómo quedaría si hubiera tenido la tentación de escribir 25%:

convert fuente_plaza_Emperador_Carlos.jpg -crop 25% fuente_plaza_Emperador_Carlos%d.jpg

fuente_plaza_Emperador_Carlos0.jpg:
_fuente_plaza_Emperador_Carlos0.jpg
fuente_plaza_Emperador_Carlos1.jpg:
_fuente_plaza_Emperador_Carlos1.jpg
fuente_plaza_Emperador_Carlos2.jpg:
_fuente_plaza_Emperador_Carlos2.jpg
fuente_plaza_Emperador_Carlos3.jpg:
_fuente_plaza_Emperador_Carlos3.jpg
fuente_plaza_Emperador_Carlos4.jpg: fuente_plaza_Emperador_Carlos4.jpg fuente_plaza_Emperador_Carlos5.jpg: fuente_plaza_Emperador_Carlos5.jpg fuente_plaza_Emperador_Carlos6.jpg: fuente_plaza_Emperador_Carlos6.jpg fuente_plaza_Emperador_Carlos7.jpg: fuente_plaza_Emperador_Carlos7.jpg fuente_plaza_Emperador_Carlos8.jpg: fuente_plaza_Emperador_Carlos8.jpg fuente_plaza_Emperador_Carlos9.jpg: fuente_plaza_Emperador_Carlos9.jpg fuente_plaza_Emperador_Carlos10.jpg: fuente_plaza_Emperador_Carlos10.jpg fuente_plaza_Emperador_Carlos11.jpg: fuente_plaza_Emperador_Carlos11.jpg fuente_plaza_Emperador_Carlos12.jpg: fuente_plaza_Emperador_Carlos12.jpg fuente_plaza_Emperador_Carlos13.jpg: fuente_plaza_Emperador_Carlos13.jpg fuente_plaza_Emperador_Carlos14.jpg: fuente_plaza_Emperador_Carlos14.jpg fuente_plaza_Emperador_Carlos15.jpg: fuente_plaza_Emperador_Carlos15.jpg

Publicado en Multimedia

Cada vez las cámaras fotografían con mayor resolución, incluso con resoluciones mayores a las pantallas en las que vemos esa imagen. Y esto nos da mucho juego para poder manipular las imágenes haciendo recortes que nos permitan, entre otras cosas:


Ajustar la fotografía a aquello que queremos mostrar, quitando todo lo que sobra alrededor 

Veamos esta fotografía de la escultura de Miguel Servet en la antigua facultad de medicina de Zaragoza:

servet.jpg

Si queremos mostrar únicamente la escultura, sobra imagen por todos los lados. Avuelapluma y sin ajustar demasiado (estamos hablando de ImageMagick, no de armonía, ni de composición), pienso que podemos quitar 1/7 por arriba y por abajo y alrededor de 1/5 a izquierda y derecha, así que, como ya sabemos cómo preguntarle a ImageMagick el tamaño de las imágenes, voy a hacer esos recortes:

#!/bin/bash
origen="servet.jpg"
destino="servet_recortado.jpg"
let anchura=$(identify -format %w $origen) 
let altura=$(identify -format %h $origen)
let anchurarecorte=$anchura/5
let alturarecorte=$altura/7
let nuevaanchura=$anchurarecorte*3
let nuevaaltura=$alturarecorte*5
recorte=$nuevaanchura"x"$nuevaaltura"+"$anchurarecorte"+"$alturarecorte
convert $origen -crop $recorte $destino

Veamos lo que he hecho en este script: 

Primero, indicarle que estamos escribiendo un script en Bash con #!/bin/bash
E indicarle cual es la imagen que vamos a procesar y cómo queremos que se guarde la imagen modificada, Aunque esta sea una operación sencilla, siempre viene bien ser ordenados y definir primero las variables con las que vamos a trabajar y acostumbrarnos a nombrar con variables. Poco a poco iremos haciendo más complejos los scripts y cuando empecemos a hacer animaciones con ImageMagick viene muy bien ser estructurados.
El siguiente paso ha sido preguntarle a ImageMagick la altura y la anchura de la imagen para poder calcular dos cosas: Las partes a recortar, tanto horizontal como verticalmente (ese 1/7 y 1/5 que hemos dicho antes) y el tamaño de la imagen resultante. En este caso, como le quitábamos 1/7 por arriba y por abajo serían 7-1-1=5 -> 5/7 de la imagen y como le recortamos 1/5 a izquierda y otro 1/5 a la derecha, nos quedaría 5-1-1=3 -> 3/5 partes de la imagen. 
Una variable que contiene primero la anchura expresada en anchuraxaltura y después el recorte que le hacemos por arriba y por la izquiera expresado en +recortehorizontal+recortevertical.
Cuando tenemos todos los valores calculados, ejecutamos la instrucción diciéndole a convert que recorte con -crop y cómo queremos que sea el recorte. 

Al final, la imagen resultante ha quedado así:

server_recortado.jpg

Publicado en Multimedia

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto

Vea nuestra política de cookies y enlaces de interés aquí