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

PyPNG文档是否有误?保存像素行遇格式匹配问题

PyPNG Writer输入格式问题解析与解决方案

错误原因

你触发的png.ProtocolError本质是RGB模式下的行数据格式不匹配:PyPNG的Writer要求RGB图像的每一行必须是扁平化的整数分量序列,而不是包含RGB元组的数组。当你传入10个RGB元组作为一行时,Writer会将每个元组视为单个"值",导致一行仅被识别为10个值,但10列的RGB图像每行需要10×3=30个分量值,因此报错。

正确的两种输入格式

PyPNG稳定版仅支持以下两种合法输入格式:

  • 格式1:全图像扁平化一维数组
    将所有像素的RGB分量按顺序拼接成一个一维数组,长度为width×height×3。示例代码:

    import png
    
    width, height = 10, 10
    # 生成全红像素数据:每个像素的R=255, G=0, B=0
    pixels = [255, 0, 0] * width * height
    with open('output_rgb.png', 'wb') as f:
        writer = png.Writer(width, height, bitdepth=8)
        writer.write(f, pixels)
    
  • 格式2:按行拆分的扁平化一维数组列表
    每一行对应一个长度为width×3的一维数组,所有行组成一个列表。示例代码:

    import png
    
    width, height = 10, 10
    # 每行生成全绿像素的扁平化数据
    rows = [[0, 255, 0] * width for _ in range(height)]
    with open('output_rows.png', 'wb') as f:
        writer = png.Writer(width, height, bitdepth=8)
        writer.write(f, rows)
    

关于文档与版本的疑问

  1. 文档问题:PyPNG官方文档确实存在表述模糊的情况,部分示例混淆了灰度图与RGB图的格式差异——灰度图可以直接传入单个数值的二维数组(如[[0]*width]*height),但RGB图必须使用扁平化的分量序列。你看到的"3整数元组的宽×高二维数组"示例属于文档疏漏,并非合法的稳定版用法。
  2. 版本问题:如果你使用的是PyPNG稳定版(如0.20220715.0及以后),不存在所谓"实验版本"的特殊用法,元组二维数组本身就不是RGB模式的合法输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:21:08