¿Generar miniaturas para texto?

10

Necesito generar miniaturas para algunos archivos de texto. Obviamente, el sistema de alguna manera tiene la capacidad de hacer exactamente esto (ver la captura de pantalla). ¿Hay alguna forma de que pueda acceder a estas imágenes y simplemente copiarlas para su uso posterior?

¿O hay un comando especial (herramienta) para esto?

somefolder.png

Miré esto: miniaturas de línea de comando

Y esto: ¿Cómo puedo instruir a Nautilus para que pregenere las miniaturas?

Lo cual fue útil pero ninguno pudo lidiar con el texto.

usuario10607
fuente
@Rmano, ¿de qué tamaño deberían ser los iconos?
Jacob Vlijm
@JacobVlijm La idea es crear una miniatura: la forma básica es script -s width input_url output_filecuál es el formato utilizado por nautilus. Ver por ejemplo rlog.rgtti.com/2011/11/24/… y la página vinculada ...
Rmano

Respuestas:

5

Usando Imagemagick para crear iconos de texto

Basado en el mismo principio que aquí , el siguiente script crea un icono de texto a partir de un archivo de texto con la ayuda de Imagemagick.

El color de la imagen de fondo redondeada y el color del texto se pueden establecer en el encabezado de una secuencia de comandos (así como una serie de otras propiedades).

ingrese la descripción de la imagen aquí

Lo que hace
Lee el archivo de texto, toma las primeras cuatro líneas (establecidas n_lines = 4), los primeros siete caracteres (establecidos n_chars = 10) de cada línea, y crea una superposición sobre una imagen del tamaño, establecida, por ejemplo psize = "100x100".

Cómo utilizar

El script debe imagemagickestar instalado:

sudo apt-get install imagemagick

Luego:

  1. Copie el script en un archivo vacío
  2. Guárdalo como create_texticon.py
  3. establecido en la sección de la cabeza:

    • el color del fondo del icono
    • el color de la capa de texto del ícono
    • El tamaño del icono creado.
    • El número de líneas para mostrar en el ícono
    • El número de (primeros) caracteres por línea para mostrar en el icono
    • El camino donde guardar la imagen
  4. Ejecútelo con su archivo de texto como argumento:

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

La secuencia de comandos

#!/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
fuente
¿Es esta solución persistente?
αғsнιη
¿Qué quieres decir con persistente? El script crea los íconos, o ¿entendí mal la pregunta?
Jacob Vlijm
1
@Kasiya Para usarlo como miniaturas, consulte rlog.rgtti.com/2011/11/24/… y rlog.rgtti.com/2010/11/28/adding-a-gnomenautilus-thumbnailer --- Nautilus lo actualizará automáticamente. Buena idea; ahora solo estoy pensando en usar pygmentpara sintaxis resaltarlo y será perfecto. ¡Gracias!
Rmano
2
@JacobVlijm no es necesario. Simplemente suelte el script en el lugar correcto y escriba el /usr/share/thumbnailers/...archivo y los íconos aparecerán automáticamente, y serán administrados por el sistema (en caché, actualizados en los cambios de archivos, etc.)
Rmano
1
@JacobVlijm lo que sea --- Tengo la idea. Creo que la respuesta es suficiente como es. Una pena que no podamos aprovechar la forma del sistema de hacerlo, pero empiezo a suponer que está codificado en alguna biblioteca de bajo nivel.
Rmano
1

Idea :

convierta el archivo de texto a pdf y úselo pdfdrawpara generar la miniatura.

Unoconv es un software que convierte entre varios documentos que la suite de oficina OpenOffice entiende.

Ventaja de este método: las miniaturas masivas para casi todos los documentos se pueden generar fácilmente creando un script.

Vea la esencia de los pasos.

  1. Instalar el paquete sin cabeza de OpenOffice

    sudo apt-get install  openoffice.org-headless  openoffice.org-java-common  openoffice.org-writer  openoffice.org-calc  openoffice.org-impress
    
  2. Instalar la biblioteca de Python UNO

    sudo apt-get install python-uno unoconv
    
  3. Instale las fuentes necesarias (especialmente para el idioma internacional)

    Copie las fuentes para /usr/share/fonts/truetype/luego ejecutarfc-cache

  4. Ejecute OpenOffice como un servicio

    soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
    
  5. Convierta documentos a PDF usando el comando unoconv

    unoconv -f pdf __[filename]__
    
  6. Cree una miniatura de PDF utilizando la herramienta MuPDF

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

pregunta similar sobre SO

Prinz
fuente
1
Hmmm ... los archivos de texto NO son archivos de procesador de textos. Hay una idea errónea bastante básica aquí. Los archivos de texto son fuentes de programas, registros, solo archivos ".txt", etc. Los documentos de Office y los PDF tienen sus miniaturas funcionando bien.
Rmano
@Rmano: Ir a través de PDF es una técnica que el software de ECM suele utilizar para generar vistas previas, incluso para formatos que nadie suele convertir a PDF, como los archivos de registro. Entonces, esta es una buena idea.
Nicolas Raoul