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

应用场景:

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

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

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

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

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

源代码:

import wx 
import fitz
import osclass 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 = Noneself.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.rhkb.cn/news/83340.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序的项目解构

视频链接 黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_哔哩哔哩_bilibili 接口文档 https://www.escook.cn/docs-uni-shop/mds/1.start.html 1:微信小程序宿主环境 1:常见的宿…

linux_常用命令

一、日常使用命令/常用快捷键命令 开关机命令 1、shutdown –h now:立刻进行关机 2、shutdown –r now:现在重新启动计算机 3、reboot:现在重新启动计算机 4、su -:切换用户;passwd:修改用户密码 5、logou…

如何对电脑文件进行备份?介绍五种常用方法

在现代生活中,我们的电脑中存储着大量重要的文件和数据。然而,电脑硬件可能会损坏,文件可能会被误删除或感染病毒等情况,因此定期备份文件至关重要,本文将介绍五种常用的电脑文件备份方法,并解决电脑数据没…

无涯教程-Perl - endpwent函数

描述 此功能告诉系统您不再希望使用getpwent从密码文件读取条目。在Windows下,使用Win32API::Net函数从域服务器获取信息。 语法 以下是此函数的简单语法- endpwent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile(($name, $pas…

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统: [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…

一站式印度跨境电商平台开发--多用户购物商城搭建

搭建一个一站式印度跨境电商平台开发,需要考虑以下几个方面:平台设计,技术架构,多用户购物商城搭建。 一、平台设计: 1. 市场调研:了解印度电商市场的特点和需求,确定目标用户群体。 2. 平台功…

HIVE语法优化之Join优化

桶用两表关联字段,MapJoin时需要将小表填入内存,这时候,分桶就起到了作用 一个stage阶段代表一个mr执行,好几个MR,会吧每一个MR的结果都压缩 Mysql 慢查询 如果sql语句执行超过指定时间,定义该sql为慢查询,存储日志, 查问题: SQL日志,模拟慢SQL 然后查询执行计划 分组聚合 就…

Leetcode-每日一题【剑指 Offer 18. 删除链表的节点】

题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head [4,5,1,9], val 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调…

SpringCloud 尚硅谷 微服务简介以及Eureka使用

写在前面 该系列博客仅用于本人学习尚硅谷课程SpringCloud笔记,其中的错误在所难免,如有错误恳请指正。 官方源码地址:https://github.com/zzyybs/atguigu_spirngcloud2020 什么是SpringCloud Spring Cloud是微服务一站式服务解决方案&…

生产排查org.apache.http.NoHttpResponseException: 127.0.0.1:9000 failed to respond

生产环境,请求方调用我方地址,发生异常NoHttpResponseException,错误详情: org.apache.http.NoHttpResponseException: 127.0.0.1:9000 failed to respondat org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(Def…

翻出了我当时学习的笔记来了html

php:高级语言 web应用程序 万维网 浏览器中查看 apache:服务器 mysql:数据库 html 标签 css:层叠样式表 javascript:客户端脚本 js jquery mysql数据库基础 php语法基础 面向对象(物件) smar…

【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java日期常用操作

Testpublic void validateDateUtils(){// 1 字符串转换日期Date result DateUtil.parse("2023-08-01", com.alibaba.excel.util.DateUtils.DATE_FORMAT_10);log.info("result : [{}]" , result);// 2 日期转换字符串final Date date new Date();String f…

ELK中grok插件、mutate插件、multiline插件、date插件的相关配置

目录 一、grok 正则捕获插件 自定义表达式调用 二、mutate 数据修改插件 示例: ●将字段old_field重命名为new_field ●添加字段 ●将字段删除 ●将filedName1字段数据类型转换成string类型,filedName2字段数据类型转换成float类型 ●将filedNam…

面试热题(路径总和II)

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 在这里给大家提供两种方法进行思考,第一种方法是递归,第二种方式使用回溯的方式进行爆…

博客网站添加复制转载提醒弹窗Html代码

网站如果是完全禁止右键(复制、另存为等)操作,对用户来说体验感会降低,但是又不希望自己的原创内容直接被copy,今天飞飞和你们分享几行复制转载提醒弹窗Html代码。 效果展示: 复制以下代码,将其…

Linux--core dump打开的情况下,运行下面的代码,会发生什么?

代码&#xff1a; #include <iostream> #include <signal.h> #include <unistd.h>using namespace std;void catchSig(int signum) {cout<< "进程捕捉到了一个信号&#xff0c;正在处理中&#xff1a; "<< signum << " p…

开发工具Eclipse的使用之导入项目(import)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 一.导读 上篇我们已经详细介绍了开发工具eclipse&#xff0c;也说明了eclipse的基本使用&#xff0c;那么我们这篇来详细讲述一下怎…

docker基本使用方法

docker使用 1. Docker 介绍 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。Docker 使您能够将应用程序与基础架构分开&#xff0c;从而可以快速交付软件。通过利用 …

springcloud3 bus+springconfig 实现配置文件的动态刷新(了解)

一 springcloud Bus的作用 1.1 springcloud的作用 spring cloud bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架。 它整合了java的事件处理机制和消息中间件的功能。其中目前支持RabbitMQ和kafka 简介&#xff1a; bus实现多个服务的配置文件动态刷新。 1.2 …