Crear múltiples versiones de la misma imagen con distinto texto

En mi antiguo empleo en una ocasión surgió la necesidad de crear 200 tarjetas iguales excepto en un detalle, cada una de ellas llevaría un código diferente, los códigos eran para inscribirse gratuitamente en un servicio web de pago que habíamos creado y las tarjetas se repartirían a los asistentes a un evento. Crear 200 imágenes con un texto diferente cada una puede no ser exagerado y llegar a hacerse, en un tiempo considerable, manualmente; ¿pero y si fueran 1000? ¿Para qué perder nuestro preciado tiempo creándolas a mano si podemos hacerlo en unos pocos segundos automatizando el proceso?

Así que vamos a ver cuál ha sido el proceso de principio a fin de forma que cualquiera que lo necesite pueda repetirlo. Una vez tengamos la imagen que queremos utilizaremos un simple script en bash para añadirle los textos y generar tantas como necesitemos.

Para este tutorial vamos a utilizar una imagen de internet, esta en concreto, la he recortado y le he añadido un recuadro blanco para simular una tarjeta, así es como ha quedado:

Ya tenemos la imagen que hará la función de tarjeta con el recuadro donde irán los códigos, el proceso de creación e inserción de los códigos como hablábamos antes se realiza utilizando un script en bash por lo que necesitaremos un ordenador con sistema operativo Linux e ImageMagick instalado:

apt-get install imagemagick

El script en cuestión es el siguiente:

# Requirements: imagemagick
# Usage: add_text_to_image.sh FileWithTextLines.txt
#!/bin/bash
COUNTER=1
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Imagen $COUNTER creada: $line"
    convert -pointsize 52 -draw "text 470,275 '$line'" tarjeta.jpeg imgdst$COUNTER.jpeg
    let COUNTER=COUNTER+1
done < "$1"

Lo que hace es básicamente leer el fichero indicado, mostrar por consola un texto indicando que la imagen ha sido creada, incrustar la línea leída del fichero con un texto de 52 puntos de tamaño en la posición 470 horizontal, 275 vertical y generar la imagen “imgdstX.jpeg”. La opción “convert” de ImageMagick tiene muchísimas más opciones que nos otorgan la capacidad de tratar mucho más en profundidad tanto el texto incrustado como la imagen generada, recomiendo echarles un vistazo por encima.

Los códigos en cuestión deben estar insertados en un fichero de texto con uno en cada línea, para la demo generamos unos textos aleatorios en la página random.org :

veujUHqWWO
xPCxXXEbyb
VLLlvpImZl
BcksnMbxjY
GwAhuGQsNr
tdVASdtDEe
dNdNnWMkoH
OKojniJWqA
qXxpxHMSQL
GrvjBQKLtJ

En este punto ya tenemos todo lo necesario para crear nuestras imágenes, es tan simple como ejecutar el script pasándole el nombre del fichero de texto que habremos creado con los códigos que llevarán las imágenes:

addtext.sh codigos.txt

Como hemos introducido 10 códigos el resultado serán 10 imágenes iguales con un texto diferente cada una, aquí podemos ver tres de ellas:

De esta forma tan sencilla podemos generar cuántas imágenes necesitemos de forma mucho más rápida que generándolas manualmente, lógicamente cuántas más imágenes necesitemos generar más tiempo le llevará, acabo de realizar una prueba con 200 imágenes y ha tardado 20 segundos apróximadamente, lo que viene siendo 10 imágenes por segundo, si lo comparamos con el tiempo que llevaría hacerlo a mano por muy mecánico que sea pues la ventaja es clara.

Espero sirva de utilidad, cualquier cosa no dudes en dejar un comentario.

 

 

By | 2017-10-21T14:52:46+00:00 octubre 21st, 2017|Administrador de sistemas, Informática, Linux, Tecnología, Utilidades|0 Comments

About the Author:

Desarrollador de software de profesión, apasionado de la informática y todo lo relacionado con la tecnología

Leave A Comment