Usando Imagemagick para crear iconos de texto
Basado en el mismo principio que aquí , el siguiente script crea un icono de texto a partir de un archivo de texto con la ayuda de Imagemagick.
El color de la imagen de fondo redondeada y el color del texto se pueden establecer en el encabezado de una secuencia de comandos (así como una serie de otras propiedades).
Lo que hace
Lee el archivo de texto, toma las primeras cuatro líneas (establecidas n_lines = 4
), los primeros siete caracteres (establecidos n_chars = 10
) de cada línea, y crea una superposición sobre una imagen del tamaño, establecida, por ejemplo psize = "100x100"
.
Cómo utilizar
El script debe imagemagick
estar instalado:
sudo apt-get install imagemagick
Luego:
- Copie el script en un archivo vacío
- Guárdalo como
create_texticon.py
establecido en la sección de la cabeza:
- el color del fondo del icono
- el color de la capa de texto del ícono
- El tamaño del icono creado.
- El número de líneas para mostrar en el ícono
- El número de (primeros) caracteres por línea para mostrar en el icono
- El camino donde guardar la imagen
Ejecútelo con su archivo de texto como argumento:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
La secuencia de comandos
#!/usr/bin/env python3
import subprocess
import sys
import os
import math
temp_dir = os.environ["HOME"]+"/"+".temp_iconlayers"
if not os.path.exists(temp_dir):
os.mkdir(temp_dir)
# ---
bg_color = "#DCDCDC" # bg color
text_color = "black" # text color
psize = [64, 64] # icon size
n_lines = 4 # number of lines to show
n_chars = 9 # number of (first) characters per line
output_file = "/path/to/output/icon.png" # output path here (path + file name)
#---
temp_bg = temp_dir+"/"+"bg.png"; temp_txlayer = temp_dir+"/"+"tx.png"
picsize = ("x").join([str(n) for n in psize]); txsize = ("x").join([str(n-8) for n in psize])
def create_bg():
work_size = (",").join([str(n-1) for n in psize])
r = str(round(psize[0]/10)); rounded = (",").join([r,r])
command = "convert -size "+picsize+' xc:none -draw "fill '+bg_color+\
' roundrectangle 0,0,'+work_size+","+rounded+'" '+temp_bg
subprocess.call(["/bin/bash", "-c", command])
def read_text():
with open(sys.argv[1]) as src:
lines = [l.strip() for l in src.readlines()]
return ("\n").join([l[:n_chars] for l in lines[:n_lines]])
def create_txlayer():
subprocess.call(["/bin/bash", "-c", "convert -background none -fill "+text_color+\
" -border 4 -bordercolor none -size "+txsize+" caption:"+'"'+read_text()+'" '+temp_txlayer])
def combine_layers():
create_txlayer(); create_bg()
command = "convert "+temp_bg+" "+temp_txlayer+" -background None -layers merge "+output_file
subprocess.call(["/bin/bash", "-c", command])
combine_layers