Hice un pequeño script en Bash para agregar texto a una imagen con ImageMagick.
Bueno en realidad hace un poco más que eso. En el momento en el que se ejecuta, le agrega un texto en la parte inferior derecha de la imagen, si es muy grande la redimensiona y al final la optimiza para que sea de un tamaño adecuado.
#!/bin/bash # agregartexto.sh # ================ # Agrega un texto en la parte inferior derecha a todos los archivos jpg del # directorio en el que se ejecuta. # # https://linuxmanr4.com # # La imagen que voy a utilizar. IMAGEN="$1" # El texto que le quiero añadir. TEXTO="$2" # Para obtener el nombre y la extensión del archivo. NOMBRE=`echo "$IMAGEN" | cut -d'.' -f1` EXTENSION=`echo "$IMAGEN" | cut -d'.' -f2` DESTINO="${NOMBRE}"_linuxmanr4."${EXTENSION}" # Una copia del archivo para trabajar. cp "$IMAGEN" "$DESTINO" # Se redimensiona la imagen si es muy grande. mogrify -resize "1200>" -quality 90 "$DESTINO" # Agregamos el texto a la imagen convert "$DESTINO" -gravity SouthEast -font TeXGyreAdventor-Regular -pointsize 25 \ -fill '#00000080' -draw "text 13,1 \"$TEXTO\"" \ -fill white -draw "text 14,2 \"$TEXTO\"" \ "$DESTINO" leanify "$DESTINO" echo "Listo !!!"
Buscar el nombre de las fuentes
Sin embargo, mientras encontraba la instrucción convert que hiciera lo que yo quería con la imagen, me di cuenta de que quería usar un tipo de letra en específico. Me gustó una fuente que se llama Tex Gyre Adventor y que no encontraba como nombrarla adecuadamente en el script. Intenté poniendo el nombre con comillas, sin espacios, pero nada, en cada ejecución me daba un error.
Para saber como nombrar las fuentes instaladas en su equipo puede teclear:
identify -list font
Aunque claro, pasará la lista completa en la terminal muy rápidamente, así que se puede generar una lista redireccionando la salida a un archivo.
identify -list font > fuentes.txt
Así fue como encontré que el nombre de la fuente que quería utilizar era TeXGyreAdventor-Regular.
En realidad son dos textos.
Otro problema que tuve fue que dependiendo de si la imagen era oscura o clara era probable que el texto fuera o no claramente visible. Por eso busqué la forma de agregar una sombra que me ayudara con este detalle.
Encontré en ImageMagick v6 Examples Compound Font Effects esta instrucción que me gustó
convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \ -fill black -draw "text 28,68 'Anthony'" \ -fill white -draw "text 25,65 'Anthony'" \ font_shadow.jpg
Como pueden ver, en realidad se agregan dos veces el mismo texto con diferentes colores y un ligero desplazamiento para crear ese efecto de sombra.
Sin embargo, en el script hice algunos cambios para suavizar la sombra, en lugar de elegir un color sólido en el sombreado preferí hacerlo un poco transparente.
La optimización de la imagen
Usé Leanify para optimizar la imagen ya que es un programa que utiliza una técnica lossless (sin pérdidas) y se puede aplicar sin problemas tanto a imágenes JPG como PNG.
Leanify no solo sirve para optimizar imágenes, de hecho soporta una gran variedad de formatos de archivos.
Ejecutando el script
Al principio, hice un script que buscaba todos los archivos JPG del directorio, pero durante el proceso de depuración me di cuenta de que era poco práctico.
Por eso decidí pasar desde la terminal los dos parámetros que son, el nombre de la imagen y el texto que se quiere agregar quedando más o menos así:
./agregartexto.sh "archivo_imagen.jpg" "¡Hola mundo!"
Cuando hago este tipo de script en Bash, me gusta copiarlos a la carpeta /usr/bin para que los pueda llamar desde cualquier carpeta de mi equipo.
¿Qué les parece? se aceptan sugerencias, comentarios, críticas, cervezas o un café.
Te ha quedado estupendo.
Gracias Alfonso,
Aprendí muchas cosas mientras hacía este script 🙂
Saludos 🙂
se ve bien pero lo tienes online para probarlo? necesito hacer algo muy parecido, gracias
Lo que ves es lo que hay …