分享

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

 信息科技云课堂 2024-04-19 发布于山东

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

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

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

从 PDF 中提取图像

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 文件中的所有图像并有以下输出:

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

将 PDF 页面转换为图像

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

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。

点亮在看,你最好看!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多