如何提前生成缩略图(主要为 pdf)

如何提前生成缩略图(主要为 pdf)

我有一组相当大的文档(150 GiB ~5000 个文件),并且想知道如何预生成缩略图,最好是从命令行生成,这样当我导航到该文件夹​​时,就不必等待它们被创建。

答案1

感谢评论,我决定使用其中一个脚本这篇推荐的 AskUbuntu 帖子。

我只是将其复制到一个文件中,将其保存到我的 ~/bin(在我的情况下为 generate-thumbnails)并chmod +x在其上发布。然后我只是导航到 ~/Documents 文件夹并运行。generate-thumbnails *我不知道花了多长时间,但当我下次醒来时,一切都很好。

请注意,您可能需要安装gir1.2-gnomedesktop-3.0

sudo apt-get install gir1.2-gnomedesktop-3.0

由于它不会浪费时间生成重复项,因此它将是一个影响较小的 cron 作业(第一次运行后)。

从终端提示符crontab -e如果这是您第一次编辑 crontab,它会要求您选择一个编辑器。我只使用 nano,我会为其提供键盘命令。

将以下内容添加到末尾...

0 4 * * * /home/user/bin/generate-thumbnails /home/user*
  • Ctl o 将保存文件。
  • Ctl x 将退出。(如果您有语法错误,它会通知您,然后您可以再次执行crontab -e。这将设置 cron 每天早上 4 点运行。
  • 如果您想更改它或查看其他 cron 选项..https://help.ubuntu.com/community/CronHowto是寻找选择的好地方。

运行此脚本的主要原因:

  • 它将递归遍历子目录
  • 它知道重复
  • 它对视频同样有效
  • 它可以在其他 DE 中工作(我根据我正在做的事情经常切换)
  • 这对于 cron 任务来说很好

这是脚本......(谢谢詹姆斯·亨斯特里奇!!

#!/usr/bin/env python3
import os
import sys

from gi.repository import Gio, GnomeDesktop

def make_thumbnail(factory, filename):
    mtime = os.path.getmtime(filename)
    # Use Gio to determine the URI and mime type
    f = Gio.file_new_for_path(filename)
    uri = f.get_uri()
    info = f.query_info(
        'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
    mime_type = info.get_content_type()

    if factory.lookup(uri, mtime) is not None:
        print("FRESH       %s" % uri)
        return False

    if not factory.can_thumbnail(uri, mime_type, mtime):
        print("UNSUPPORTED %s" % uri)
        return False

    thumbnail = factory.generate_thumbnail(uri, mime_type)
    if thumbnail is None:
        print("ERROR       %s" % uri)
        return False

    print("OK          %s" % uri)
    factory.save_thumbnail(thumbnail, uri, mtime)
    return True

def thumbnail_folder(factory, folder):
    for dirpath, dirnames, filenames in os.walk(folder):
        for filename in filenames:
            make_thumbnail(factory, os.path.join(dirpath, filename))

def main(argv):
    factory = GnomeDesktop.DesktopThumbnailFactory()
    for filename in argv[1:]:
        if os.path.isdir(filename):
            thumbnail_folder(factory, filename)
        else:
            make_thumbnail(factory, filename)

if __name__ == '__main__':
    sys.exit(main(sys.argv))

答案2

Bash 脚本(向蒂姆致敬)。来自以下链接的脚本和评论:

for i in *.jpg
do
djpeg $i | pnmscale -xysize 48 38 | cjpeg -opti -progr -qual ‘75%’ > TN_$i
echo $i processed
done
  • 这将为以 .jpg 结尾的文件制作缩略图,并创建名为 TN_*.jpg 的缩略图。根据您的喜好调整参数。

  • 对于缩略图,您通常不想使用 imagemagick 或 convert 或其他什么;对于我的正常尺寸(48×38),它会创建一个巨大的 50K jpg,而还有其他方法可以将它们变得小得多:

  • 这使平均图像大小保持在 1K 左右 - 更适合缩略图页面!

  • pnmscale 将默认安装

  • 安装 djpeg 和 cjpeg

    sudo apt-get install libjpeg-turbo-progs
    
  • 编辑:不适用于 PDF


忽略评论中有关使用 imagemagick 的建议...

sudo apt-get install imagemagick

并使用与上面类似的方法,但在这种情况下使用来自 IM 的转换命令:

#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Processing image $i ..."
/usr/bin/convert -thumbnail 100X100 $i $i.png
done

这是一个详尽的文件关于使用 IM 制作缩略图。您可以指定高度、宽度等。示例来自链接:

例如,这将把 JPG 图像转换为 GIF 缩略图,放在刚刚创建的“thumbs”子目录中,宽度为 100 像素,高度为 100 像素

mkdir thumbs  
mogrify  -format gif -path thumbs -thumbnail 100x100 *.jpg

哦,标题是专门针对 PDF 的。使用 IM...

convert -thumbnail 100x100 1.pdf 1.png

相关内容