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:
A esto (o parecido, porque al ser aleatorio, cada vez que ejecutemos el script nos generará una imagen distinta):
Veamos el script:
#!/bin/bash
convert $ordendeimagenes +append $destino
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
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).
Bonito efecto.
Eso es al lado de la aljaferia?