捕捉时刻:将PDF文件中的图像提取为个性化的瑰宝(从pdf提取图像)

news2024/11/16 19:48:15

应用场景:

该功能的用途是从PDF文件中提取图像。这在以下情况下可能会很有用:

  1. 图片提取和转换:可能需要将PDF文件中的图像提取出来,并保存为单独的图像文件,以便在其他应用程序中使用或进行进一步处理。例如,可能需要将PDF中的图像用于网页、报告、演示文稿等。

  2. 图像分析和处理:如果需要对PDF文件中的图像进行深入分析、处理或计算机视觉任务,例如图像识别、目标检测、图像分类等,那么可以使用该功能提取图像,然后使用适当的图像处理库或算法进行进一步处理。

  3. 数据提取和挖掘:在某些情况下,PDF文件可能包含了一些以图像形式嵌入的文本或数据,例如扫描的文档或PDF中的图表、表格等。通过提取图像,可以尝试使用OCR(光学字符识别)技术来提取和分析这些图像中的文本或数据。

无论的具体用途是什么,该功能可以帮助从PDF文件中轻松提取图像,并将其保存为单独的图像文件,以便进一步使用和处理。

源代码:

import wx 
import fitz
import os

class PdfImageExtractor(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='PDF Image Extractor')
        self.panel = wx.Panel(self)
        
        self.pdf_file_picker = wx.FilePickerCtrl(self.panel, message='选择PDF文件')
        self.output_dir_picker = wx.DirPickerCtrl(self.panel, message='选择输出目录')
        self.extract_button = wx.Button(self.panel, label='提取图片')
        self.extract_button.Bind(wx.EVT_BUTTON, self.onExtract)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.pdf_file_picker, 0, wx.ALL|wx.CENTER, 5)
        sizer.Add(self.output_dir_picker, 0, wx.ALL|wx.CENTER, 5)
        sizer.Add(self.extract_button, 0, wx.ALL|wx.CENTER, 5)
        self.panel.SetSizer(sizer)
        
        self.progress = wx.Gauge(self.panel, range=100)
        sizer.Add(self.progress, 0, wx.ALL|wx.EXPAND, 5)
        
        self.Show()

    def onExtract(self, event):
        pdf_path = self.pdf_file_picker.GetPath()
        output_dir = self.output_dir_picker.GetPath()
        
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
            
        pdf = fitz.open(pdf_path)
        total_pages = len(pdf)
        
        for i, page in enumerate(pdf):
            images = page.get_images()
            if images:
                for image in images:
                    xref = image[0]
                    pix = fitz.Pixmap(pdf, xref)
                    filename = os.path.join(output_dir, str(i) + '.png')
                    pix.save(filename)
                    pix = None
                    
            self.progress.SetValue(int((i+1)/total_pages*100))
            
        pdf.close()
        self.progress.SetValue(100)
        
if __name__ == '__main__':
    app = wx.App()
    frame = PdfImageExtractor()
    app.MainLoop()

源代码分析:

解释一下这个PDF图片提取的代码:

  1. 导入需要的库:

    • wx - 用于构建GUI的wxPython库
    • fitz - pyMuPDF库,用于读取和处理PDF
    • os - 用于文件系统操作如创建文件夹
  2. 定义PdfImageExtractor类,继承wx.Frame来创建窗口

    • 在__init__方法中初始化界面元素:文件选择框、文件夹选择框、按钮、进度条等
    • Show()显示窗口
  3. onExtract方法中含有主要逻辑

    • 获取选择的PDF路径和输出文件夹路径
    • 使用fitz打开PDF
    • 遍历每页:
      • 使用page.getImages()获取图片列表
      • 遍历图片列表
        • 从image对象直接提取PixMap
        • 保存为PNG文件,文件名为页码
    • 更新进度条
  4. 主函数中:

    • 创建wx App和PdfImageExtractor框架
    • 进入主循环显示界面

所以这是一个典型的wxPython+pyMuPDF处理PDF的程序结构:

  • wxPython提供界面
  • pyMuPDF处理PDF解析、图片提取等功能
  • onExtract方法中包含主要业务逻辑
  • __init__构建界面
  • 主函数显示窗口

通过文件选择器和按钮点击来触发图片提取的过程,图片保存到指定文件夹,进度条显示状态。

它使用了wxPython和PyMuPDF库来创建一个简单的图形界面,用于选择PDF文件和输出目录,并提取PDF中的图像。

只需要确保已安装了wxPython和PyMuPDF库,并运行上述代码即可。当点击"提取图片"按钮时,程序将读取所选PDF文件,并将每个页面中的图像提取为PNG文件,并保存到输出目录中。同时,进度条会显示提取进度。

请注意,为了使用PyMuPDF库,需要额外安装pymupdf模块。可以使用以下命令来安装它:

pip install pymupdf

结果如下: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/838386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 和 Mysql 如何保证数据一致性

项目场景: 一般情况下,Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库 IO,还可以提升数据的 IO 性能。 如下图所示,这是它的整体架构。 当应用程序需要去读取某个数据的时候,首先会先…

【uniapp APP分享到微信】

uniapp APP分享到微信 使用uni.share分享方法说明一. 配置二. 分享到聊天页面分享图片分享文字分享图文分享为小程序 三. 分享到朋友圈分享图片分享文字分享图文 四. 参考文档链接 使用uni.share分享方法 说明 本方法使用uniapp 第三方服务 uni.share(&#xff09…

vue中axios二次封装并发起网络请求配置

1.安装axios npm i axios 2.导入 //对axios进行二次封装 import axios from "axios"// 创建axios实例,其实request就是axiosconst requests axios.create({// 发请求的时候自动出现api// baseURL:"api",// 请求超时的时间timeout:5000, })…

element+vue 之动态form

1.页面部分 <div v-for"(item,index) in formList" :key"index"><el-col :span"6" v-if"item.inputType0"><el-form-item :label"item.conditionName" :prop"item.conditionCode":rules"{req…

Agents改变游戏规则,亚马逊云科技生成式AI让基础模型加速工作流

最近&#xff0c;Stability AI正式发布了下一代文生图模型——Stable Diffusion XL 1.0这次的1.0版本是Stability AI的旗舰版生图模型&#xff0c;也是最先进的开源生图模型。 在目前的开放式图像模型中&#xff0c;SDXL 1.0是参数数量最多的。官方表示&#xff0c;这次采用的…

Jenkins触发器时间、次数设定

触发器触发条件介绍 触发器触发条件公式&#xff1a;由5颗星组成 * * * * * 分别代表&#xff1a;分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 企业项目中常用场景介绍 场景1&#xff1a;接口脚本部分测试通过&#xff0c;部分还在进行&#xff0c;回归测试脚本执行…

解密HTTP代理爬虫中的IP代理选择与管理策略

在当今数据驱动的世界中&#xff0c;HTTP代理爬虫作为一项重要的数据采集工具&#xff0c;其成功与否往往取决于IP代理的选择与管理策略。作为一家专业的HTTP代理产品供应商&#xff0c;我们深知IP代理在数据采集中的重要性。在本文中&#xff0c;我们将分享一些关于HTTP代理爬…

Spring集成Junit

目录 1、简介 2、Junit存在的问题 3、回顾Junit注解 4、集成步骤 4.1、导入坐标 4.2、Runwith 4.3、ContextConfiguration 4.4、Autowired 4.5、Test 4.6、代码 5、补充说明 5.1、Runwith 5.2、BlockJUnit4ClassRunner 5.3、没有配置Runwith ⭐作者介绍&#xff1…

Jmeter-获取接口响应头(Response headers)信息进行关联

文章目录 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联使用正则表达式提取器将Set-Cookie的值提取出来在其余接口中关联该提取信息运行查看关联是否成功 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联 获取某一…

Spark 3.1.1 遇到的 from_json regexp_replace组合表达式慢问题的解决

背景 目前公司在从spark 2.4.x升级到3.1.1的时候&#xff0c;遇到了一类SQL极慢的情况&#xff0c;该SQL的如下(只列举了关键的)&#xff1a; select device_personas.* from(selectdevice_id, ads_id, from_json(regexp_replace(device_personas, (?<(\\{|,))"devic…

ospf于mgre中应用(直连与星型拓扑)

题目 地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; ISP&#xff1a; R1/2/3的星型拓扑结构 R1配置&#xff1a; interface Tunnel0/0/0 ip address 192.168.6.1 255.255.255.0 tunnel-protocol gre p2mp source 200.1.1.1 ospf …

DB2 数据库基础使用

1.启动步骤 Last login: Sun Jul 23 09:38:48 2023 from 192.168.56.101 [rootlocalhost ~]# cd /usr/local/src/expc [rootlocalhost expc]# cd /opt/ibm/db2/V10.5/instance/ [rootlocalhost instance]# su - db2inst1 Last login: Sun Jul 23 09:40:13 UTC 2023 on pts/0 […

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

美术:动画

一、3dmax动画 动画制作流程:模型 -> 骨骼(Bone/Biped) -> 蒙皮(Skin/Bone Pro) -> 动画 1.基础 1.1创建bones骨骼 骨骼分为2种,一种是bones另一种是biped。它们的区别是用bones需要自己创建骨骼系统(比如人,动物,怪物等的骨骼)会使用到很多的约束、参数关…

STM32CubeMx之FreeRTOS的中断优先级+配置

编译运行即可 例如我编写的是一个灯亮500ms 一个等200ms的亮灭 如果他们的优先级是同等的&#xff0c;那么任务都可以实现&#xff0c;时间片会自动切换 但是如果亮500ms的灯 任务优先级更高 还用HALdelay的话 就会让任务二饿死&#xff0c;从而就会只看到任务一的内容 解…

Django Rest_Framework(三)

文章目录 1. 认证Authentication2. 权限Permissions使用提供的权限举例自定义权限 3. 限流Throttling基本使用可选限流类 4. 过滤Filtering5. 排序Ordering6. 分页Pagination可选分页器 7. 异常处理 ExceptionsREST framework定义的异常 8. 自动生成接口文档coreapi安装依赖设置…

C语言参悟-数据类型

C语言的数据类型 一、概述二、基础数据类型1. 整数1. 计算2. 索引 2. 浮点数3. 字符4. 字符串5. 指针 三、特殊数据类型1. 枚举2. 共用体2. struct结构体 四、数据类型修饰符1. const2. unsigned、signed 一、概述 编程语言为抽象这个物理世界提供了依据&#xff0c;其中对于描…

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]

目录 12、自由风格的CD操作发布 V1.0.0 版本修改代码并推送GitLab 中项目打 Tag 发布 V2.0.0 版本Jenkins 配置 tag 参数添加 Git 参数添加 checkout 命令修改构建命令配置修改 SSH 配置 部署 v1.0.0重新构建工程构建结果 部署 v2.0.0重新构建工程访问 部署v3.0.0 13、流水线任…

Delphi Architect Crack,部署支持Swagger

Delphi Architect Crack,部署支持Swagger 单一代码库-用更少的编码工作为所有主要平台创建应用程序。写一次&#xff0c;到处编译。 Windows-使用最新的用户界面控件、WinRT API和HighDPI相关功能&#xff0c;使Windows的VCL应用程序现代化。 远程桌面-使用改进的VCL和IDE远程桌…

Java问题排查工具Arthas安装教程

Java问题排查工具Arthas入门教程 什么是阿里Arthas&#xff1f; 在生产环境经常遇到大量的日志&#xff0c;同时还有一些性能问题&#xff0c;需要进行进程分析&#xff0c;排查&#xff0c;有时候确实比较花时间&#xff0c;所以可以借助一些开源的框架来实现&#xff0c;Art…