如何避免在 python 中从 PDF 文件中提取小图像元素?

How can I avoid extracting small image elements from PDF file in python?

我正在尝试从此 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=filename%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)}')

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

>>> 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) returns 页面上显示的图像列表。每个条目看起来像 [xref, smask, width, height, bpc, colorspace, alt. colorspace, name]

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

更多信息请见 this doc link