Thumbnails für Text generieren?

10

Ich muss Miniaturansichten für einige Textdateien generieren. Offensichtlich hat das System irgendwie die Möglichkeit, genau dies zu tun (siehe Screenshot). Gibt es eine Möglichkeit, auf diese Bilder zuzugreifen und sie zur späteren Verwendung zu kopieren?

Oder gibt es dafür einen speziellen Befehl (Werkzeug)?

somefolder.png

Ich habe mir das angesehen: Miniaturansicht der Befehlszeile

Und das: Wie kann ich Nautilus anweisen, Miniaturansichten vorab zu generieren?

Welche waren nützlich, aber keiner konnte mit Text umgehen.

user10607
quelle
@Rmano, wie groß müssten die Symbole sein?
Jacob Vlijm
@JacobVlijm Die Idee ist, einen Thumbnailer zu erstellen - die Grundform ist script -s width input_url output_filedas von Nautilus verwendete Format. Siehe zum Beispiel rlog.rgtti.com/2011/11/24/… und die verlinkte Seite ...
Rmano

Antworten:

5

Verwenden von Imagemagick zum Erstellen von Textsymbolen

Basierend auf dem gleichen Prinzip wie hier erstellt das folgende Skript mithilfe von Imagemagick ein Textsymbol aus einer Textdatei.

Die Farbe des abgerundeten Hintergrundbilds und die Textfarbe können im Kopf eines Skripts (sowie in einer Reihe anderer Eigenschaften) festgelegt werden.

Geben Sie hier die Bildbeschreibung ein

Was es tut
Es liest die Textdatei, nimmt die ersten vier Zeilen (gesetzt in n_lines = 4), die ersten sieben Zeichen (gesetzt in n_chars = 10) jeder Zeile und erstellt eine Überlagerung über einem Bild der Größe, z psize = "100x100".

Wie benutzt man

Das Skript muss imagemagickinstalliert sein:

sudo apt-get install imagemagick

Dann:

  1. Kopieren Sie das Skript in eine leere Datei
  2. Speichern Sie es als create_texticon.py
  3. im Kopfteil eingestellt:

    • die Farbe des Hintergrunds des Symbols
    • die Farbe der Textschicht des Symbols
    • Die Größe des erstellten Symbols
    • Die Anzahl der Zeilen, die im Symbol angezeigt werden sollen
    • Die Anzahl der (ersten) Zeichen pro Zeile, die im Symbol angezeigt werden sollen
    • Der Pfad, in dem das Bild gespeichert werden soll
  4. Führen Sie es mit Ihrer Textdatei als Argument aus:

    python3 /path/to/create_texticon.py </path/to/textfile.txt>
    

Das Skript

#!/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
quelle
Ist diese Lösung dauerhaft?
αғsнιη
Was meinst du mit hartnäckig? Das Skript erstellt die Symbole oder habe ich die Frage falsch verstanden?
Jacob Vlijm
1
@Kasiya Informationen zur Verwendung als Miniaturansicht finden Sie unter rlog.rgtti.com/2011/11/24/… und rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus wird es aktualisieren automatisch. Gute Idee; Jetzt denke pygmentich nur daran, die Syntax zu verwenden, um sie hervorzuheben, und sie wird perfekt sein. Vielen Dank!
Rmano
2
@JacobVlijm nicht benötigt. /usr/share/thumbnailers/...Legen Sie das Skript einfach an der richtigen Stelle ab und schreiben Sie die Datei. Die Symbole werden automatisch angezeigt und vom System verwaltet (zwischengespeichert, bei Dateiänderungen aktualisiert usw.)
Rmano
1
@JacobVlijm was auch immer --- Ich habe die Idee. Ich denke, dass die Antwort so wie sie ist ausreichend ist. Schade, dass wir die Systemmethode nicht nutzen können, aber ich nehme an, dass sie in einer Bibliothek auf niedriger Ebene fest codiert ist.
Rmano
1

Idee:

Konvertieren Sie die Textdatei in PDF und verwenden Sie sie pdfdraw, um das Miniaturbild zu generieren.

unoconv ist eine Software, die zwischen verschiedenen Dokumenten konvertiert, die die OpenOffice Office Suite versteht.

Vorteil dieser Methode: Bulk-Miniaturansichten für fast alle Dokumente können einfach durch Erstellen eines Skripts generiert werden.

Siehe Kern für die Schritte.

  1. Installieren Sie das OpenOffice Headless-Paket

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Installieren Sie die UNO-Python-Bibliothek

    sudo apt-get install python-uno unoconv
    
  3. Installieren Sie die erforderlichen Schriftarten (insbesondere für die internationale Sprache).

    Kopieren Sie Schriftarten nach /usr/share/fonts/truetype/Dann ausführenfc-cache

  4. Führen Sie OpenOffice als Dienst aus

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Konvertieren Sie das Dokument mit dem Befehl unoconv in PDF

    unoconv -f pdf __[filename]__
    
  6. Erstellen Sie eine PDF-Miniaturansicht mit dem MuPDF-Tool

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

ähnliche Frage zu SO

Prinz
quelle
1
Hmmm ... Textdateien sind KEINE Textverarbeitungsdateien. Hier gibt es ein ziemlich grundlegendes Missverständnis. Textdateien sind Programmquellen, Protokolle, nur ".txt" -Flies usw. Bei Office-Dokumenten und PDFs funktionieren die Miniaturansichten einwandfrei.
Rmano
@Rmano: Das Wechseln über PDF ist eine Technik, die häufig von ECM-Software beim Generieren von Vorschauen verwendet wird, selbst für Formate, die normalerweise niemand in PDF konvertieren würde, wie z. B. Protokolldateien. Das ist also eine gute Idee.
Nicolas Raoul