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

如何使用PyMuPDF直接将NumPy数组图像保存到PDF页面?

直接将NumPy数组图像转PDF的优化方案

你完全可以跳过保存PNG临时文件的步骤,直接在内存中处理NumPy数组生成PDF页面,既提升效率又避免磁盘IO操作。下面是优化后的代码:

import fitz
import numpy as np
from PIL import Image
from cv2 import cvtColor, COLOR_RGB2GRAY

doc = fitz.open()
pdf = fitz.open("in.pdf")

for page in pdf:
    # 从原PDF页面提取图像并转为灰度NumPy数组
    pix = page.get_pixmap(matrix=fitz.Matrix(7, 7))
    im = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
    gray_np = cvtColor(np.array(im), COLOR_RGB2GRAY)
    
    # 直接将灰度NumPy数组转为PyMuPixmap(内存操作,无需存盘)
    gray_pix = fitz.Pixmap(
        fitz.csGRAY,  # 指定灰度色彩空间
        gray_np.shape[1],  # 图像宽度
        gray_np.shape[0],  # 图像高度
        8,  # 每个像素的比特数(灰度图用8位)
        gray_np.tobytes()  # 数组的字节数据
    )
    
    # 创建匹配图像尺寸的PDF新页面
    new_page = doc.new_page(width=gray_pix.width, height=gray_pix.height)
    # 将灰度图像直接插入页面
    new_page.insert_image(new_page.rect, pixmap=gray_pix)

# 保存最终PDF
doc.save("out.pdf")
pdf.close()

关键优化点:

  • 省去了临时PNG文件的保存、读取和删除步骤,所有处理都在内存中完成
  • 利用fitz.Pixmap直接将NumPy数组的字节数据转换为PyMuPDF可识别的像素图对象
  • 通过insert_image方法直接将像素图绘制到PDF页面,无需中转临时PDF流

内容的提问来源于stack exchange,提问作者R.Q Luo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:12:23