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

如何用Python3从提取的扁平化像素值重建图像?

如何从扁平化的像素列表重建图像?

我写了下面这段代码来读取红色花朵图片的像素值,把像素扁平化后得到了一个一维的像素值列表:

from PIL import Image
im = Image.open('red-flower.jpg', 'r')
pix_val = list(im.getdata())
pix_val_flat = [x for sets in pix_val for x in sets]
print(pix_val_flat)

原来的pix_val是[(R,G,B,A),(R,G,B,A)]这样的格式,现在pix_val_flat是一个简洁的一维列表。现在我想知道怎么用这个扁平化后的像素列表重建出原来的图像?


要重建图像其实很简单,核心是你得保留原图像的两个关键信息:尺寸(宽×高)和图像模式(比如RGB、RGBA)——毕竟扁平化的时候你丢掉了像素的分组结构,得靠这两个信息把一维列表重新组装回像素块,再生成图像。

下面是具体的实现步骤和代码:

步骤1:先保存原图像的关键信息

在扁平化像素之前,最好先把原图像的尺寸和模式存下来,不然之后重建会找不到依据:

from PIL import Image

# 打开原图像并保存关键信息
im = Image.open('red-flower.jpg', 'r')
original_size = im.size  # 格式是(宽度, 高度)
original_mode = im.mode  # 比如'RGB'(JPG常用)或者'RGBA'(PNG常用)

# 你的扁平化代码
pix_val = list(im.getdata())
pix_val_flat = [x for sets in pix_val for x in sets]

步骤2:把扁平化的列表重新分组为像素元组

根据原图像的模式,我们能知道每个像素包含几个值:比如RGB模式每个像素有3个值(R,G,B),RGBA有4个。按照这个长度把一维列表重新分组就行:

# 计算每个像素的元素个数(RGB是3,RGBA是4)
pixel_length = len(original_mode)
# 按像素长度拆分一维列表,重组为像素元组
reconstructed_pixels = [tuple(pix_val_flat[i:i+pixel_length]) for i in range(0, len(pix_val_flat), pixel_length)]

步骤3:创建新图像并写入像素

用PIL创建一个和原图像尺寸、模式完全一致的新图像,然后把重组后的像素写入进去:

# 创建空的新图像
reconstructed_im = Image.new(original_mode, original_size)
# 把重组后的像素数据写入图像
reconstructed_im.putdata(reconstructed_pixels)
# 保存或显示重建后的图像
reconstructed_im.save('reconstructed-red-flower.jpg')
reconstructed_im.show()

小提醒

  • 如果原图像是JPG格式,它的模式基本是RGB(JPG不支持透明通道),所以每个像素对应3个值;如果是PNG可能是RGBA,对应4个值。
  • 要确保扁平化列表的长度是「原图像总像素数 × 每个像素的元素个数」,不然分组时会出错——比如100×100的RGB图,总像素是10000,扁平化列表长度就得是30000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:50:56