Ya sabemos cómo seleccionar aleatoriamente una tipografía para incluir texto en ImageMagick, pero nos puede ocurrir que, al ser aleatoria esa selección, nos elija una tipografía que sean dibujos, signos matemáticos o cualquier otra tipografía que no sea de letras, también nos puede mostrar una tipografía con un alfabeto distinto al nuestro o que no muestre bien algunos caracteres.

Yo siempre me fijo en cuatro caracteres clave: apertura de interrogación y exclamación, vocales con tilde y eñes.

Así pues, voy a usar una cadena de caracteres que tenga interrogaciones, una vocal con tilde y una eñe:

¿Leña? ¡Porrón!

Y como quiero ver qué tipografías que tengo instaladas en cada máquina muestran correctamente estos caracteres, hago los siguientes pasos:

  1. Utilizo un script que escribe la cadena "¿Leña? ¡Porrón!" con todas las tipografías instaladas en ese sistema.
  2. Compruebo las tipografías que muestran bien esos caracteres y además son legibles y cubren mis necesidades para escribir automáticamente sin miedo a que por automatizar se vea mal el texto. Y borro lo que me sobra.
  3. Un segundo script recoge las tipografías "supervivientes" que cumplen mis necesidades y genera una lista con esas tipografías
  4. Selecciono aleatoriamente de ese listado las tipografías para escribir en las imágenes

Script compruebatipografias.sh

#!/bin/bash

directoriotemporaltipografias="tipografias"

if [ ! -d directoriotemporaltipografias ]
then
    mkdir $directoriotemporaltipografias
fi

for tipografia in $(convert -list font | grep "Font" | cut -d " " -f 4)
do
    convert -pointsize 100 -font $tipografia label:"¿Leña? ¡Porrón!" $directoriotemporaltipografias/$tipografia.jpg
done

Veamos qué es lo que hace:

Indico que es un script en bash:

#!/bin/bash

Que el directorio con el que voy a trabajar se llama "tipografias", pero lo meto en una variable por si por cualquier motivo quiero cambiar de directorio:


directoriotemporaltipografias="tipografias"

 

Compruebo si existe o no ese directorio y si no existe, lo creo:
if [ ! -d directoriotemporaltipografias ]
then
    mkdir $directoriotemporaltipografias
fi

Hago un bucle en el que recorre todas las tipografías tal como vimos en el artículo anterior sobre tipografías en ImageMagick: y le digo que me genere una imagen por cada tipografía con la cadena antes indicada de "¿Leña? ¡Porrón!" guardando esas imágenes con el nombre de la tipografía utilizada en el directorio creado para tal efecto:
for tipografia in $(convert -list font | grep "Font" | cut -d " " -f 4)
do
    convert -pointsize 100 -font $tipografia label:"¿Leña? ¡Porrón!" $directoriotemporaltipografias/$tipografia.jpg
done

Selección manual de las tipografías

 

Con esto, tengo un directorio lleno de imágenes con cadenas de texto. Abro el directorio con un navegador de ficheros que muestre una previsualización de cada imagen y selecciono todas las imágenes que no me interesan por el motivo que sea, que generalmente es porque no escribe bien todos los caracteres indicados:

selecciondetipografias.png

 

Otras veces es porque, aunque muestre correctamente los caracteres, no me parecen lo suficientemente legibles o son muy específicos de una determinada fecha: navideños, de Hallowen, con nieve...

Una vez borrados los que en una primera ronda en bruto me han parecido que no cubren mis necesidades (ojo, que cuando seleccionamos aleatoriamente una tipografía es bastante arriesgado poner a trabajar ese script y desentendernos, por lo que es mejor que, en caso de duda, borrar el fichero), paso a una segunda fase en la que miro una por una las tipografías.

A veces nos encontramos que una tipografía escribe correctamente los caracteres pero no nos queremos arriesgar a que un script la seleccione sin nuestra aprobación:

Capacitor.jpgEdgewater.jpg

 

Estas tipografías muestran todos los caracteres, pero quizá no encajen en todos los contextos, por lo que las borro también.

 

 

Script listatipografias.sh

Y una vez que he borrado todo lo que sobra, ejecuto un segundo script:

#!/bin/bash

directoriotemporaltipografias="tipografias"

for fichero in $(ls $directoriotemporaltipografias)
do
    echo ${fichero%.*} >> tipografiasausar.txt
done

rm -r $directoriotemporaltipografias
rmdir $directoriotemporaltipografias

 

En el que le indico:

Que es un script bash:

#!/bin/bash

Que recoja los ficheros de un determinado directorio:
directoriotemporaltipografias="tipografias"

Que recorra ese directorio fichero a fichero y quite la extensión de esos ficheros ${fichero%.*} e incluya el nombre sin extensión en un fichero de texto llamado tipografiasausar.txt añadiendo en cada pasada de for cada tipografía al texto ya existente en ese fichero (>>)
for fichero in $(ls $directoriotemporaltipografias)
do
    echo ${fichero%.*} >> tipografiasausar.txt
done

Que borre el contenido de ese directorio y el propio directorio para que no ocupe espacio en disco ni moleste una vez hecha la selección.
rm -r $directoriotemporaltipografias
rmdir $directoriotemporaltipografias

 

Uso del fichero tipografiasausar.txt

Una vez creado el fichero tipografiasausar.txt para seleccionar aleatoriamente una línea de ese fichero lo podemos hacer con shuf. Así:

tipografia=$(shuf -n 1 tipografiasausar.txt)

 

Y así quedaría un script de ejemplo:

#!/bin/bash
tipografia=$(shuf -n 1 tipografiasausar.txt)
convert -pointsize 100 -fill Blue -font $tipografia label:"Automaticen\ny sean felices" automaticen.png

 

Publicado en Multimedia

En ImageMagick tenemos el parámetro -list que lista los valores que pueden recibir algunos parámetros.

Uno de los parámetros del que se puede listar los valores que puede recibir es font, que es el parámetro que permite seleccionar la tipografía con la que escribir un texto con annotate o label, así pues, si escribimos:

convert -list font

convert nos mostará las tipografías de nuestro sistema con una serie de datos más, como la familia, la dirección...

Font: Zoidal-BRK
    family: Zoidal BRK
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/aenigma/zoidal.ttf
  Font: Zrnic
    family: Zrnic
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/larabie/zrnic___.ttf
  Font: Zurklez-Outline-BRK
    family: Zurklez Outline BRK
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/aenigma/zurklezo.ttf
  Font: Zurklez-Solid-BRK
    family: Zurklez Solid BRK
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/aenigma/zurklezs.ttf
  Font: Æ-Systematic-TT-BRK
    family: Æ Systematic TT BRK
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/aenigma/aesymatt.ttf
  Font: Ænigma-Scrawl-4-BRK
    family: Ænigma Scrawl 4 BRK
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/truetype/aenigma/aescrawl.ttf

 

Sin embargo, pese a que convert muestra toda esa información el nombre de la tipografía que vamos a usar a la hora de generar un texto con ImageMagick es el que sucede a "Font:". Así pues, si lo que queremos es saber el nombre con el que podremos invocar a las tipografías desde convert para añadir textos en nuestras imágenes o generar imágenes con texto, podremos listar únicamente esas líneas. Y aquí es donde llamamos a nuestro amigo grep:

convert -list font | grep Font

Font: Zakenstein-Rotalic
Font: Zekton
Font: Zekton-Bold
Font: Zekton-Bold-Italic
Font: Zekton-Dots
Font: Zekton-Italic
Font: Zelda-DX-TT-BRK
Font: Zenith-BRK
Font: Zephyrean-BRK
Font: Zephyrean-Gust-BRK
Font: Zero-Threes
Font: Zero-Twos
Font: Zero-Velocity-BRK
Font: ZeroHour
Font: Zirconia-BRK
Font: Zirconia-Cubic-BRK
Font: Zodillinstrisstirust
Font: Zoetrope-BRK
Font: Zoidal-BRK
Font: Zrnic
Font: Zurklez-Outline-BRK
Font: Zurklez-Solid-BRK
Font: Æ-Systematic-TT-BRK
Font: Ænigma-Scrawl-4-BRK


Otra fórmula sería extraer la columna donde están las cadenas de texto que contienen los nombres de las tipografías, el comando cut ayuda mucho en esta tarea:

convert -list font | grep Font | cut -d " " -f 4

Con estos parámetros le decimos a cut, que es un comando que "corta" cadenas, que el separador es un espacio en blanco con -d " ".

Del mismo modo, le podríamos indicar que el separador de columnas es cualqueir otro caracter o cadena de caracteres. El parámetro -f lo que indica es el número de la columna que ha de mostar, en este caso, la cuarta. Veamos:

Zekton
Zekton-Bold
Zekton-Bold-Italic
Zekton-Dots
Zekton-Italic
Zelda-DX-TT-BRK
Zenith-BRK Zephyrean-BRK
Zephyrean-Gust-BRK
Zero-Threes Zero-Twos
Zero-Velocity-BRK
ZeroHour Zirconia-BRK
Zirconia-Cubic-BRK
Zodillinstrisstirust
Zoetrope-BRK
Zoidal-BRK
Zrnic
Zurklez-Outline-BRK
Zurklez-Solid-BRK
Æ-Systematic-TT-BRK
Ænigma-Scrawl-4-BRK

Y ahora que ya tenemos el listado limpio, únicamente tenemos que elegir una cadena al azar. Lo podemos hacer con shuf:
convert -list font | grep Font | cut -d " " -f 4 | shuf -n 1
Intersect-O-BRK

Y si lo probamos muchas veces, veremos que el resultado es aleatorio, por lo que cada vez que ejecutemos esa instrucción será distinta:

tipografiaaleatoria.png

 

Y dentro de un script, el uso sería igual:

#!/bin/bash

tipografia=$(convert -list font | grep Font | cut -d " " -f 4 | shuf -n 1)

echo "La tipografía seleccionada de forma aleatoria ha salido: "$tipografia

Veamos si así funciona:

tipografiaaleatoria.png

 

Como vemos, cada vez que ejecutamos el script nos muestra una tipografía distinta.

Y ahora, vamos a usarlo con ImageMagick para generar una imagen con una tipografía aleatoria:

#!/bin/bash

tipografia=$(convert -list font | grep Font | cut -d " " -f 4 | shuf -n 1)

convert -pointsize 100 -font $tipografia label:"Disfruten del\nSoftware Libre" disfruten.png

disfruten.png

 

Y vamos a hacer un for para comprobar que realmente genera imágenes con distintas tipografías:

#!/bin/bash

for i in $(seq 1 3)
do
    tipografia=$(convert -list font | grep Font | cut -d " " -f 4 | shuf -n 1)
    convert -pointsize 100 -font $tipografia label:"Disfruten del\nSoftware Libre" disfruten$i.png
done


disfruten1.pngdisfruten3.pngdisfruten2.png

Vista la forma básica de generar textos con tipografías aleatorias, veremos también cómo hacer una selección previa de las tipografías para usar aquellas tipografías que se ajusten a nuestras necesidades.

Publicado en Multimedia

Ahora que ya sabemos crear lienzos con textos y añadir textos a imágenes con ImageMagick, vamos a evolucionar nuestros scripts y nuestros diseños trabajando con las tipografías.

Listar las tipografías instaladas

Para listar las fipografías que tenemos en nuestro sistema, podemos usar el parámetro -list de ImageMagick:

convert -list font

Esto nos dará un listado enorme de tipografías e información sobre ellas, así que si queremos verlas una a una hemos de filtrar la salida del comando. Por ejemplo, podremos ver todo el listado y movernos por él con

convert -list font | less

pantallazofont.png

Saber el número de tipografías instaladas

Como vemos en el anterior, al listar las tipografías, convert muestra el fichero que lee al listar las tipografías (/etc/ImageMagick-6/type-ghostscript.xml). Pero no es el único fichero xml de donde puede leer, sino de todos los /etc/ImageMagick-6/type-*. Y luego muestra seis líneas por tipografía.

Así pues, si queremos saber cuántas tipografías tenemos instaladas, podemos usar un pequeño script que nos reste las líneas que no nos interesa y el resultado dividirlo entre seis (es una opción tan válida como cualquier otra) u optimizar el esfuerzo escribiendo:

convert -list font | grep "Font:" | wc -l

Listar las tipografías limpias

Ahora que ya sabemos con cuántas tipografías distintas podemos trabajar, vamos a listarlas limpias, ya que con convert -list font | grep "Font:" lo que nos mostaría sería las línas con este formato:

  Font: Zero-Twos
  Font: Zero-Velocity-BRK
  Font: ZeroHour
  Font: Zirconia-BRK
  Font: Zirconia-Cubic-BRK
  Font: Zodillinstrisstirust
  Font: Zoetrope-BRK
  Font: Zoidal-BRK
  Font: Zrnic
  Font: Zurklez-Outline-BRK
  Font: Zurklez-Solid-BRK
  Font: Æ-Systematic-TT-BRK
  Font: Ænigma-Scrawl-4-BRK

Lo cual, a modo orientativo, nos puede servir si queremos leerlas con nuestros ojos, pero si queremos usarlas en un script no nos vale como argumento de -font. Para limpiarlo, le decimos que queremos la segunda columna de ese resultado y que la separación es " " con cut -f 2 -d ":" (recordemos que con cut sólo podemos indicar un único carácter de separación, así que no podemos indicarque que el separador sea  ": ". Nos devuelve algo parecido (dependiendo de las tipografías que tengamos en cada sitema) a esto:

 Zero-Threes
 Zero-Twos
 Zero-Velocity-BRK
 ZeroHour
 Zirconia-BRK
 Zirconia-Cubic-BRK
 Zodillinstrisstirust
 Zoetrope-BRK
 Zoidal-BRK
 Zrnic
 Zurklez-Outline-BRK
 Zurklez-Solid-BRK
 Æ-Systematic-TT-BRK
 Ænigma-Scrawl-4-BRK

Vaya, tal como sospechaba, al no poder indicarle que el separador es ": ", me deja un espacio en blanco. Bueno, cualquier problema es relativo si tenemos amigos que nos ayuden a solucionarlos. Y en GNU/Linux tenemos un amigo que se llama sed que nos puede ayudar a limpiar estas cadenas:

convert -list font | grep "Font:" | cut -d ":" -f 2 | sed 's/ //g'

Zero-Twos
Zero-Velocity-BRK
ZeroHour
Zirconia-BRK
Zirconia-Cubic-BRK
Zodillinstrisstirust
Zoetrope-BRK
Zoidal-BRK
Zrnic
Zurklez-Outline-BRK
Zurklez-Solid-BRK
Æ-Systematic-TT-BRK
Ænigma-Scrawl-4-BRK

Seleccionar una tipografía aleatoria

Ya he conseguido las cadenas limpias. con las tipografías a utilizar. Pero no sé cuál de ellas usar, así que dejaré que sea shuf quien elija alguna al azar:

convert -list font | grep "Font:" | cut -d ":" -f 2 | sed 's/ //g' | shuf -n1

Con esta instrucción conseguimos que de forma aleatoria nos diga una única tipografía.

Y para verlo claramente, vamos a hacer un script de ejemplo:

#!/bin/bash

for i in $(seq 1 5)
do
    tipografia=$(convert -list font | grep "Font:" | cut -d ":" -f 2 | sed 's/ //g' | shuf -n1
)
    convert -size 500x200 -background CadetBlue -font $tipografia -pointsize 45 -gravity Center label:"Linux Center" cartelalinuxcenter$i.png
done

Y el resultado (cambiará cada vez que lo ejecutéis):

 

Publicado en Multimedia

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto

Vea nuestra política de cookies y enlaces de interés aquí