微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试从此 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() 返回页面引用的所有图像(直接或间接)的列表。

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

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

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

更多信息请访问 this doc link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。