Necesito generar miniaturas para algunos archivos de texto.
Obviamente, el sistema de alguna manera tiene la capacidad de hacer exactamente esto (vea la captura de pantalla). ¿Hay alguna forma de acceder a estas imágenes y simplemente copiarlas para usarlas más adelante?
¿O hay un comando especial (herramienta) para esto?
Miré esto:
miniaturas de línea de comando
Y esto:
¿Cómo puedo indicarle a Nautilus que genere miniaturas previamente?
Que fueron útiles pero ninguno podía tratar con texto.
Respuesta aceptada:
Usando Imagemagick para crear íconos 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 un script (así como una serie de otras propiedades).
Qué hace
Lee el archivo de texto, toma las primeras cuatro líneas (establecidas en n_lines = 4
), los primeros siete caracteres (establecidos en n_chars = 10
) de cada línea y crea una superposición sobre una imagen del tamaño establecido, p. psize = "100x100"
.
Cómo usar
El script necesita imagemagick
a instalar:
sudo apt-get install imagemagick
Entonces:
- Copie el script en un archivo vacío
- Guardarlo como
create_texticon.py
-
establecido en la sección principal:
- el color del fondo del icono
- el color de la capa de texto del icono
- El tamaño del icono creado
- El número de líneas a mostrar en el icono
- El número de (primeros) caracteres por línea para mostrar en el icono
- La ruta donde guardar la imagen
-
Ejecútelo con su archivo de texto como argumento:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
El guión
#!/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 = "//eadn-wc01-5196795.nxedge.io/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