京公网安备 11010802034615号
经营许可证编号:京B2-20210330
来源:早起Python
作者:陈熹、刘早起
有时我们需要将一份或者多份PDF文件中的图片提取出来,如果采取在线的网站实现的话又担心图片泄漏,手动操作又觉得麻烦,其实用Python也可以轻松搞定!
今天就跟大家系统分享几种Python提取 PDF 图片的方法。其实没有非常完美的方法,每种方法提取效率都不是百分之百,因此可以考虑用多种方法进行互补,主要将涉及:
基于 fitz 库和正则搜索提取图片基于 pdf2image 库的两种方法提取图片
fitz 是 pymupdf 的子模块,需要先用命令行安装 pymupdf:
pip install pymupdf
但注意导入时使用 import fitz 导入模块!
下面的代码就利用 fitz 库提取图片需要通过正则匹配图片元素,将模板元素转化为像素后再以图片形式写出
import fitz import re import os
file_path = r'C:xxxxxx.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)
new_name = f"img_{count}.png" pix.writePNG(os.path.join(pic_path, new_name))
count += 1 pix = None pdf2image1(file_path, dir_path)
运行提取示例文件后结果如下:
可以看到,有一些很小的色块也被提取成图片,那么怎么过滤掉它们呢?
有一个简单的方法是通过大小过滤,pix 像素在 fitz 库中存在一个重要的方法 pix.size 可以反映像素多少,简单的色素块该值较低,可以通过设置一个阈值过滤。以阈值 10000 为例过滤:
import fitz import re import os
file_path = r'C:xxxxxx.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)
可以看到,全部图片都被正常提取!
一看名字就知道这个库的用处了,官方文档为https://www.cnpython.com/pypi/pdf2image
可以简单通过 pip install pdf2image 安装,但poppler才是真正起做用的转换器,因此需要额外安装和配置:
“
windows用户必须安装poppler for Windows,然后将bin/文件夹添加到PATHMac用户必须安装poppler for Mac
”
具体发挥作用的代码官方文档也给出了详细的说明:
那么我们就分别尝试这两种方法:
from pdf2image import convert_from_path,convert_from_bytes import tempfile from
pdf2image.exceptions import PDFInfoNotInstalledError,
PDFPageCountError, PDFSyntaxError import os
file_path = r'C:xxxxxx.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)
可以成功提取图片。再试试第二种方法:
from pdf2image import convert_from_path,convert_from_bytes import tempfile from
pdf2image.exceptions import
PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError import os
file_path = r'C:xxxxxx.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)
可以看到结果和之前一致,PDF中全部图片都被提取出来!
再补充一下。核心方法covert_from_bytes包含大量参数,可以自行修改。几个常用参数总结如下:
值得一提的是thread_count 参数,可以启动多线程会大大加快转换速度,尤其是 PDF 页面较多时。有兴趣的读者可以做尝试。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
一、回归分析到底在解决什么问题 很多人学回归分析,是从公式开始的:最小二乘法、残差平方和、R²、t 检验。公式记住了,但一到 ...
2026-11-10一、等级聚类法是什么 等级聚类法(Hierarchical Clustering),中文也叫系统聚类法、层次聚类法,是聚类分析里最经典的一类方法 ...
2026-11-10考试范围 PART 1 大数据基础理论 占比(8% ) a. 大数据分析基础(1%) b. Python 基础(5%) c. Linux & Ubuntu 操作系统基 ...
2026-11-10一、业务背景 在后台列表、管理系统、报表页面的分页需求里,前端通常需要两份数据:当前页的分页记录、符合筛选条件的数据总条 ...
2026-11-09一、需求看起来简单,实际坑不少 "把文本里所有中括号 [] 中间的内容提取出来"——这是文本清洗里最常见的需求之一。日志里的 [I ...
2026-11-09大数据分析师证书考什么 考试范围 PART 1 大数据基础理论 占比(8% ) a. 大数据分析基础(1%) b. Python 基础(5%) c. Li ...
2026-11-09CDA数据分析师 出品 作者:李诗怡 一、数据处理概述 定义: 在正式开展数据分析之前,对原始采集的数据进行整理、修正、加工和精 ...
2026-11-06一、为什么数据要先标准化 拿到一份数据,各列的量纲往往完全不同:年龄单位是"岁"(约 20~60),收入单位是"元"(几千到几万) ...
2026-11-06一、为什么 Python 成了统计分析的主流工具 十年前做统计分析,主流选择是 SPSS、SAS、Stata。现在越来越多的研究者、分析师转向 ...
2026-11-06核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-11-06核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-11-06“大学生必备证书有哪些”最容易被答成一张越长越好的清单。但校招筛选的真实逻辑是:证书要对应你投的岗位任务,并且在校期间确 ...
2026-11-05大学期间能报的证书,先别急着看“含金量榜单”。更实用的第一步是问:我现在这个身份、这个学历,符合报考条件吗? 很多证书宣 ...
2026-11-05大学期间能考的证书很多,但真正需要先回答的是两个问题:当前有没有报考资格,以及这张证书对应什么岗位任务。 前者决定你能不 ...
2026-11-05先把结论说清楚:真正“只有在校大学生能考、毕业就彻底没资格”的证书数量不多,主要集中在语言类考试的部分专项、面向高校学生 ...
2026-11-05上班族问“考什么证书有用”,真正要解决的不是找一张“最值钱”的证,而是判断哪张证能嵌进你现有的岗位任务。同样一张证书,做 ...
2026-11-05职称证书不是统一的考试项目。同样“考职称”,经济、会计、统计、审计、软考走全国统一考试,工程、教师、卫生等系列多数走评审 ...
2026-11-0533岁选证书,最怕两件事:一是被“适合女生”的清单带着走,考完发现岗位用不上;二是投入大半年,报名时才发现学历、专业或工作 ...
2026-11-05“女生容易考的证书”这个问题,真正难的不是找一份名单,而是判断“容易”到底指什么。报名条件宽松、考试通过率高、拿证后能找 ...
2026-11-05“女生适合考什么证书”这类搜索,背后往往是同一个困惑:网上榜单太多,口径却说不清楚。有人把培训证书和职业资格混在一起排, ...
2026-11-05