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

Python3 PIL通过(x,y,RGB)数据生成图像报Size must be a tuple错误

错误原因

PIL.Image.new()的方法签名为Image.new(mode, size, color=0),参数要求如下:

  • 第一个位置参数传入图像色彩模式,比如'RGB'
  • 第二个位置参数传入图像尺寸,必须是(宽度, 高度)格式的二元元组
  • 第三个位置参数传入图像初始填充色,可选

你写的代码存在两个问题:

  1. 参数顺序完全错位:把宽度值传给了mode参数,高度值传给了size参数,色彩模式字符串传给了color参数
  2. 尺寸参数没有打包成元组:传入的height是单独的整数值,不符合size参数必须为元组的要求,因此触发对应报错。
修正代码与完整实现

第一步:修正图像初始化逻辑

调整参数顺序,将宽高打包为元组传入:

from PIL import Image

width = 73
height = 880
# 参数顺序:模式、(宽,高)元组、初始背景色(这里用白色举例,可按需修改)
img = Image.new('RGB', (width, height), (255, 255, 255))

第二步:写入(x,y,RGB)格式的像素数据

根据数据量大小选择对应的写入方式:

  • 数据量较小时,用putpixel逐点写入,逻辑简单
# 假设你的像素数据存在pixel_list变量中,每个元素格式为(x坐标, y坐标, (R值, G值, B值))
# 注意R/G/B值必须是0~255区间的整数,如果是0~1的浮点数要先乘255取整
pixel_list = [
    (0, 0, (255, 0, 0)),  # 示例:左上角第一个像素填充红色
    # 此处替换为你自己的全量像素数据
]

for x, y, rgb in pixel_list:
    # 增加边界判断,避免坐标超出图像尺寸触发越界报错
    if 0 <= x < width and 0 <= y < height:
        img.putpixel((x, y), rgb)
  • 数据量较大时,用putdata批量写入,运行速度更快
# 先初始化和图像像素总数等长的像素列表,默认填充白色
pixel_array = [(255, 255, 255)] * (width * height)

for x, y, rgb in pixel_list:
    if 0 <= x < width and 0 <= y < height:
        # 二维坐标转一维索引:行号*每行宽度 + 列号
        pixel_index = y * width + x
        pixel_array[pixel_index] = rgb

# 一次性把全量像素写入图像
img.putdata(pixel_array)

第三步:保存或展示生成的图像

img.save("result.png")  # 保存为本地图片文件
img.show()  # 调用系统默认图片查看器打开图像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:21