簡體   English   中英

將 pdf 轉換為 jpg 圖像的最快方法是什么?

[英]what is fastest way to convert pdf to jpg image?

我正在嘗試將多個 pdf(10k +)轉換為 jpg 圖像並從中提取文本。 我目前正在使用pdf2image python 庫,但它相當慢,有沒有比這更快/最快的庫?

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

注意:我使用的是 ubantu 18.04
CPU:4核8線程(銳龍3 3100)
memory:8 GB

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")

有了這個測試文檔,我看到:

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

所以 2GB 的 memory 和 4.8s 的經過時間。

你可以在 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")

我懂了:

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

670MB 的 memory 和 2.6 秒的經過時間。

他們都在幕后使用 poppler,但 pyvips 直接調用庫而不是使用進程和臨時文件,並且可以重疊加載和保存。

您可以將 pyvips 配置為使用 pdfium 而不是 poppler,但根據我的經驗,它們的速度大致相同。

您可以使用多處理來進一步加快速度。 這將更好地與 pyvips 一起使用,因為 memory 的使用較低,而且它沒有使用巨大的臨時文件。

嘗試以下

  1. pypdfium2
  2. 使用 python subprocess進程 https://blog.alivate.com.au/poppler-windows/

使用轉換器,那么速度通常與文件大小和復雜性有關,因為每次運行都需要重新構建內容。 對於 PDF (您不是自己生成)可能需要不同的解決方案,但是您引用的系統需要幾個步驟,因此“最快”的是核心機器代碼二進制文件,通常是 cli 版本,沒有任何較慢的包裝應用程序。

作為一個粗略的經驗法則,每分鍾 100 x 150dpi png 頁是合理的,因此 10 分鍾前剛剛開始的運行剛剛完成 947 頁(例如每秒 1.578 頁或每頁 0.6336 秒)。

在最近對單個復雜頁面的壓力測試中(在套件上與您的不太不同),分辨率是最大的因素,因此 1 個復雜圖表頁面需要 1.6 到 14+ 秒(取決於 output 分辨率)並且使用多線程僅將其減少到 12秒https://stackoverflow.com/a/73060439/10802527

Pdf2image 是圍繞帶有 pdfimages pdftotext 和 pdftoppm 而不是 jpg 的poppler構建的,我建議使用pdftoppm -png因為結果應該更清晰,因此更快更精簡 output 看起來不錯。

Imagemagick 不能在沒有 GhostScript 和 output 文本的情況下進行轉換,所以快速路由核心有Artifex GhostScript 還要考慮/與姊妹應用程序MuPDF (Mutool)進行比較,它同時具有圖像和文本輸出、多線程和條帶。

Chrome/Edge/Chromium 和 Foxit/Skia 解決方案的核心是 PDFium 二進制文件,可以在不同平台的各種 forms 中找到。

我的工具包上的一些粗略時間是 150 dpi 的大文件

poppler/pdftoppm -f 1 -l 100 -png = 100 pages from 13,234 us-public-health-and-welfare-code.pdf
or similar speed
pdftocairo -f 1 -l 100 -png -r 150 us-public-health-and-welfare-code.pdf time/out
The current time is: 17:17:17
The current time is: 17:18:08
100 pages as png = 51 seconds

每分鍾 100 多頁(優於大多數高速打印機)

xpdf pdftopng  with settings for 150dpi x 100 from 13234pages.pdf
The current time is: 17:25:27
The current time is: 17:25:42
100 pages as png = 15 seconds

每分鍾 400 頁

MuTool convert -o time/out%d.png -O resolution=150  x 100 from 13234pages.pdf
The current time is: 17:38:14
The current time is: 17:38:25
100 pages as png = 11 seconds

每分鍾 545 頁

這可以改善

mutool draw -st -P -T 4 -B 2048 -r 150 -F png -o ./time/out%d.png 13234pages.pdf 1-100
total 5076ms (0ms layout) / 100 pages for an average of 50ms

每分鍾 1,182 頁

還有其他好的庫可以在同一時間范圍內以同樣快的速度呈現,但通常它們需要一個核心 GPU/CPU/內存/字體等。然后在一台設備上,多個並行進程通常會失敗。 多處理的唯一方法是並行設備中的順序文件集的批處理塊,以便升級到“CPU”農場。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM