没什么用的代码-批量提取主目录下所有文件夹中pdf里面的图片

2023-11-12

一、提前安装

pip install pymupdf

二、实现的功能:

  • 读取一个文件夹及所有子文件夹中的pdf中的图片
  • 判断图片存储条件
  • 存储图片

三、代码

"""
批量提取pdf文件中的图片
@author: Administrator
"""

import fitz
import time
import re
import os
 
def pdf2pic(path, pic_path, filename):
    '''
    # 从pdf中提取图片
    :param path: pdf的路径
    :param pic_path: 图片保存的路径
    :return:
    '''
    t0 = time.perf_counter()
    # 使用正则表达式来查找图片
    checkXO = r"/Type(?= */XObject)" 
    checkIM = r"/Subtype(?= */Image)"  
    
    # 打开pdf
    doc = fitz.open(path)
    # 图片计数
    imgcount = 0
    lenXREF = doc.xref_length()
 
    # 打印PDF的信息
    print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))
    
        # 遍历每一个对象
    for i in range(1, lenXREF):
        # 定义对象字符串
        text = doc.xref_object(i)
        isXObject = re.search(checkXO, text)
        # 使用正则表达式查看是否是图片
        isImage = re.search(checkIM, text)
 
        # 如果不是对象也不是图片,则continue
        if not isXObject or not isImage:
            continue
        
        # 根据索引生成图像
        pix = fitz.Pixmap(doc, i)
        
        if pix.size < 1000000:
            continue

        # 根据pdf的路径生成图片的名称
        imgcount += 1
        new_name = "_img{}.png".format(imgcount)
        new_name = new_name.replace(':', '')
        new_name = filename[:-4] + new_name
        
        # os.mkdir(pic_path)
        
        # 如果pix.n<5,可以直接存为PNG
        if pix.n < 5:
            try:
                pix.save(os.path.join(pic_path, new_name))
                pix = None
            except:
                pix0 = fitz.Pixmap(fitz.csRGB, pix)
                pix0.save(os.path.join(pic_path, new_name))
                pix0 = None
                
    # 释放资源
    pix = None
    t1 = time.perf_counter()
    print("运行时间:{}s".format(t1 - t0))
    print("提取了{}张图片".format(imgcount))
   

if __name__=='__main__':
    
    path = r'C:\Users\Administrator\'# pdf存储目录
    pic_path = r'D:\image' # 图片存储目录

    filter = [".pdf"] #设置过滤后的文件类型 当然可以设置多个类型
    for maindir, subdir, file_name_list in os.walk(path):

        # print(maindir) #当前主目录
        # print(subdir) #当前主目录下的所有目录
        # print(file_name_list) #当前主目录下的所有文件

        for filename in file_name_list:
            apath = os.path.join(maindir, filename)#合并成一个完整路径
            
            portion = os.path.splitext(apath)
            ext = portion[1]  # 获取文件后缀 [0]获取的是除了文件名以外的内容
            
            if ext in filter:     
                m = pdf2pic(apath, pic_path, filename)

 参考

(80条消息) Python提取PDF中的图片_Jayce~的博客-CSDN博客_python提取pdf中的图片https://blog.csdn.net/qq_15969343/article/details/81673302(80条消息) Python 循环所有文件夹(含子文件夹),读取指定格式文件,另存为其他格式文件..._weixin_30527143的博客-CSDN博客https://blog.csdn.net/weixin_30527143/article/details/98938297

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没什么用的代码-批量提取主目录下所有文件夹中pdf里面的图片 的相关文章

随机推荐

  • 融云获评「创业邦 · 最具创新价值出海服务商」

    点击报名 9 月 21 日融云直播课 8 月 22 日 23 日 创业邦主办的 2023 DEMO WORLD 全球开放式创新大会暨企业出海未来大会 在上海举行 会上发布了 创业邦 2023 出海企业创新价值 100 强 融云荣登榜单 获评
  • Oracle 数据库中删除表空间的详细步骤与示例

    系列文章目录 文章目录 系列文章目录 前言 一 查看表空间 二 数据迁移和备份 三 下线表空间中的对象 四 删除表空间 五 删除完成后的操作 总结 前言 在 Oracle 数据库中 表空间是存储数据的逻辑容器 有时候 我们可能需要删除不再使
  • 深度学习(20):nerf论文翻译与学习

    目录 1 Introduction 2 Related Work 3 Neural Radiance Field Scene Representation 4 Volume Rendering with Radiance Fields 5
  • Python中出现UnboundLocalError: local variable ‘xxx‘ referenced before assignment情况的解决方法

    UnboundLocalError local variable xxx referenced before assignment 在函数外部已经定义了变量n 在函数内部对该变量进行运算 运行时会遇到了这样的错误 主要是因为没有让解释器清楚
  • 使用Hyperledger Fabric Java SDK 构建和部署区块链网络(windows下)

    在区块链解决方案中 区块链网络作为后端与应用程序前端一起使用SDK与网络通信 为了建立前端和后端之间的通信 Hyperledger Fabric社区为各种编程语言提供了许多SDK 如NodeJS SDK和Java SDK 此代码模式解释了使
  • PHP保留两位小数的三种方法

    PHP保留两位小数的三种方法 ps 本人亲测 阿里云2核4G5M的服务器性价比很高 新用户一块多一天 老用户三块多一天 最高可以买三年 感兴趣的可以戳一下 阿里云折扣服务器 PHP保留两位小数的几种方法 link http www phpd
  • 用Compose shape把外框做成封闭图形

    Compose shape之后为何会成这个样子 以下并板框的实际图样 只论述方法 解决办法 compose shape 时不要把整个outline框起来 用tempgroup一段一段的选择 选完后complete 特别要注意的是要选中相应的
  • mysql数据库商业版与社区版的区别

    1 商业版本组织管理与测试环节控制更严格 稳定性方面 会比社区版本更稳定 2 mysql是成熟产品 商业版与社区版之间性能方面相差不大 3 商业版不遵守GPL协议 社区版遵守GPL协议可以免费使用 4 使用商业版后可以购买相关的服务 享受7
  • DVWA全级别详细通关教程

    目录 暴力破解 Brute Force low Medium High Impossible 命令注入 Command Injection low Medium High Impossible CSRF 跨站请求伪造 low Medium
  • 哈工大团队开源医学智能问诊大模型

    原文 CVHub 门头沟学院AI视觉实验室御用公众号 学术 科研 就业 185篇原创内容 公众号 Title HuaTuo Tuning LLaMA Model with Chinese Medical KnowledgePDF https
  • 【MySQL】MySQL索引详解

    Mysql索引 0 写在前面 1 为什么要使用索引 2 常见的索引模型 3 索引维护 4 回表 举例子 0 写在前面 文章中包含了 1 什么是索引 2 索引的数据结构 以及各自的使用场景 3 为什么要设置主键自增 4 基于主键索引和普通索引
  • 如何修改tomcat默认端口号8080的方法

    1 背景 在默认情况下 tomcat的端口是8080 使用了两个tomcat 那么就需要修改其中的一个的端口号才能使得两个同时工作 2 方法 2 1改动一 那么 如何修改tomcat的端口号呢 首先到安装目录 或者解压目录 下找到conf文
  • 理解c++中左值与右值的一篇文章

    C 中的左值与右值 说明 这一部分内容只是帮助理解 C 11 中左值与右值的概念 在编程实践中 因为编译器优化的存在 特别是其中的返回值优化 Return Value Optimization RVO 使你不需要额外关注左值与右值的区别 像
  • Idea新建项目名后出现中括号别名

    Idea新建项目名后出现中括号别名 1 修改pom xml文件的 artifactId标签 和项目名一致 2 项目名出现中括号是因为iml文件名和项目文件名不一样 需要更改iml文件名即可
  • 开关稳压DC—DC降压电路简介

    在做数字压力开关项目时 电源输入要求是12V 24V 10 系统内需要5V和3 3V的电源 这时提供了三个方案从中选择 方案一 使用24V 5V和5V 3 3V的LDO线性稳压芯片 方案二 使用24V 12V 12V 5V 5V 3 3V种
  • SIP Using SDP with Offer/Answer Model

    根据RFC3261 13 2 1所述 SIP使用的Offer Answer模型是建立在对话环境下的 RFC中还特意对Offer Answer交互有限制 1 初始Offer必须在INVITE消息或者第一个可靠的非失败型响应中 注 当时RFC3
  • arima 公式_小白快速上手数据分析1

    ARIMA时间序列分析 作用 ARIMA时间序列分析通常用于对单列具有时间序列的数据进行预测 例如销售量预测 股票收盘价预测等等 输入 单列数据序列的数据 例如每个月销售额 每天股票的价格 通常数据量为15 50 条 输出 对未来5 15
  • python3 asyncio 爬虫_爬虫高性能asyncio+ahttpio

    async实现协程 异步编程 我们都知道 现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统 都希望采用协程的方式实现高效的并发任务 如js lua等在异步协程方面都做的很强大 python在3 4版本也加入了协程的概念 并在3 5
  • centos8 免登陆 免密码 多用户命令行 启动 ,以及 界面免密

    文章目录 修改 启动 service 临时切换 运行模式 永久 切换 运行模式 由于界面 不同 os 实现 不一样 所以 方法 估计 也都 不太通用 博主 还是 建议 大家 学习 linux 使用 命令行 进行学习 centos8 界面免密
  • 没什么用的代码-批量提取主目录下所有文件夹中pdf里面的图片

    一 提前安装 pip install pymupdf 二 实现的功能 读取一个文件夹及所有子文件夹中的pdf中的图片 判断图片存储条件 存储图片 三 代码 批量提取pdf文件中的图片 author Administrator import