如何修改Python代码将PNG的RGBA值按单个像素分组为数组条目
问题原因
现有代码的列表推导式额外遍历了单个像素的RGBA通道值,导致所有通道值被展开为一维数组。
修改方案
方案1:基于原有逻辑调整(无额外依赖)
补全缺失的PIL导入,同时去掉列表推导式中遍历通道的内层逻辑即可:
import sys from PIL import Image # 原有代码遗漏了该依赖导入 # 读取输入文件参数 infile = sys.argv[1] # 加载PNG图片 img = Image.open(infile) pixels = img.load() # 生成每个元素为单个RGBA像素的数组 pix_val = [pixels[x, y] for x in range(img.size[0]) for y in range(img.size[1])] print(pix_val)
方案2:基于numpy实现(写法更简洁)
如果你已经导入了numpy,可以直接将图片对象转为数组,效率更高:
import sys import numpy as np from PIL import Image infile = sys.argv[1] img = Image.open(infile) # 得到形状为(图片高度, 图片宽度, 4)的numpy数组,最后一维为RGBA四值 pix_np = np.array(img) # 转为一维列表,每个元素为单个RGBA像素的四值列表 pix_val = pix_np.reshape(-1, 4).tolist() print(pix_val)
输出效果
修改后输出示例为 [[255, 255, 255, 15], [211, 211, 211, 29], [128, 126, 119, 107]],每个列表元素对应单个像素的完整RGBA值。
内容的提问来源于stack exchange,提问作者Musiz
相关产品推荐
相关产品推荐

