使用 Python 从 PDF 文件中提取、转换图像

news/2024/9/25 21:18:52/

目录:

    • 从 PDF 中提取图像
    • 将 PDF 页面转换为图像

本文的任务是从 PDF 文件中提取图像,并使用 Python 中将 PDF 页面转换为图像。为了实现使用 Python 从 PDF 文件中提取图像,需要安装使用 Fitz、PyMuPDF 库。

Fitz 库是一个图像处理库,主要用于打开 PDF、TIFF 和 JPEG 格式的图像,读取和写入 PDF 文件,提取 PDF 页面以及在页面上进行标记和注释。

PyMuPDF 是一个基于 Python 的开源 PDF 处理库,提供了一系列的 PDF 文档处理功能。

从 PDF 中提取图像

python">import fitz 
# 设置 PDF 文件路径
file = "6.pdf"
# 打开 PDF 文件 
pdf_file = fitz.open(file) 
# 遍历 PDF 页面 
for page_index in range(len(pdf_file)): # 获取 PDF 页面 page = pdf_file[page_index]# 获取页面上所有图像image_list = page.get_images() # 输出此页面中找到的图像数量if image_list: print( f"[+] 在页面:{page_index},总共发现 {len(image_list)} 张图片。") else: print(f"[+] 在页面:{page_index},没有发现图片。") for image_index, img in enumerate(page.get_images(), start=1): # 获取图像的XREF编号和图像数据xref = img[0] pix = fitz.Pixmap(pdf_file, xref)# 保存图像if str(fitz.csRGB) == str(pix.colorspace):img_path = f'image{page_index+1}_{xref}.png'pix.save(img_path)
print(f"[+] 已保存所有图片。") 

以上代码运行后会保存 PDF 文件中的所有图像并有以下输出:

python">[+] 在页面:0,总共发现 1 张图片。
[+] 在页面:1,没有发现图片。
[+] 已保存所有图片。

将 PDF 页面转换为图像

如果将 PDF 页面转换为图像,只需要遍历所有 PDF 页面,使用 get_pixmap() 方法将 PDF 转换为图像,然后保存图像。

python">import fitz 
doc = fitz.open('1.pdf') 
for page in doc: pix = page.get_pixmap(matrix=fitz.Identity, dpi=None, colorspace=fitz.csRGB, clip=None, alpha=True, annots=True) pix.save(f"pdfimage-{page.number}.png") 

以上代码将 PDF 页面转换为 PNG 图像,PNG 图像可以实现背景透明。如果需要保存 JPG 图像,需要去掉 get_pixmap() 中的参数 alpha=True。


http://www.ppmy.cn/news/1426660.html

相关文章

vue2响应式 VS vue3响应式

Vue2响应式 存在问题: 新增属性,删除属性,界面不会更新。 直接通过下标修改数组界面不会自动更新。 Vue2使用object.defineProperty来劫持数据是否发生改变,如下: 能监测到获取和修改属性: 新增的属性…

“手撕“三大特性之一的<继承>(上)

目录 一、为什么需要继承 二、什么是继承 三、继承怎么写 四、成员的访问 1.父类与子类的成员变量不同名 2.父类与子类的成员变量同名 3.父类与子类的成员方法不同名 4.父类与子类的成员方法同名 五、super关键字 一、为什么需要继承 先让我们看一段Java代码&#…

Spring AI ETL 流水线

先纠正 Spring AI 使用本地 Ollama Embeddings 中的一个错误,当启动 Ollama 之后,Windows会有托盘图标,此时已经启动了 Ollama 的服务,访问 Embedding 时不需要运行 ollama run gemma ,只有访问 chat 时才需要启动一个…

富文本插入图片的时候直接复制链接的风险点和解决方案

业务背景 最近由于项目需要开发了一个富文本的功能其中有一个小点是插入图片到富文本中, 插入的时候是可以直接复制图片的链接地址插入的我本来觉得没啥,但是感觉哪里不太对,于是开始了风险点评估,以及对应的解决方案 风险点评…

openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置

文章目录 openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置265.1安装openEuler操作系统265.2 修改操作系统内核PAGESIZE为64KB。265.3 关闭CPU中断的服务irqbalance openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置 本…

Dual-AMN论文阅读

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍:具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

共享软件工厂:软件行业的“滴滴打车”模式

在数字化浪潮席卷全球的背景下,软件行业正面临着前所未有的挑战与机遇。传统软件开发模式由于需求变化快、交付周期长、人才流动性大、迭代升级困难等问题,已经难以满足市场快速变化的需求。在这个关键的时刻,共享软件工厂应运而生&#xff0…

【C++】哈希封装map与set

目录 前言: 一,底层哈希结构 1-1,迭代器的封装 1-2,哈希表的封装 二,unordered_map的封装 三,unordered_set的封装 前言: 上一篇文章说明了哈希结构,这一篇文章来说明如何使用…