用 Python 批量提取 PDF 的图片,并存储到指定文件夹
作者:python与数据分析链接:https://www.jianshu.com/p/93d1f3a29dec公众号后台回复:「Python批量提取PDF中的图片」,即可获取本文完整数据。
本期视频:用 Python 批量提取 PDF 中的图片,并保存到指定文件夹中!
上篇《用 Python 批量提取 PDF 的表格数据,保存为 Excel》文章中,我们利用 Python 的第三方工具库 pdfplumber 批量提取 PDF 的表格数据后,有不少小伙伴们提出,大多数 PDF 都为图片,如何批量提取出图片。
今天就来用 Python 来解决这个问题。
一、实现效果图二、基于 fitz 库和正则搜索提取图片fitz 库是 pymupdf 中的一个模块,用它来提取 pdf 里的图片非常方便。
安装命令
pipinstallfitzpipinstallpymupdf三、代码实现
导入相关包
importfitzimportreimportos
读取 pdf 提取图片,并存储
defsave_pdf_img(path,save_path):"""path:pdf的路径save_path:图片存储的路径"""#使用正则表达式来查找图片checkXO=r"/Type(?=*/XObject)"checkIM=r"/Subtype(?=*/Image)"#打开pdfdoc=fitz.open(path)#图片计数imgcount=0#获取对象数量长度lenXREF=doc.xref_length()#打印PDF的信息print("文件名:{},页数:{},对象:{}".format(path,len(doc),lenXREF-1))#遍历每一个图片对象foriinrange(1,lenXREF):#定义对象字符串text=doc.xref_object(i)#print(i,text)isXObject=re.search(checkXO,text)#使用正则表达式查看是否是图片isImage=re.search(checkIM,text)#如果不是对象也不是图片,则continueifnotisXObjectornotisImage:continueimgcount+=1#根据索引生成图像pix=fitz.Pixmap(doc,i)#根据pdf的路径生成图片的名称new_name=path.replace("\\","_")+"_img{}.png".format(imgcount)new_name=new_name.replace(":","")#如果pix.n<5,可以直接存为PNGifpix.n<5:pix.writePNG(os.path.join(save_path,new_name))#否则先转换CMYKelse:pix0=fitz.Pixmap(fitz.csRGB,pix)pix0.writePNG(os.path.join(save_path,new_name))pix0=None#释放资源pix=Noneprint("提取了{}张图片".format(imgcount))#pdf路径path=r"/Users/wangwangyuqing/Desktop/data/img.pdf"save_path=r"/Users/wangwangyuqing/Desktop/data"save_pdf_img(path,save_path)
运行结果
四、小结Python 中 pdf2image 库也可以完成以上需求,它的好处是如果你的 pdf 页面较多时,pdf2image 可以启动多线程会大大加快转换速度,具体可参考pdf2image 官方文档。
最后,可能会遇到提取的图片比原本少,或者提取出不想要的图片。可以通过检查图片格式,可能不是常见的格式,提取时再减少或添加过滤条件进行尝试。
本期视频:用 Python 批量提取 PDF 中的图片,并保存到指定文件夹中!
推荐阅读用 Python 批量提取 PDF 的表格数据,保存为 Excel
太强了!Python 开发桌面小工具,让代码替我们干重复的工作!
情人节,我用 Python 给女朋友做了个选礼物看板!
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...