python将 PDF 转换为图片

使用工具(如 PyMuPDF、PDFMiner 等)从 PDF 文件中提取图像内容。如

PyMuPDF使用将pdf转化为图片。

使用 PyMuPDF 将 PDF 转换为图片主要有两种方法:一种是直接提取 PDF 中嵌入的图片,另一种是将 PDF 的每一页渲染为图片。以下是两种方法的详细步骤和代码示例:

方法一:提取 PDF 中嵌入的图片

这种方法适用于 PDF 文件中已经嵌入了图片的情况。你可以直接提取这些图片并保存为文件。

示例代码:

Python
复制
import fitz  # PyMuPDF
import os

def extract_images_from_pdf(pdf_path, output_folder):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)
    # 遍历每一页
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        image_list = page.get_images(full=True)
        # 遍历每一页中的每个图片
        for img_index, img in enumerate(image_list):
            xref = img[0]
            base_image = pdf_document.extract_image(xref)
            image_bytes = base_image["image"]
            image_ext = base_image["ext"]
            # 保存图片到输出文件夹
            image_filename = f"{output_folder}/image_{page_num + 1}_{img_index + 1}.{image_ext}"
            with open(image_filename, "wb") as image_file:
                image_file.write(image_bytes)
    print("图片提取完成")

# 使用示例
pdf_path = "example.pdf"
output_folder = "output_images"
os.makedirs(output_folder, exist_ok=True)  # 确保输出文件夹存在
extract_images_from_pdf(pdf_path, output_folder)
 

方法二:将 PDF 的每一页渲染为图片

这种方法适用于将整个 PDF 页面转换为图片,而不仅仅是提取嵌入的图片。你可以指定页面的分辨率来控制输出图片的质量。

示例代码:

Python
复制
import fitz  # PyMuPDF
from PIL import Image
import os

def convert_pdf_to_images(pdf_path, output_folder, resolution=200):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)
    # 遍历 PDF 中的每一页
    for page_number in range(len(pdf_document)):
        page = pdf_document[page_number]
        # 获取页面的原始大小(以点为单位)
        zoom_x = resolution / page.rect.width
        zoom_y = resolution / page.rect.height
        # 使用最小的缩放比例以确保整个页面都适应目标分辨率
        zoom = min(zoom_x, zoom_y)
        # 创建一个矩阵来应用缩放和抗锯齿
        mat = fitz.Matrix(zoom, zoom)
        # 将 PDF 页面转换为图片
        pix = page.get_pixmap(matrix=mat)
        # 使用 PIL 的 Image 对象打开图片
        image = Image.frombytes("RGB", (pix.width, pix.height), pix.samples)
        # 保存图片
        image_filename = f"{output_folder}/page_{page_number + 1}.png"
        image.save(image_filename)
        print(f"Saved {image_filename}")
    # 关闭 PDF 文件
    pdf_document.close()

# 使用示例
pdf_path = "example.pdf"
output_folder = "output_images"
os.makedirs(output_folder, exist_ok=True)  # 确保输出文件夹存在
convert_pdf_to_images(pdf_path, output_folder, resolution=300)
 

注意事项

  • 安装 PyMuPDF:确保你已经安装了 PyMuPDF 库,可以通过 pip install PyMuPDF 命令安装
  • 输出文件夹:确保输出文件夹存在,或者在代码中创建它
  • 分辨率:在渲染页面为图片时,可以通过调整分辨率参数来控制输出图片的质量
通过上述方法,你可以轻松地将 PDF 文件转换为图片,或者提取 PDF 中嵌入的图片。根据你的具体需求选择合适的方法即可。
posted @ 2025-04-20 20:17  yinghualeihenmei  阅读(579)  评论(0)    收藏  举报