捕捉时刻:将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.hqwc.cn/news/54852.html

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

相关文章

nginx的优化和防盗链 重要!!!

实验一、隐藏版本号 要把nginx的版本号隐藏起来,防止恶意攻击 方法一:修改配置文件 在http模块中加入一个命令 server_token off; 过程: 备份,改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens …

展示Streamlit文本魔力(六):从头顶到脚尖

文章目录 1 前言✨2 st.markdown - 引入丰富的Markdown文本3 st.title - 引入引人注目的大标题4 st.header - 引入简洁的小标题5 st.subheader - 添加次级标题6 st.caption - 添加解释性文字7 st.code - 显示代码块8 st.text - 显示文本9 st.latex - 显示LaTeX公式10 st.divide…

Spring Cloud Alibaba (一)

1 微服务介绍 1.1 系统架构演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->S…

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外,最近的研究成果还结合了文本模式来提高性能。添加文本模态后,通用检测算法的一些非常好的属性开始出现,例如: 可以利用大量…

【敏捷开发】测试驱动开发(TDD)

测试驱动开发(Test-Driven Development,简称TDD)是敏捷开发模式中的一项核心实践和技术,也是一种设计方法论。TDD有别于以往的“先编码,后测试”的开发模式,要求在设计与编码之前,先编写测试脚本…

ChatGPT“侵入”校园,教学评价体制受冲击,需作出调整

北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的“完美论文”。“这篇文章写得比大多数学生都要好......好到不符合我对学生的预期!”他去问ChatGPT:“这是你写的吗?”ChatGPT回答:“99.9%的概率是的。” ChatGPT“侵…

自动化测试框架?数据驱动vs关键字驱动,该怎么做?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 对于自动化测试框…

SQL-每日一题【1164. 指定日期的产品价格】

题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所…

SpringCloud Gateway获取请求响应body大小

前提 本文获取请求、响应body大小方法的前提 : 网关只做转发逻辑,不修改请求、相应的body内容。 SpringCloud Gateway内部的机制类似下图,HttpServer(也就是NettyServer)接收外部的请求,在Gateway内部请求将会通过Htt…

Linux进程(二)

文章目录 进程(二)Linux的进程状态R (running)运行态S (sleeping)阻塞状态D (disk sleep)深度睡眠T(stopped)状态X(dead)状态Z&#x…

MySQL中的事务

系列文章目录 MySQL常见的几种约束 MySQL中的函数 文章目录 系列文章目录前言一、事务及其特征1、事务的概念2、事务的特性(1)原子性(2)一致性(3)隔离性(4)持久性 二、事务并发问题…

Centos7安装jdk8教程——rpm安装

1. rpm文件下载 下载链接 Java SE 8 Archive Downloads (JDK 8u211 and later) 2.上传到服务器指定路径下并安装 切换到上传目录,然后执行以下命令 rpm -ivh jdk-8u221-linux-x64.rpm3. 设置环境变量并重载配置 # 设置环境变量 vim /etc/profile# 文件末尾添加…