python - 在python中从PDF中提取图像而不重新采样?

标签 python image pdf extract pypdf2

如何以原始分辨率和格式从 pdf 文档中提取所有图像? (意味着将 tiff 提取为 tiff,将 jpeg 提取为 jpeg 等,并且无需重新采样)。布局并不重要,我不在乎源图像是否位于页面上。

我使用的是 python 2.7,但如果需要可以使用 3.x。

最佳答案

您可以使用模块 PyMuPDF。这会将所有图像输出为 .png 文件,但开箱即用且速度很快。

import fitz
doc = fitz.open("file.pdf")
for i in range(len(doc)):
    for img in doc.getPageImageList(i):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:       # this is GRAY or RGB
            pix.writePNG("p%s-%s.png" % (i, xref))
        else:               # CMYK: convert to RGB first
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG("p%s-%s.png" % (i, xref))
            pix1 = None
        pix = None

see here for more resources

这是 fitz 1.19.6 的修改版本:

import os
import fitz  # pip install --upgrade pip; pip install --upgrade pymupdf
from tqdm import tqdm # pip install tqdm

workdir = "your_folder"

for each_path in os.listdir(workdir):
    if ".pdf" in each_path:
        doc = fitz.Document((os.path.join(workdir, each_path)))

        for i in tqdm(range(len(doc)), desc="pages"):
            for img in tqdm(doc.get_page_images(i), desc="page_images"):
                xref = img[0]
                image = doc.extract_image(xref)
                pix = fitz.Pixmap(doc, xref)
                pix.save(os.path.join(workdir, "%s_p%s-%s.png" % (each_path[:-4], i, xref)))
                
print("Done!")

关于python - 在python中从PDF中提取图像而不重新采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2693820/

相关文章:

Android PDF 从内部存储打开后立即关闭

javascript - CSS:图像随宽度缩放

c# - 使用C#从jsignature转换base30图像

java - jframe 中的多个 'imageviews'

pdf - Kendo Grid 波斯语/阿拉伯语 PDF 导出问题

Python从字符串中间隔字母中删除单个空格的最快方法

python - 如果 Pandas 系列中包含列表中的单词,则替换部分字符串的最快方法

python - 在 Cassandra 中创建现有 key 空间的副本(使用新名称)

永远返回相同内容的 Python 生成器

c# - Internet Explorer PDF 阅读器