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:
[fusion_lightbox type=»» full_image=»https://albertomendez.me/wp-content/uploads/2017/10/tarjeta.jpeg» video_url=»» thumbnail_image=»https://albertomendez.me/wp-content/uploads/2017/10/tarjeta-300×144.jpeg» alt_text=»» description=»» class=»» id=»»][/fusion_lightbox]
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:
[fusion_table]
[/fusion_table]
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.
Desarrollador de software, informático, emprendedor y entusiasta por la tecnología desde tiempos inmemoriales. Inquieto por defecto, curioso por naturaleza, trato de entender el mundo y mejorarlo utilizando la tecnología como herramienta.