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

Python+Reportlab:直接使用np.array图像生成PDF报告的报错问题

解决Reportlab直接使用numpy数组图像生成PDF的问题

我之前刚好碰到过一模一样的问题!Reportlab的drawImage方法其实并不直接支持numpy数组作为输入——它默认只认文件路径、PIL Image对象,或者是带read()方法的文件类对象(比如内存中的字节流)。直接传np.array肯定会报错,给你两个不用存本地文件就能解决的方案:

方案一:将numpy数组转为PIL Image对象直接传入

这是最直接的方式,利用PIL库把numpy数组转换成Reportlab能识别的Image对象,步骤如下:

from PIL import Image
import numpy as np
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
import matplotlib.pyplot as plt

# 你的原有代码:读取并处理图像
asd = plt.imread(imagen_fl)
# 这里是你的图像处理步骤...

# 处理numpy数组格式:plt.imread返回的是0-1的float型,需要转成0-255的uint8
if asd.dtype in [np.float32, np.float64]:
    asd = (asd * 255).astype(np.uint8)

# 根据图像类型转成PIL Image
if len(asd.shape) == 2:
    # 灰度图像,指定模式为'L'
    pil_image = Image.fromarray(asd, mode='L')
else:
    # RGB/RGBA图像,直接转换
    pil_image = Image.fromarray(asd)

# 生成PDF
pdf_canvas = canvas.Canvas("image_report.pdf")
# 直接传入PIL Image对象即可
pdf_canvas.drawImage(pil_image, 1*cm, 3*cm, 10*cm, 10*cm)
pdf_canvas.save()

方案二:将图像存入内存字节流(BytesIO)再传入

如果需要更灵活的内存操作,可以把PIL Image存入BytesIO字节流,再传给drawImage,效果和直接传Image对象一样:

from io import BytesIO
from PIL import Image
import numpy as np
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
import matplotlib.pyplot as plt

# 读取并处理图像
asd = plt.imread(imagen_fl)
# 图像处理步骤...

# 格式转换(同方案一)
if asd.dtype in [np.float32, np.float64]:
    asd = (asd * 255).astype(np.uint8)
pil_image = Image.fromarray(asd) if len(asd.shape)!=2 else Image.fromarray(asd, mode='L')

# 将图像写入内存字节流
img_buffer = BytesIO()
pil_image.save(img_buffer, format='PNG')  # 可以选择PNG/JPG等格式
img_buffer.seek(0)  # 将文件指针移到流的开头,确保Reportlab能读取

# 生成PDF
pdf_canvas = canvas.Canvas("image_report.pdf")
pdf_canvas.drawImage(img_buffer, 1*cm, 3*cm, 10*cm, 10*cm)
pdf_canvas.save()

注意事项

  • 如果你的图像是用OpenCV读取的(BGR格式),需要先转成RGB再传给PIL:asd = cv2.cvtColor(asd, cv2.COLOR_BGR2RGB)
  • 若图像是RGBA格式(带透明通道),Reportlab也能正常处理,无需额外转换
  • 确保安装了依赖库:pip install pillow reportlab numpy matplotlib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:54:37