通过python提取PDF文件指定页的图片
整体思路
要从 PDF 文件中提取指定页和指定位置的图片,可以分几个步骤来实现:
1.1 准备所需工具与库
在 Python 中处理 PDF 和图像时,需要使用几个库:
PyMuPDF (fitz):用于读取和处理 PDF 文件,可以精确获取指定页面内容。Pillow:处理图像,用于裁剪和保存图片。pdf2image:将 PDF 页面转换为图像格式,方便进一步处理。
1.2 基本流程
- 读取 PDF 文件:使用
PyMuPDF读取 PDF 文件,找到指定页。 - 获取页面图像:使用
pdf2image将目标页转换为图像。 - 确定图片区域:使用坐标来指定图像中的区域。该区域可以通过手动确定,或者通过图像识别技术(如 OCR)来定位。
- 提取并保存图片:使用
Pillow裁剪出指定区域,并保存图像。
1.3 处理步骤
- Step 1:使用
PyMuPDF打开 PDF,找到目标页。 - Step 2:将该页转换为图像。
- Step 3:根据坐标裁剪指定位置的图像。
- Step 4:保存裁剪后的图像。
代码示例:
import fitz # PyMuPDF
from pdf2image import convert_from_path
from PIL import Image# Step 1: 打开 PDF 文件并定位指定页面
def extract_image_from_pdf(pdf_path, page_number, crop_box, output_image_path):# Step 2: 将目标页转换为图像pages = convert_from_path(pdf_path, dpi=300)target_page = pages[page_number - 1] # Python的索引从0开始# Step 3: 使用 Pillow 裁剪图像left, top, right, bottom = crop_box # 指定区域的坐标cropped_image = target_page.crop((left, top, right, bottom))# Step 4: 保存裁剪后的图像cropped_image.save(output_image_path)print(f"图像已保存到: {output_image_path}")# 示例使用
pdf_path = "/Users/linql/Desktop/3.5_python/0001_26110523.pdf" # PDF 文件路径
page_number = 4 # 要提取的页码
crop_box = (10, 700,2800, 3100) # 图像的裁剪区域 (left, top, right, bottom)
output_image_path = "output_image.png" # 输出图像的路径extract_image_from_pdf(pdf_path, page_number, crop_box, output_image_path)

运行后,会提示:
pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
是因为:# macOS 需要安装 poppler 用于 pdf2image
brew install poppler
相关文章:
通过python提取PDF文件指定页的图片
整体思路 要从 PDF 文件中提取指定页和指定位置的图片,可以分几个步骤来实现: 1.1 准备所需工具与库 在 Python 中处理 PDF 和图像时,需要使用几个库: PyMuPDF (fitz):用于读取和处理 PDF 文件,可以精确…...
Leetcode Hot 100刷题记录 -Day12(轮转数组)
轮转数组 问题描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4]解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向…...
GitHub每日最火火火项目(9.13)
以下是对这些项目的详细介绍: fishaudio 的 fish-speech: 基本信息:这是一种全新的语音技术解决方案,属于文本到语音(Text-to-Speech,TTS)技术范畴。技术特点: 多语言支持ÿ…...
力扣--649.Dota2参议院
Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参…...
vim 安装与配置教程(详细教程)
vim就是一个功能非常强大的文本编辑器,可以自己DIY的那种 ,不但可以写代码 ,还可编译 ,可以让你手不离键盘的完成鼠标的所有操作。 如果想要了解vim的的发展历史和详细解说,可以自行上网搜索,我主要是记录一…...
【WPF】Popup的使用
WPF(Windows Presentation Foundation)中的Popup控件用于创建弹出窗口,如工具提示、上下文菜单等。Popup控件本身并不直接显示任何内容,它需要一个子元素来显示实际的内容。 以下是一个简单的XAML示例,展示如何创建一…...
力扣刷题之2576.求出最多标记下标
题干描述 给你一个下标从 0 开始的整数数组 nums 。 一开始,所有下标都没有被标记。你可以执行以下操作任意次: 选择两个 互不相同且未标记 的下标 i 和 j ,满足 2 * nums[i] < nums[j] ,标记下标 i 和 j 。 请你执行上述操…...
黑马JavaWeb开发笔记16——请求(postman、简单参数、实体参数、@RequestParam映射)
文章目录 前言一、postman工具1. 引入2. 介绍3. 安装4. 使用 二、简单参数1. 原始方式(仅了解,以后的开发不会使用)2. SpringBoot方式3. 参数名不一致(RequestParam映射) 三、实体参数1. 简单实体对象2. 复杂实体对象 总结 前言 本篇文章是2…...
Corrupt block relative dba: 0x02c0b382 (file 11, block 45954)
接前面断电故障处理2:oracle数据库断电无法启动恢复-CSDN博客 DM00 started with pid145, OS id16516, job SYS.SYS_IMPORT_TABLE_01 2024-09-13T20:05:22.33130208:00 ADVISORY: Please collect redo for investigation of ORA-8103. Use command: ALTER SYSTE…...
二叉排序树在实际生活应用中作用
二叉排序树(Binary Search Tree, BST)在实际生活中有多种应用,主要用于需要快速查找、插入和删除操作的场景。以下是一些常见的应用领域和具体示例: 1.数据库索引 数据库系统中经常使用 BST 作为索引结构。例如,B-tr…...
单例模式的学习
示例: #ifndef TEST_H #define TEST_Hclass test { public:static test * GetINSTANCE();void print(); private:test(); };#endif // TEST_H#include "test.h" #include <QMutex> #include <QDebug> test::test() {}test *test::GetINSTANC…...
54 mysql 中各种 timeout - connect/wait/interactive/read/write_timeout
前言 在 mysql 的服务器配置中, 我们经常会使用到几个 timeout 诸如 connect_timeout, wait_timeout, interactive_timeout, read_timeout, write_timeout 等等 我们 这里来看一下 他们的具体的使用场景, 以及具体控制的相关信息 是什么 connect_timeout 这个是 客户端 和…...
实战案例(5)防火墙通过跨三层MAC识别功能控制三层核心下面的终端
如果网关是在核心设备上面,还能用MAC地址进行控制吗? 办公区域的网段都在三层上面,防火墙还能基于MAC来控制吗? 采用正常配置模式的步骤与思路 (1)配置思路与上面一样 (2)与上面区…...
【智能流体力学】数值模拟中的稳态和瞬态
在流体力学和数值模拟中, 稳态 (Steady State)意味着流体的物理量(如速度、压力、温度等)不随时间变化。换句话说,在稳态模拟中,系统已经达到了平衡,任何位置上的流场特性都不再随时间发生变化。 其他教程参考:https://doc.cfd.direct/openfoam/user-guide-v12/index…...
Vue-Route4 ts
小满学习视频 Vue-Route 官网 项目的目录结构: 1. Vue-Router的使用 安装Vue-route pnpm add vue-router4创建router文件 /route/index.vue import { createRouter } from "vue-router"; import {createMemoryHistory,createWebHashHistory,create…...
sizeof和strlen的小知识
Hello~,欢迎大家来到我的博客进行学习! 目录 1.sizeof和strlen😺1.1 sizeof🥰 1.2 strlen😋1.3 sizeof和strlen的对比👻 1.sizeof和strlen😺 1.1 sizeof🥰 sizeof是一种单目操作符,…...
Java项目: 基于SpringBoot+mybatis+maven宠物咖啡馆平台(含源码+数据库+毕业论文)
一、项目简介 本项目是一套基于SpringBootmybatismaven宠物咖啡馆平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单…...
戴尔14代服务器配置IDRAC9远程配置说明
一、规划管理网段 规划管理网段,要求如下: 管理网段与业务网段不能使用同一网段;管理网段与业务网段不能直接互通;如有条件管理网与业务网使用不同设备接入。 二、配置服务器idrac 2.1、确认idrac口位置 2.2、开机进F2 2.3、 …...
如何让你家里的电脑连接公司的远程桌面
在远程工作日益普遍的今天,能够从家里的电脑连接到公司的远程桌面,不仅可以提高工作效率,还能确保工作的连续性和数据的安全性。本文将详细指导你如何设置并实现从家中电脑连接至公司远程桌面的过程,无论你是使用Windows还是Mac系…...
软件:分享8个常用视频剪辑免费软件,你都用过吗?
随着视频剪辑的需求增多,现在市面上都有很多好用的视频剪辑软件,有的收费有的免费,不同的视频剪辑软件有不同的特点和优势。本文整理了几个简单好用的电脑视频剪辑工具,供大家参考。 不同的剪辑技术对应了不同的视频剪辑软件&…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
