Utilizzo di Imagemagick per creare icone di testo
Basato sullo stesso principio qui , lo script seguente crea un'icona di testo da un file di testo con l'aiuto di Imagemagick.
Il colore dell'immagine di sfondo arrotondato e il colore del testo possono essere impostati nella testa di uno script (così come un numero di altre proprietà).
Cosa fa
Legge il file di testo, prende le prime quattro righe (impostate n_lines = 4
), i primi sette caratteri (impostate n_chars = 10
) di ciascuna riga e crea una sovrapposizione su un'immagine delle dimensioni, impostata ad es psize = "100x100"
.
Come usare
Lo script deve imagemagick
essere installato:
sudo apt-get install imagemagick
Poi:
- Copia lo script in un file vuoto
- Salva come
create_texticon.py
impostato nella sezione testa:
- il colore dello sfondo dell'icona
- il colore del textlayer dell'icona
- La dimensione dell'icona creata
- Il numero di righe da mostrare nell'icona
- Il numero di (primi) caratteri per riga da mostrare nell'icona
- Il percorso in cui salvare l'immagine
Eseguilo con il tuo file di testo come argomento:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
Il copione
#!/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