Generować miniatury dla tekstu?


10

Potrzebuję wygenerować miniatury dla niektórych plików tekstowych. Oczywiście system w jakiś sposób jest w stanie zrobić dokładnie to (patrz zrzut ekranu). Czy jest jakiś sposób, aby uzyskać dostęp do tych zdjęć i po prostu skopiować je do późniejszego wykorzystania?

Czy jest do tego specjalne polecenie (narzędzie)?

somefolder.png

Patrzyłem na to: thumbnailing linii poleceń

I to: Jak mogę pouczyć Nautilus, aby wstępnie generował miniatury?

Które były przydatne, ale żaden nie mógł poradzić sobie z tekstem.


@Rmano, jaki rozmiar powinny mieć ikony?
Jacob Vlijm

@JacobVlijm Chodzi o stworzenie miniatury - podstawową formą jest script -s width input_url output_fileformat używany przez nautilus. Zobacz na przykład rlog.rgtti.com/2011/11/24/… i połączoną stronę ...
Rmano

Odpowiedzi:


5

Korzystanie z Imagemagick do tworzenia ikon tekstowych

W oparciu o tę samą zasadę, co tutaj , poniższy skrypt tworzy ikonę tekstową z pliku tekstowego za pomocą Imagemagick.

Kolor zaokrąglonego obrazu tła i kolor tekstu można ustawić w nagłówku skryptu (a także w szeregu innych właściwości).

wprowadź opis zdjęcia tutaj

Co robi
Czyta plik tekstowy, pobiera pierwsze cztery wiersze (ustawiane w n_lines = 4), pierwsze siedem znaków (ustawia n_chars = 10) w każdym wierszu i tworzy nakładkę na obraz o rozmiarze ustawionym np psize = "100x100".

Jak używać

Skrypt musi imagemagickzostać zainstalowany:

sudo apt-get install imagemagick

Następnie:

  1. Skopiuj skrypt do pustego pliku
  2. Zapisz to jako create_texticon.py
  3. ustawione w sekcji głowy:

    • kolor tła ikony
    • kolor warstwy tekstowej ikony
    • Rozmiar utworzonej ikony
    • Liczba linii do pokazania na ikonie
    • Liczba (pierwszych) znaków w wierszu wyświetlanych na ikonie
    • Ścieżka do zapisu obrazu
  4. Uruchom go z plikiem tekstowym jako argumentem:

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

Scenariusz

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

Czy to rozwiązanie jest trwałe?
αғsнιη

Co rozumiesz przez „wytrwały”? Skrypt tworzy ikony, czy też źle zrozumiałem pytanie?
Jacob Vlijm

1
@Kasiya Aby użyć go jako miniaturki, zobacz rlog.rgtti.com/2011/11/24/… i rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus zaktualizuje go automatycznie. Dobry pomysł; teraz myślę o użyciu pygmentpodświetlenia składni i będzie idealnie. Dzięki!
Rmano

2
@JacobVlijm nie jest potrzebny. Po prostu upuść skrypt we właściwym miejscu i napisz /usr/share/thumbnailers/...plik, a ikony pojawią się automatycznie i będą zarządzane przez system (buforowane, aktualizowane przy zmianach plików itp.)
Rmano

1
@JacobVlijm cokolwiek --- mam pomysł. Myślę, że odpowiedź jest wystarczająca. Szkoda, że ​​nie możemy wykorzystać systemowego sposobu robienia tego, ale zaczynam przypuszczać, że jest on mocno zakodowany w bibliotece niskiego poziomu.
Rmano

1

Pomysł :

przekonwertować plik tekstowy na pdf i użyć pdfdrawdo wygenerowania miniatury.

unoconv to oprogramowanie, które konwertuje różne dokumenty, które rozumie pakiet biurowy OpenOffice.

Zaleta tej metody: Miniatury zbiorcze dla prawie wszystkich dokumentów można łatwo wygenerować, tworząc skrypt.

Zobacz gist dla kroków.

  1. Zainstaluj pakiet bezgłowy OpenOffice

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Zainstaluj bibliotekę Python UNO

    sudo apt-get install python-uno unoconv
    
  3. Zainstaluj niezbędne czcionki (szczególnie w języku międzynarodowym)

    Skopiuj czcionki do /usr/share/fonts/truetype/Następnie uruchomfc-cache

  4. Uruchom OpenOffice jako usługę

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Konwertuj dokument na format PDF za pomocą polecenia unoconv

    unoconv -f pdf __[filename]__
    
  6. Utwórz miniaturę PDF za pomocą narzędzia MuPDF

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

podobne pytanie na temat SO


1
Hmmm ... plik tekstowy NIE jest plikiem edytora tekstu. Istnieje tutaj dość podstawowe nieporozumienie. Pliki tekstowe to źródła programów, dzienniki, tylko pliki „.txt” itp. Dokumenty Office i pliki PDF działają poprawnie.
Rmano

@Rmano: Przejście przez PDF jest techniką często używaną przez oprogramowanie ECM podczas generowania podglądów, nawet w formatach, których nikt zwykle nie przekonwertowałby na PDF, takich jak pliki dziennika. To dobry pomysł.
Nicolas Raoul
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.