You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python fitz库按先左后右顺序提取PDF页面内的图片

fitz按左→右视觉顺序提取PDF图片方法

问题根源

你当前使用的page.getImageList()返回的是PDF内部资源存储的图片顺序,和页面实际渲染的视觉顺序无关联,因此会出现提取顺序和显示顺序不符的问题。

实现思路

要实现先提取左侧图片、再提取右侧图片的需求,需要通过图片在页面上的横坐标排序:

  • 调用page.get_image_info()接口获取图片的完整信息,包含每张图片的位置边框bbox,格式为(左上角x坐标, 左上角y坐标, 右下角x坐标, 右下角y坐标)
  • 按bbox的第一个值(左上角x坐标)升序排序,即可得到左→右的视觉顺序
  • 按排序后的列表依次提取图片即可

修正后代码

import fitz
import io
from PIL import Image

pdf_file = fitz.open("你的PDF文件路径.pdf")
for page_index in range(len(pdf_file)):                                                                                 
    if ( page_index < 4 or page_index == len(pdf_file) - 1 ): continue                                                 
    page = pdf_file[page_index]
    # 获取带坐标的图片列表,按左上角x坐标升序排序(左→右)
    image_info_list = sorted(page.get_image_info(), key=lambda x: x["bbox"][0])
    
    v = 0
    for img in image_info_list:
        if v == 0:                                                                                            
            v += 1
            continue
        xref = img["xref"]
        # 提取图片
        base_image = pdf_file.extract_image(xref)
        image_bytes = base_image["image"]
        image_ext = base_image["ext"]
        image = Image.open(io.BytesIO(image_bytes))
        # 保存逻辑可自行补充,比如按页码+左右顺序命名
        # 排序后第一个是左侧图,第二个是右侧图
        # image.save(f"page_{page_index}_{'left' if v==1 else 'right'}.{image_ext}")
        v +=1

注意事项

如果你的PDF存在页面旋转的情况,需要先调用page.set_rotation(0)重置页面旋转属性,再获取图片坐标,避免坐标计算偏移。如果后续有上下顺序排序的需求,可在排序规则中额外增加y坐标的判断逻辑。

内容的提问来源于stack exchange,提问作者Ahmed Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:15:03