三种方法轻松提取 PDF 中全部图片

图片[1]-三种方法轻松提取 PDF 中全部图片-山海云端论坛

有时我们需要将一份或者多份 PDF 文件中的图片提取出来。在线网站可能存在隐私泄露的风险,而手动操作又显得繁琐。幸运的是,使用 Python 可以轻松搞定这个任务!

今天我将系统地分享几种 Python 提取 PDF 图片的方法。虽然每种方法的提取效率都有所不同,但可以考虑结合多种方法来互补。

基于 fitz 库和正则搜索

fitzpymupdf 的子模块,通过命令行安装 pymupdf

<code>pip install pymupdf</code>

然后使用 import fitz 导入模块。接下来的代码将利用 fitz 库提取图片,并通过正则匹配图片元素来实现。

<code>import fitz import re import os file_path = r'C:\xxx\xxx.pdf' # PDF 文件路径 dir_path = r'C:\xxx' # 存放图片的文件夹 def pdf2image1(path, pic_path): checkIM = r"/Subtype(?= */Image)" pdf = fitz.open(path) lenXREF = pdf._getXrefLength() count = 1 for i in range(1, lenXREF): text = pdf._getXrefString(i) isImage = re.search(checkIM, text) if not isImage: continue pix = fitz.Pixmap(pdf, i) if pix.size < 10000: # 在这里添加一处判断一个循环 continue # 不符合阈值则跳过至下 new_name = f"img_{count}.png" pix.writePNG(os.path.join(pic_path, new_name)) count += 1 pix = None pdf2image1(file_path, dir_path)</code>
图片[2]-三种方法轻松提取 PDF 中全部图片-山海云端论坛

基于 pdf2image 库的两种方法

pdf2image 库可以直接从 PDF 中提取图片,分别有两种常用方法:

<code>from pdf2image import convert_from_path, convert_from_bytes import os file_path = r'C:\xxx\xxx.pdf' # PDF 文件路径 dir_path = r'C:\xxx' # 存放图片的文件夹 def pdf2image2(file_path, dir_path): images = convert_from_path(file_path, dpi=200) for image in images: if not os.path.exists(dir_path): os.makedirs(dir_path) image.save(file_path + f'\img_{images.index(image)}.png', 'PNG') pdf2image2(file_path, dir_path)</code>
<code>from pdf2image import convert_from_path, convert_from_bytes import os file_path = r'C:\xxx\xxx.pdf' # PDF 文件路径 dir_path = r'C:\xxx' # 存放图片的文件夹 def pdf2image3(file_path, dir_path): images = convert_from_bytes(open(file_path, 'rb').read()) for image in images: if not os.path.exists(dir_path): os.makedirs(dir_path) image.save(file_path + f'\img_{images.index(image)}.png', 'PNG') pdf2image3(file_path, dir_path)</code>

通过这些方法,您可以轻松提取 PDF 文件中的所有图片。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容