我需要为一些文本文件生成缩略图。显然,系统以某种方式有能力做到这一点(见屏幕截图)。有什么方法可以访问这些图像并复制它们以供以后使用吗?
或者是否有一个特殊的命令(工具)可以实现这一点?
我看了看这个: 命令行缩略图
它们很有用,但是都不能处理文本。
答案1
使用 Imagemagick 创建文本图标
基于与这里,下面的脚本在 Imagemagick 的帮助下从文本文件创建文本图标。
圆角背景图像的颜色和文本颜色可以在脚本的头部设置(以及许多其他属性)。
它能做什么
它读取文本文件,取出前四行(在中设置n_lines = 4
)、每行的前七个字符(在中设置n_chars = 10
),并在图像上创建一个覆盖层,其大小在中设置,例如psize = "100x100"
。
如何使用
imagemagick
需要安装脚本:
sudo apt-get install imagemagick
然后:
- 将脚本复制到空文件中
- 另存为
create_texticon.py
在头部部分设置:
- 图标背景的颜色
- 图标文本层的颜色
- 创建的图标的大小
- 图标中显示的行数
- 图标中每行显示的(前)字符数
- 图像保存的路径
使用您的文本文件作为参数来运行它:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
剧本
#!/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
答案2
主意 :
将文本文件转换为pdf并用于pdfdraw
生成缩略图。
unoconv 是一个可以在 OpenOffice 办公套件能够理解的各种文档之间进行转换的软件。
此方法的优点:通过创建脚本可以轻松生成几乎所有文档的批量缩略图。
看要旨了解步骤。
安装 OpenOffice 无头包
sudo apt-get install openoffice.org-headless openoffice.org-java-common openoffice.org-writer openoffice.org-calc openoffice.org-impress
安装 UNO python 库
sudo apt-get install python-uno unoconv
安装必要的字体(特别是针对国际语言)
将字体复制到
/usr/share/fonts/truetype/
然后运行fc-cache
将 OpenOffice 作为服务运行
soffice -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
使用 unoconv 命令将文档转换为 PDF
unoconv -f pdf __[filename]__
使用 MuPDF 工具创建 PDF 缩略图
pdfdraw -r 100 -o __[output-thumbnail]__ __[pdf-file]__ 1
类似的问题所以