如何将编辑后的图像列表重建为图像对象并正常保存为PNG文件?
问题根源
保存空白图像的核心原因是数据类型不匹配:
- PIL的
Image.fromarray在RGBA模式下,要求输入的numpy数组必须是uint8类型(取值范围0~255的无符号8位整数) - 你通过
np.asarray(my_dot_list)生成的数组默认是普通整数类型(通常为int32/int64),和PIL要求的类型不匹配,导致解析失败生成空白图像 - matplotlib的
imshow会自动对输入数组做归一化处理,所以即便类型不对也能正常显示,这就是显示正常但保存异常的原因。
修复方案
重构数组时显式指定数据类型为uint8,同时修正save方法的冗余赋值即可,修改后的代码如下:
import numpy as np import matplotlib.pyplot as mpl from PIL import Image # 拆解图像为可编辑列表 img = Image.open('mini.png') my_dot_array = np.asarray(img) my_dot_list = my_dot_array.tolist() my_dot_list[0][0] = [30, 220, 90, 255] # 尝试修改图像中的单个像素 # 重构图像并保存为.png文件 # 关键修改:显式将数组转换为uint8类型,适配PIL的RGBA模式要求 my_dot_array = np.asarray(my_dot_list, dtype=np.uint8) img = Image.fromarray(my_dot_array, mode='RGBA') img.save('updated_mini.png') # 修正:save方法无返回值,不需要赋值 # 显示生成的图像 mpl.imshow(my_dot_array) mpl.show()
内容的提问来源于stack exchange,提问作者Kiki-Jiki
相关产品推荐
相关产品推荐

