Générer des vignettes pour le texte?

10

J'ai besoin de générer des vignettes pour certains fichiers texte. De toute évidence, le système a en quelque sorte 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 de ligne de commande

Et ceci: Comment puis-je demander à Nautilus de pré-générer des vignettes?

Ce qui était utile mais aucun ne pouvait traiter du texte.

user10607
la source
@Rmano, quelle taille les icônes devraient-elles avoir?
Jacob Vlijm
@JacobVlijm L'idée est de créer une vignette --- la forme de base script -s width input_url output_fileest le format utilisé par nautilus. Voir par exemple rlog.rgtti.com/2011/11/24/… et la page liée ...
Rmano

Réponses:

5

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

entrez la description de l'image ici

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:

  1. Copiez le script dans un fichier vide
  2. Enregistrez-le sous create_texticon.py
  3. 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
  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
Jacob Vlijm
la source
Cette solution est-elle persistante?
αғsнιη
Qu'entendez-vous par persistant? Le script crée les icônes, ou ai-je mal compris la question?
Jacob Vlijm
1
@Kasiya Pour l'utiliser comme vignettes, voir rlog.rgtti.com/2011/11/24/… et rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus le mettra à jour automatiquement. Bonne idée; Maintenant, je pense à utiliser la pygmentsyntaxe pour la mettre en évidence et ce sera parfait. Merci!
Rmano
2
@JacobVlijm n'est pas nécessaire. /usr/share/thumbnailers/...Déposez simplement le script au bon endroit et écrivez le fichier et les icônes apparaîtront automatiquement et seront gérées par le système (mis en cache, mis à jour sur les modifications de fichiers, etc.)
Rmano
1
@JacobVlijm peu importe --- j'ai eu l'idée. Je pense que la réponse est suffisante telle quelle. Dommage que nous ne puissions pas tirer parti de la façon dont le système le fait, mais je commence à supposer qu'il est codé en dur dans une bibliothèque de bas niveau.
Rmano
1

Idée:

convertir le fichier texte en pdf et l'utiliser pdfdrawpour générer la vignette.

unoconv est un logiciel qui convertit entre divers documents que la suite bureautique OpenOffice comprend.

Avantage de cette méthode: des vignettes en vrac pour presque tous les documents peuvent être générées facilement en créant un script.

Voir l' essentiel 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 python UNO

    sudo apt-get install python-uno unoconv
    
  3. Installer les polices nécessaires (spécialement pour la langue internationale)

    Copiez les polices dans /usr/share/fonts/truetype/Ensuite, exécutezfc-cache

  4. Exécutez 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 une vignette PDF à l'aide de l'outil MuPDF

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

question similaire sur SO

Prinz
la source
1
Hmmm ... les fichiers texte ne sont PAS des fichiers de traitement de texte. Il y a ici une idée fausse assez basique. Les fichiers texte sont des sources de programme, des journaux, juste des fichiers ".txt", etc. Les documents Office et les PDF ont leurs vignettes qui fonctionnent bien.
Rmano
@Rmano: Passer par PDF est une technique souvent utilisée par le logiciel ECM lors de la génération d'aperçus, même pour les formats que personne ne convertit généralement en PDF, tels que les fichiers journaux. C'est donc une bonne idée.
Nicolas Raoul