如何用python从pdf中提取图片

依赖安装

pip install pymupdf

代码

import fitz
import time
import re
import os

def pdf2pic(path, pic_path):
    '''
    # 从pdf中提取图片
    :param path: pdf的路径
    :param pic_path: 图片保存的路径
    :return:
    '''
    t0 = time.clock()
    # 使用正则表达式来查找图片
    checkXO = r"/Type(?= */XObject)"
    checkIM = r"/Subtype(?= */Image)"
    # 打开pdf
    doc = fitz.open(path)
    # 图片计数
    imgcount = 0
    lenXREF = doc._getXrefLength()

    # 打印PDF的信息
    print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))

    # 遍历每一个对象
    for i in range(1, lenXREF):
        # 定义对象字符串
        text = doc._getXrefString(i)
        isXObject = re.search(checkXO, text)
        # 使用正则表达式查看是否是图片
        isImage = re.search(checkIM, text)
        # 如果不是对象也不是图片,则continue
        if not isXObject or not isImage:
            continue
        imgcount += 1
        # 根据索引生成图像
        pix = fitz.Pixmap(doc, i)
        # 根据pdf的路径生成图片的名称
        new_name = path.replace('\\', '_') + "_img{}.png".format(imgcount)
        new_name = new_name.replace(':', '')

        # 如果pix.n<5,可以直接存为PNG
        if pix.n < 5:
            pix.writePNG(os.path.join(pic_path, new_name))
        # 否则先转换CMYK
        else:
            pix0 = fitz.Pixmap(fitz.csRGB, pix)
            pix0.writePNG(os.path.join(pic_path, new_name))
            pix0 = None
        # 释放资源
        pix = None
        t1 = time.clock()
        #        print("运行时间:{}s".format(t1 - t0))
        print("提取了{}张图片".format(imgcount))


if __name__=='__main__':
    # pdf路径
    path = r'I:\paper'#pdf文件路径
    pic_path = r'I:\picture'#提取图片保存路径
    for index,x in enumerate(os.listdir(path)):
        if os.path.join(path, x).endswith('.pdf'):
            try:
                m = pdf2pic(os.path.join(path, x), pic_path)
            except:
                print("提取失败")

注意

代码中import中的fitz并不需要安装,它本身包含在pymupdf中,单独安装fit都会显示安装失败。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,230评论 0 10
  • 引言 在这里我假设你已经看完了一篇Python教程,基本熟悉了Python的结构和语法,在命令行下的Python互...
    Programmer客栈阅读 65,156评论 0 17
  • linux和windows下安装python拓展包-pycharm、numpy、scipy、matplotlib、...
    hzyido阅读 81,455评论 2 10
  • Python 二三事 面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题。 最后更新 2013.5....
    hzyido阅读 67,846评论 2 42
  • 相亲是不可避免了,因为性格内向?因为还没对象?我也说不清姑妈给我介绍对象的原因,其实不过是寻常聊家常,姑妈家里电...
    也青青阅读 1,292评论 0 0

友情链接更多精彩内容