Python3 PIL通过(x,y,RGB)数据生成图像报Size must be a tuple错误
错误原因
PIL.Image.new()的方法签名为Image.new(mode, size, color=0),参数要求如下:
- 第一个位置参数传入图像色彩模式,比如
'RGB' - 第二个位置参数传入图像尺寸,必须是(宽度, 高度)格式的二元元组
- 第三个位置参数传入图像初始填充色,可选
你写的代码存在两个问题:
- 参数顺序完全错位:把宽度值传给了
mode参数,高度值传给了size参数,色彩模式字符串传给了color参数 - 尺寸参数没有打包成元组:传入的
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
相关产品推荐
相关产品推荐

