Agregar texto a una imagen con ImageMagick

Hice un pequeño script en Bash para agregar texto a una imagen con ImageMagick.

agregartexto script en bash | Agregar texto a una imagen con ImageMagick
El script y al mismo tiempo una muestra del resultado.

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.

Efecto Hard Shadow
Efecto Hard Shadow

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.

Sombreado transparente
Ahora con una sombra ligeramente 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!"
¡Hola mundo!
¡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.

cielo azul cielo nublado | Agregar texto a una imagen con ImageMagick
Cielo azul, cielo nublado.

¿Qué les parece? se aceptan sugerencias, comentarios, críticas, cervezas o un café.

Referencias

4 comentarios en “Agregar texto a una imagen con ImageMagick”

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.