Je dois générer des vignettes pour certains fichiers texte. De toute évidence, le système a la capacité de faire exactement cela (voir la capture d'écran). Existe-t-il un moyen d'accéder à ces images et de les copier pour une utilisation ultérieure?
Ou existe-t-il une commande spéciale (outil) pour cela?
J'ai regardé ceci: vignette en ligne de commande
Et ceci: Comment puis-je demander à Nautilus de pré-générer des vignettes?
Lesquels étaient utiles mais aucun ne pouvait traiter de texte.
Basé sur le même principe que ici , le script ci-dessous crée une icône de texte à partir d'un fichier texte à l'aide de Imagemagick.
La couleur de l'image d'arrière-plan arrondie et la couleur du texte peuvent être définies dans l'en-tête d'un script (ainsi que pour un certain nombre d'autres propriétés).
Ce que ça fait
Il lit le fichier texte, prend les quatre premières lignes (définies dans n_lines = 4
), les sept premiers caractères (définis dans n_chars = 10
) de chaque ligne et crée une superposition sur une image de la taille, par exemple psize = "100x100"
.
Le script nécessite que imagemagick
soit installé:
Sudo apt-get install imagemagick
Ensuite:
create_texticon.py
placé dans la section principale:
Exécutez-le avec votre fichier texte comme argument:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
#!/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
convertissez le fichier texte en pdf et utilisez pdfdraw
pour générer la vignette.
unoconv est un logiciel qui convertit entre différents documents compris par la suite bureautique OpenOffice.
Avantage de cette méthode: la création d’un script permet de générer facilement des vignettes groupées pour la quasi-totalité des documents.
Voir Gist pour les étapes.
Installer le package sans tête OpenOffice
Sudo apt-get install openoffice.org-headless openoffice.org-Java-common openoffice.org-writer openoffice.org-calc openoffice.org-impress
Installer la bibliothèque UNO python
Sudo apt-get install python-uno unoconv
Installer les polices nécessaires (surtout pour les langues internationales)
Copier les polices dans /usr/share/fonts/truetype/
Puis lancez fc-cache
Exécuter OpenOffice en tant que service
soffice -headless -nofirststartwizard -accept="socket,Host=localhost,port=8100;urp;StarOffice.Service"
Convertir un document en PDF à l'aide de la commande unoconv
unoconv -f pdf __[filename]__
Créer la vignette PDF à l'aide de l'outil MuPDF
pdfdraw -r 100 -o __[output-thumbnail]__ __[pdf-file]__ 1
question similaire sur SO