0

我正在尝试从此 PDF 文件中提取所有图像:https ://s3.us-west-2.amazonaws.com/secure.notion-static.com/566ca0ca-393d-47d4-b3fc-eb3632777bf8/example.pdf ?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210610%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210610T041944Z&X-Amz-Expires=86400&X-Amz-Signature=2f8a2d08647e4953448f890adb56d11b1d01e21b941ca3dc9f9b5ab3caa7f018&X-Amz -SignedHeaders=host&response-content-disposition=文件名%20%3D%22example.pdf%22

使用 fitz(PyMuPDF 模块) 使用以下代码提取所有图像,以及小图标。我必须避免提取这些图标并仅获取图像。

import fitz
file = fitz.open("example.pdf")

pdf = fitz.open(file)
page = len(file)

for pic in range(page):
    image_list = pdf.getPageImageList(pic)
    j = 1
    for image in image_list:
        xref = image[0]
        pix = fitz.Pixmap(pdf, xref)
        #print(len(pix)+ 88)
        if pix.n < 5:
            pix.writePNG(f'{pic}_{j}.png')
        else:
            pix1 = fitz.open(fitz.csRGB, pix)
            pix1.writePNG(f'{xref}_{pic}.png')
            pix1 = None
        pix = None
        j = j + 1

    print(f'Total images on page {pic} are {len(image_list)}')
4

1 回答 1

1

get_page_images()返回页面引用的所有图像(直接或间接)的列表。

>>> doc = fitz.open("pymupdf.pdf")
>>> imglist = doc.getPageImageList(0)
>>> for img in imglist: print img
((241, 0, 1043, 457, 8, 'DeviceRGB', '', 'Im1'))

在上面的示例doc.getPageImageList(0)中,返回页面上显示的图像列表。每个条目看起来像[xref, smask, width, height, bpc, colorspace, alt. colorspace, name]

因此,在上面的示例中,值1043457对应于图像的宽度和高度。您可以提供一个if condition消除小尺寸图像/图标。

此文档链接中的更多信息

于 2021-06-10T05:39:32.263 回答