Gerar miniaturas para texto?

10

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?

somefolder.png

Eu olhei para isso: miniatura da linha de comando

E isto: como instruir o Nautilus para gerar previamente miniaturas?

Que foram úteis, mas ninguém conseguiu lidar com o texto.

user10607
fonte
@Rmano, que tamanho teriam os ícones?
Jacob Vlijm 28/02
@JacobVlijm A idéia é criar um thumbnailer - a forma básica é script -s width input_url output_filequal é o formato usado pelo nautilus. Veja, por exemplo, rlog.rgtti.com/2011/11/24/… e a página vinculada ...
Rmano 28/02

Respostas:

5

Usando o Imagemagick para criar ícones de texto

Com base no mesmo princípio aqui , o script abaixo cria um ícone de texto de um arquivo de texto com a ajuda do Imagemagick.

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

insira a descrição da imagem aqui

O que ele faz
Lê o arquivo de texto, pega as quatro primeiras linhas (inseridas n_lines = 4), os sete primeiros caracteres (inseridas n_chars = 10) de cada linha e cria uma sobreposição sobre uma imagem do tamanho, definida por exemplo psize = "100x100".

Como usar

O script precisa imagemagickser 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 plano de fundo do ícone
    • a cor do camada de texto do ícone
    • O tamanho do ícone criado
    • O número de linhas a serem mostradas no ícone
    • O número de (primeiros) caracteres por linha a serem exibidos 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
Jacob Vlijm
fonte
Esta solução é persistente?
28515
O que você quer dizer com persistente? O script cria os ícones ou entendi mal a pergunta?
Jacob Vlijm
1
@Kasiya Para usá-lo como miniaturizador, consulte rlog.rgtti.com/2011/11/24/… e rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus o atualizará automaticamente. Boa ideia; agora apenas pensando em usar pygmenta sintaxe para destacá-lo e será perfeito. Obrigado!
Rmano 28/02
2
@JacobVlijm não é necessário. Basta soltar o script no lugar correto e escrever o /usr/share/thumbnailers/...arquivo e os ícones automagicamente vai aparecer, e será gerida pelo sistema (em cache, atualizado sobre as alterações de arquivos, etc.)
Rmano
1
@JacobVlijm seja o que for --- Entendi a idéia. Eu acho que a resposta é suficiente como é. Pena que não podemos aproveitar a maneira do sistema de fazê-lo, mas começo a supor que seja codificado em alguma biblioteca de baixo nível.
Rmano
1

Idéia :

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

O unoconv é um software que converte entre vários documentos que a suíte de escritório do OpenOffice entende.

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

Veja o essencial para as etapas.

  1. Instale o pacote sem cabeça 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 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/Depois executarfc-cache

  4. Execute o OpenOffice como um serviço

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

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

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

pergunta semelhante sobre SO

Prinz
fonte
1
Hmmm ... arquivo de texto NÃO são arquivos do processador de texto. Há um equívoco bastante básico aqui. Os arquivos de texto são fontes de programas, logs, apenas arquivos ".txt", etc. Os documentos e PDFs do Office têm suas miniaturas funcionando bem.
Rmano 28/02
@Rmano: A transferência via PDF é uma técnica frequentemente usada pelo software ECM ao gerar visualizações, mesmo para formatos que ninguém costumava converter em PDF, como arquivos de log. Então, essa é uma boa ideia.
Nicolas Raoul