背景
最近在做图片相关的项目,有个需求要求同时支持PDF和图片,那么很直观的思路的把PDF文档转换为
List<image>
来适配统一的处理策略。
所以本教程是介绍如何使用Python
语言将List<image>
。
环境以及依赖package
NStudyPy==0.0.5
NStudyPy 工具包 , 一个有用的工具包,可以简化开发流程,详细介绍可以参考 NStudyPy
由于NStudyPy
依赖于pdf2image <=1.17.0
,pdf2image
又依赖poppler
, poppler安装请参考 poppler
本教程使用python 3.10.13
作为开发环境 , 原则上适用于python 3.9+
本教程开发环境为windows 10
,原则上其他系统应该也可以 , 但请注意需要安装对应环境的 poppler, 同时需注意配置环境变量
, 环境变量配置请参阅本站其他文档!!本站支持全文搜索。
主要流程
- 创建项目,安装依赖
pip install NStudyPy==0.0.5
- 调用方法
def test_pdf():
for image in PyPDF.convert_images(r'1.pdf', ImageFormat.PIL):
if isinstance(image, Image):
print(image.format, image.mode)
else:
print(image.shape)
说明
pdf_path
: pdf文件路径image_format
: 图片格式, 默认为ImageFormat.OPENCV
, 同时支持返回ImageFormat.PIL
格式
- 核心源码
def convert_images(pdf_path: str, image_format: ImageFormat = ImageFormat.OPENCV) -> List[object]: """ Convert pdf to images :param image_format: ImageFormat :param pdf_path: :return: List[Image.Image] or List[cv2.typing.MatLike] """ images = convert_from_path(pdf_path) if image_format == ImageFormat.OPENCV: new_images = [] for image in images: opencv_image = np.array(image) if opencv_image.shape[2] == 3: opencv_image = cv2.cvtColor(opencv_image, cv2.COLOR_RGB2BGR) new_images.append(opencv_image) return new_images return images