web-dev-qa-db-fra.com

Générer des vignettes pour du texte?

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?

somefolder.png

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.

10
user10607

Utiliser Imagemagick pour créer des icônes 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).

enter image description here

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".

Comment utiliser

Le script nécessite que imagemagick soit installé:

Sudo apt-get install imagemagick

Ensuite:

  1. Copiez le script dans un fichier vide
  2. Enregistrez-le sous create_texticon.py
  3. placé dans la section principale:

    • la couleur de l'arrière-plan de l'icône
    • la couleur de la couche 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
  4. 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
5
Jacob Vlijm

Idée:

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.

  1. 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
    
  2. Installer la bibliothèque UNO python

    Sudo apt-get install python-uno unoconv
    
  3. Installer les polices nécessaires (surtout pour les langues internationales)

    Copier les polices dans /usr/share/fonts/truetype/ Puis lancez fc-cache

  4. Exécuter OpenOffice en tant que service

    soffice -headless -nofirststartwizard -accept="socket,Host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Convertir un document en PDF à l'aide de la commande unoconv

    unoconv -f pdf __[filename]__
    
  6. Créer la vignette PDF à l'aide de l'outil MuPDF

    pdfdraw -r 100 -o __[output-thumbnail]__ __[pdf-file]__ 1  
    

question similaire sur SO

1
Prinz