Bordes con relieve con ImageMagick
El operador -raise de ImageMagick genera un borde a una imagen ya cread con una parte más clara y otra más oscura simulando relieve.
Si antes de raise escribimos un guión, realza la imagen con las partes superior e izquierda más claras y las partes derecha e inferior más oscuras. Si le añadimos un signo más delante de raise, invierte la transformación generando un efecto rehundido.
Partiendo de esta fotografía:
Vamos a aplicarle -raise con un valor de 10:
convert grafiti.jpg -raise 10 grafiti_-_raise_10.jpg
Cuanto mayor sea el valor de raise, mayor será el grosor del marco. Veamos con un valor de 50:
convert grafiti.jpg -raise 50 grafiti_-_raise_50.jpg
Vamos a ver cómo cambia si en lugar de -raise usamos +raise:
convert grafiti.jpg +raise 50 grafiti_+_raise_50.jpg
Podemos combinarlo con -border para añadir un borde y luego darle relieve:
convert grafiti.jpg -bordercolor SkyBlue -border 20 -raise 20 grafiti_-border_20_-_raise_20.jpg
Efecto teclas
Con este efecto de relieve podemos crear imágenes que simulen teclas. Vamos a ir paso a paso y así podemos ver más opciones de ImageMagick.
Crearemos primero un lienzo de 100 x 100 de color Grey80:
convert -size 100x100 xc:Gray80 lienzo.jpg
Podemos listar los colores de ImageMagick con convert -list color
.
Como queremos crear una tecla, vamos a crear un lienzo con un texto, en este caso, con la letra «A», dejando un poco de aire para hacer luego el biselado:
convert -size 100x100 -background Gray80 -gravity South -pointsize 80 label:"A" letra_A.jpg
Ahora que ya tenemos la letra, podemos aplicar el biselado:
convert -size 100x100 -background Gray80 -gravity South -pointsize 80 label:"A" -raise 15 tecla_A.jpg
Para darle un efecto más real de tecla, podemos difuminar la imagen ligeramente:
convert -size 100x100 -background Gray80 -raise 15 -blur 2 -gravity South -pointsize 80 label:"A" tecla_usada_A.jpg
Ahora que ya tenemos el diseño de las teclas, podemos recorrer carácter a carácter una cadena y generar una imagen con esa cadena con efecto teclas:
#!/bin/bash let len="${#1}"-1 start_inst="convert" text="" filename="${1// /}".jpg montage="" let width=100 let height=100 let sizeborder=5 let sizeraise=$sizeborder*3 let sizeblur=2 color="Gray80" if [ -w "/tmp" ] then [ -d "/tmp/${1// /}" ] || mkdir "/tmp/${1// /}" dirtmp="/tmp/${1// /}" else [ -d "./${1// /}" ] || mkdir "./${1// /}" dirtmp="./${1// /}" fi for (( pos=0; pos<=$len; pos++ )) do if [ "${1:$pos:1}" == " " ] then let width_space=$width*3 convert -size ${width_space}x${height} xc:$color -raise $sizeraise -blur $sizeblur -bordercolor $color -border $sizeborder $dirtmp"/"$pos.jpg # gjpqy elif [ "${1:$pos:1}" == "g" ] || [ "${1:$pos:1}" == "j" ] || [ "${1:$pos:1}" == "p" ] || [ "${1:$pos:1}" == "q" ] || [ "${1:$pos:1}" == "y" ] then convert -size ${width}x${height} -background $color -raise $sizeraise -blur $sizeblur -gravity Center -pointsize 80 label:${1:$pos:1} -bordercolor $color -border $sizeborder $dirtmp"/"$pos.jpg else convert -size ${width}x${height} -background $color -raise $sizeraise -blur $sizeblur -gravity South -pointsize 80 label:${1:$pos:1} -bordercolor $color -border $sizeborder $dirtmp"/"$pos.jpg fi montage=$montage"$dirtmp/$pos.jpg " done convert $montage +append $filename rm -r $dirtmp exit 0