Generare miniature per il testo?


10

Devo generare miniature per alcuni file di testo. Ovviamente il sistema in qualche modo ha la capacità di fare esattamente questo (vedi la schermata). Posso accedere a queste immagini e copiarle per un uso successivo?

O c'è un comando speciale (strumento) per questo?

somefolder.png

Ho osservato questo: miniature da riga di comando

E questo: come posso istruire Nautilus a pre-generare miniature?

Che erano utili ma nessuno poteva gestire il testo.


@Rmano, che dimensione dovrebbero avere le icone?
Jacob Vlijm,

@JacobVlijm L'idea è quella di creare un thumbnailer --- il modulo di base script -s width input_url output_fileè il formato utilizzato da nautilus. Vedi ad esempio rlog.rgtti.com/2011/11/24/… e la pagina collegata ...
Rmano,

Risposte:


5

Utilizzo di Imagemagick per creare icone di testo

Basato sullo stesso principio qui , lo script seguente crea un'icona di testo da un file di testo con l'aiuto di Imagemagick.

Il colore dell'immagine di sfondo arrotondato e il colore del testo possono essere impostati nella testa di uno script (così come un numero di altre proprietà).

inserisci qui la descrizione dell'immagine

Cosa fa
Legge il file di testo, prende le prime quattro righe (impostate n_lines = 4), i primi sette caratteri (impostate n_chars = 10) di ciascuna riga e crea una sovrapposizione su un'immagine delle dimensioni, impostata ad es psize = "100x100".

Come usare

Lo script deve imagemagickessere installato:

sudo apt-get install imagemagick

Poi:

  1. Copia lo script in un file vuoto
  2. Salva come create_texticon.py
  3. impostato nella sezione testa:

    • il colore dello sfondo dell'icona
    • il colore del textlayer dell'icona
    • La dimensione dell'icona creata
    • Il numero di righe da mostrare nell'icona
    • Il numero di (primi) caratteri per riga da mostrare nell'icona
    • Il percorso in cui salvare l'immagine
  4. Eseguilo con il tuo file di testo come argomento:

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

Il copione

#!/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

Questa soluzione è persistente?
αғsнιη,

Cosa intendi con persistente? La sceneggiatura crea le icone o ho frainteso la domanda?
Jacob Vlijm,

1
@Kasiya Per usarlo come miniature, vedere rlog.rgtti.com/2011/11/24/… e rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus lo aggiornerà automaticamente. Bella idea; ora sto solo pensando di usare la pygmentsintassi per evidenziarlo e sarà perfetto. Grazie!
Rmano,

2
@JacobVlijm non necessario. Basta rilasciare lo script nella posizione corretta e scrivere il /usr/share/thumbnailers/...file e le icone appariranno automaticamente e saranno gestite dal sistema (memorizzato nella cache, aggiornato sulle modifiche ai file, ecc.)
Rmano,

1
@JacobVlijm qualunque --- Ho avuto l'idea. Penso che la risposta sia sufficiente così com'è. Un peccato che non possiamo sfruttare il modo in cui il sistema lo fa, ma inizio a supporre che sia codificato in qualche libreria di basso livello.
Rmano

1

Idea:

converti il ​​file di testo in pdf e usa pdfdrawper generare la miniatura.

unoconv è un software che converte tra vari documenti che la suite per ufficio OpenOffice comprende.

Vantaggio di questo metodo: è possibile generare facilmente miniature in blocco per quasi tutti i documenti creando uno script.

Vedi gist per i passaggi.

  1. Installa il pacchetto senza testa di OpenOffice

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Installa libreria Python UNO

    sudo apt-get install python-uno unoconv
    
  3. Installa i caratteri necessari (specialmente per la lingua internazionale)

    Copia i caratteri su /usr/share/fonts/truetype/Quindi eseguifc-cache

  4. Esegui OpenOffice come servizio

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Converti il ​​documento in PDF utilizzando il comando unoconv

    unoconv -f pdf __[filename]__
    
  6. Crea miniature PDF usando lo strumento MuPDF

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

domanda simile su SO


1
Hmmm ... i file di testo NON sono file di wordprocessor. C'è un malinteso di base qui. I file di testo sono fonti di programma, registri, file ".txt", ecc. I documenti e i PDF di Office hanno le miniature funzionanti.
Rmano,

@Rmano: il passaggio tramite PDF è una tecnica spesso utilizzata dal software ECM durante la generazione di anteprime, anche per i formati che nessuno di solito converte in PDF, come i file di registro. Quindi, questa è una buona idea.
Nicolas Raoul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.