如何创建兼容Pillow .save()方法的PDF页面图片数组?
问题:如何创建兼容PIL Image.save()的PDF页面图片数组?
我通过pdf2image导入PDF:
images = convert_from_path(r"D:\Jupyter\abc.pdf", output_folder=r"D:\TempPython", poppler_path = r"D:\PopplerLIB\Library\bin")
随后在主循环中逐页处理图片,将处理后的页面副本存入imagesConverted数组,但使用以下保存代码时出现报错:
images.save(pdf_path, "PDF" ,resolution=100.0, save_all=True, append_images=imagesConverted[1:])
报错信息:
'numpy.ndarray' object has no attribute 'encoderinfo'
请问如何创建可兼容.save()方法的PDF页面图片数组?
解决方案
- 核心原因:处理后得到的是numpy.ndarray类型对象,但
save()方法要求传入的是PIL Image格式对象,两者不兼容导致报错。 - 转换步骤:
- 先导入必要依赖库:
from PIL import Image import numpy as np - 根据处理后的数组格式,转换为PIL Image:
- 若数组为RGB格式(通道顺序R-G-B):
# 假设processed_page是处理后的numpy.ndarray pil_img = Image.fromarray(np.uint8(processed_page)) imagesConverted.append(pil_img) - 若数组为BGR格式(比如用OpenCV处理后的结果),需先转换通道顺序:
import cv2 # 转换BGR到RGB rgb_page = cv2.cvtColor(processed_page, cv2.COLOR_BGR2RGB) pil_img = Image.fromarray(np.uint8(rgb_page)) imagesConverted.append(pil_img)
- 若数组为RGB格式(通道顺序R-G-B):
- 先导入必要依赖库:
- 验证:确认
imagesConverted中的每个元素都是PIL Image对象,与原images列表的元素类型一致,即可正常调用save()方法。
内容的提问来源于stack exchange,提问作者Marc Tetreault
相关产品推荐
相关产品推荐

