Gerar miniaturas para texto?

10

Eu preciso gerar miniaturas para alguns arquivos de texto. Obviamente, o sistema de alguma forma tem a capacidade de fazer exatamente isso (veja a captura de tela). Existe alguma maneira de acessar essas imagens e copiá-las para uso posterior?

Ou existe um comando especial (ferramenta) para isso?

Euolheiparaisto: thumbnailing da linha de comando

E isso: Como posso instruir o Nautilus a pré-gerar miniaturas?

Quais foram úteis, mas nenhum poderia lidar com texto.

    
por user10607 10.12.2014 / 15:09

2 respostas

5

Usando o Imagemagick para criar ícones de texto

Baseado no mesmo princípio que aqui , o script abaixo cria um ícone de texto a partir de um arquivo de texto com a ajuda de Imagemagick.

A cor da imagem de fundo arredondada e a cor do texto podem ser definidas no cabeçalho de um script (bem como em várias outras propriedades).

Oquefaz
Elelêoarquivodetexto,pegaasprimeirasquatrolinhas(definidasemn_lines=4),osprimeirossetecaracteres(definidosemn_chars=10)decadalinhaecriaumasobreposiçãosobreumaimagemdotamanho,definidaem,e.psize="100x100" .

Como usar

O script precisa de imagemagick para ser instalado:

sudo apt-get install imagemagick

Então:

  1. Copie o script em um arquivo vazio
  2. Salve como create_texticon.py
  3. definido na seção principal:

    • a cor do fundo do ícone
    • a cor da camada de texto do ícone
    • O tamanho do ícone criado
    • O número de linhas a mostrar no ícone
    • O número de (primeiros) caracteres por linha a mostrar no ícone
    • O caminho onde salvar a imagem
  4. Execute-o com seu arquivo de texto como argumento:

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

O script

#!/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
    
por Jacob Vlijm 28.02.2015 / 08:58
1

Idéia:

converta o arquivo de texto em pdf e use pdfdraw para gerar a miniatura.

unoconv is a software that converts between various documents that the OpenOffice office suite understands.

Vantagem desse método: Miniaturas em massa para quase todos os documentos podem ser geradas facilmente criando um script.

Veja gist para as etapas.

  1. Instale o pacote headless do OpenOffice

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Instale a biblioteca python do UNO

    sudo apt-get install python-uno unoconv
    
  3. Instale as fontes necessárias (especialmente para o idioma internacional)

    Copiar fontes para /usr/share/fonts/truetype/ Em seguida, execute fc-cache

  4. Execute o OpenOffice como um serviço

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Converter documento para PDF usando o comando unoconv

    unoconv -f pdf __[filename]__
    
  6. Crie uma miniatura de PDF usando a ferramenta MuPDF

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

pergunta semelhante em SO

    
por Prinz 28.02.2015 / 07:51