通过python提取PDF文件指定页的图片

news2024/11/17 17:54:16

整体思路

要从 PDF 文件中提取指定页和指定位置的图片,可以分几个步骤来实现:

1.1 准备所需工具与库

在 Python 中处理 PDF 和图像时,需要使用几个库:

  • PyMuPDF (fitz):用于读取和处理 PDF 文件,可以精确获取指定页面内容。
  • Pillow:处理图像,用于裁剪和保存图片。
  • pdf2image:将 PDF 页面转换为图像格式,方便进一步处理。
1.2 基本流程
  1. 读取 PDF 文件:使用 PyMuPDF 读取 PDF 文件,找到指定页。
  2. 获取页面图像:使用 pdf2image 将目标页转换为图像。
  3. 确定图片区域:使用坐标来指定图像中的区域。该区域可以通过手动确定,或者通过图像识别技术(如 OCR)来定位。
  4. 提取并保存图片:使用 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

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

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

相关文章

【STM32】esp8266连接wifi

1.配置stm32cubemx 使用串口二接收esp8266的数据,单片机接收,使用串口1将数据发送给串口助手 串口2波特率设置74880,串口1设置115200 在初始化的时候需要将复位引脚拉低20ms,然后再拉高20ms, 设置GPIOB的输出模式 对PB12做输出处理 2.…

多旋翼无人机挂载电激发弹发射器技术详解

多旋翼无人机挂载电激发弹发射器技术是一种结合了无人机的高机动性和电激发弹发射器的精确打击能力的先进技术。以下是对该技术的详细解析: 一、多旋翼无人机概述 多旋翼无人机,也称为多轴飞行器或多旋翼飞行器,是一种具有三个及以上旋翼轴…

【pycharm】安装以及简单使用教程

以windows版本举例: 1、首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#sectionwindows,下载PyCharm安装包,根据自己电脑的操作系统进行选择,对于windows系统选择下图的…

大数据处理技术:Hadoop开发环境搭建

目录 1 实验名称 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 JavaJDK的配置 5.2 Hadoop安装与伪分布式集群搭建 5.3 HDFS系统初体验 6 实验结果 6.1 JavaJDK的配置结果 6.2 Hadoop安装与伪分布式集群搭建结果 6.3 HDFS系统初体验结果 1 实验名称 Ha…

用Cursor生成一个代办事项列表的功能

一、本地新建html文件 二、输入代码 2.1 Cursor描述 其实这一段代码使用Cursor生成,可以输入如下内容,即可自动生成代码: 创建一个代办事项列表应用的基本结构,呈现在可交互界面上,1,提供可交互界面&…

乐器检测系统源码分享

乐器检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

【Vue】- Vue表达式

文章目录 知识回顾前言Vue项目介绍 源码分析1. 项目结构介绍(单页面应用程序)2. 项目运行流程图(单页面应用程序)3. 选项式和组合式api4. 插值表达式 {{}} 胡子语法5. reactive函数6. ref表达式 拓展知识reactive和ref的选择 总结 知识回顾 前言 Vue项…

利用python处理线性规划问题

利用python处理线性规划问题 linprog函数基本例题例题1例题2 典型例题例一:生产决策问题例一:生产决策问题 (例题和部分解答思路来自清风老师) linprog函数 导入模块 from scipy.optimize import linprog函数功能 Linear progra…

计算机毕业设计 毕业季一站式旅游服务定制平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

视频笔记1

玩转apollo课程内讲解靠边启动场景_哔哩哔哩_bilibili 用open_space_roi_decider 改后 善用坐标点 如何不影响其它场景:if判断

Gradio快速部署构建AIGC的web应用 ,python

Gradio快速部署构建AIGC的web应用 ,python Gradio开源项目链接: https://github.com/gradio-app/gradiohttps://github.com/gradio-app/gradio (1)python的pip安装: pip install gradio (2)写…

webpack打包原理

目录 1、搭建结构,读取配置参数2、配置参数对象初始化 Compiler(new Compiler(webpackOptions))3、挂载配置文件中的插件,4、执行Compiler 中的 run 方法进行编译5、根据配置文件中的entry 配置项找到所有的入口6、从入口文件出发…

HAL库学习梳理——UART

笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。下面对HAL库有关UART课程知识和应用做一个梳理。 省流: uint8_t byteNumber 0x5a;uint8_t byteArray[] {0,1,2,3,4,5};char ch a;char *str "Hello word";HAL_UART_Transmit(&huart1,&by…

Windows环境下 VS2022 编译 Xvid 源码

Xvid Xvid 是一个开源的视频编解码器,遵循 MPEG-4 视频编码标准,特别是 MPEG-4 Part 2 Advanced Simple Profile。它被广泛用于视频的压缩和解压,尤其是在互联网上分享视频文件时,因为它能够有效地减小文件大小而不会过多损失视频…

切线空间:unity中shader切线空间,切线矩阵,TBN矩阵 ,法线贴图深度剖析

unity中shader切线空间 看了网上各种解释,各种推理。直接脑袋大。感觉复杂的高大上。当深入了解后,才发是各种扯淡。 一切从模型法向量开始 在shader中,大部分的光照计算都是与法向量有关。通过法向量和其他向量能计算出模型在光线照射下的…

How to see if openAI (node js) createModeration response “flagged“ is true

题意:如何查看 OpenAI (Node.js) createModeration 响应中的 "flagged" 是否为 true 问题背景: Using the OpenAI createModeration feature, I am trying to see if the string gets flagged or not. 使用 OpenAI 的 createModeration 功能…

医学数据分析实训 项目一 医学数据采集

项目一 医学数据采集 一、实践目的 了解医学数据的特点;熟悉常见的医学公共数据库的使用方法;掌握获取医学数据的方法; 二、实践平台 操作系统:Windows10 及以上Python 版本:3.8.x 及以上PyCharm 或 Anoconda 集成…

Ubuntu 安装最新 Google Chrome 浏览器

谷歌浏览器使用简单并且用户友好,使用它浏览互联网愉悦至极。许多用户喜欢 Chrome,因为它加载网页又快又流畅。Chrome 提供强大的安全功能,帮助用户保持在线安全。Google Chrome 官方提供了一个 Debian 软件包存储库,基于 Debian …

Llama Factory :百种以上语言模型的统一高效微调框架

人工智能咨询培训老师叶梓 转载标明出处 大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为Llama Factory的统一框架,…

【免费刷题】实验室安全第一知识题库分享

道路千万条,实验安全第一条。 嘿,实验室的小伙伴们!是不是还在为实验室安全考试而烦恼?别担心,今天就让我来分享一些实用的题库,帮助你轻松应对考试,同时也更好地保护自己和实验室的安全。 一、…