Utilisation d'Imagemagick pour créer des icônes de texte
Basé sur le même principe qu'ici , le script ci-dessous crée une icône de texte à partir d'un fichier texte avec l'aide d'Imagemagick.
La couleur de l'image d'arrière-plan arrondie et la couleur du texte peuvent être définies dans la tête d'un script (ainsi que plusieurs autres propriétés).
Ce qu'il fait
Il lit le fichier texte, prend les quatre premières lignes (définies n_lines = 4
), les sept premiers caractères (définis n_chars = 10
) de chaque ligne et crée une superposition sur une image de la taille, définie par exemple psize = "100x100"
.
Comment utiliser
Le script doit imagemagick
être installé:
sudo apt-get install imagemagick
Ensuite:
- Copiez le script dans un fichier vide
- Enregistrez-le sous
create_texticon.py
situé dans la section de tête:
- la couleur du fond de l'icône
- la couleur du calque de texte de l'icône
- La taille de l'icône créée
- Le nombre de lignes à afficher dans l'icône
- Le nombre de (premiers) caractères par ligne à afficher dans l'icône
- Le chemin où enregistrer l'image
Exécutez-le avec votre fichier texte comme argument:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
Le scénario
#!/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