将 pdf 图像转换为 jpg 图像的最快方法是什么? [关闭]

2024-04-30

我正在尝试将多个 pdf(10k +)转换为 jpg 图像并从中提取文本。我目前正在使用pdf2imagepython 库,但它相当慢,有没有比这更快/最快的库?

from pdf2image import convert_from_bytes
images = convert_from_bytes(open(path,"rb").read())

注意:我使用的是ubuntu 18.04
CPU:4核8线程(锐龙3 3100)
内存:8GB


pyvips https://pypi.org/project/pyvips/比 pdf2image 快一点。我做了一个小基准:

#!/usr/bin/python3

import sys
from pdf2image import convert_from_bytes

images = convert_from_bytes(open(sys.argv[1], "rb").read())
for i in range(len(images)):
    images[i].save(f"page-{i}.jpg")

With 这个测试文档 http://www.rollthepotato.net/%7Ejohn/nipguide.pdf I see:

$ /usr/bin/time -f %M:%e ./pdf.py nipguide.pdf 
1991624:4.80

2GB 内存和 4.8 秒的运行时间。

你可以在 pyvips 中将其写为:

#!/usr/bin/python3

import sys
import pyvips

image = pyvips.Image.new_from_file(sys.argv[1])
for i in range(image.get('n-pages')):
    image = pyvips.Image.new_from_file(filename, page=i)
    image.write_to_file(f"page-{i}.jpg")

I see:

$ /usr/bin/time -f %M:%e ./vpdf.py nipguide.pdf[dpi=200]
676436:2.57

670MB 内存和 2.6 秒运行时间。

它们都在幕后使用 poppler,但 pyvips 直接调用库而不是使用进程和临时文件,并且可以重叠加载和保存。

您可以将 pyvips 配置为使用 pdfium 而不是 poppler,尽管这需要更多工作,因为许多发行版仍未打包 pdfium。对于某些 PDF,pdfium 可能比 poppler 快 3 倍。

您可以使用多重处理来进一步提高速度。这对于 pyvips 来说效果更好,因为内存使用量较低,而且它不使用巨大的临时文件。

如果我修改 pyvips 代码以仅呈现单个页面,我可以使用gnu并行 https://www.gnu.org/software/parallel/在单独的进程中渲染每个页面:

$ time parallel ../vpdf.py us-public-health-and-welfare-code.pdf[dpi=150] ::: {1..100}
real    0m1.846s
user    0m38.200s
sys 0m6.371s

150dpi 下的 100 页只需 1.8 秒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pdf 图像转换为 jpg 图像的最快方法是什么? [关闭] 的相关文章

随机推荐