创建灰度图像

14 投票
3 回答
28484 浏览
提问于 2025-04-15 18:19

我正在从一个文件中读取二进制数据,这些数据指定了在 x 和 y 坐标上的强度值(这不是一种开源的图像格式),我想把它转换成 PNG 图像(或者其他广泛支持的格式)。我已经把数据加载到一个数组中(使用数组模块),数组中的每个元素都是一个从 0 到 255 的整数。为了把这个保存为 PNG,我可以创建一个包含每个元素(x)的 3 个项目的元组,像这样:

t = (x, x, x)

然后使用 map() 函数将其应用到整个数组上,最后用 putdata() 保存图像。然而,把数据转换成元组数组的过程花了很长时间(几分钟)。有没有办法只用一个整数来指定 RGB 值(而不是元组)?我猜一个替代方案是使用 NumPy,但我不知道从哪里开始,所以如果能提供一些帮助,我会非常感激。

提前谢谢你的帮助。

3 个回答

0

你是在找 im.putpixel(xy, colour) 这个方法吗?

3

有几种方法可以做到这一点,但如果你已经把数据加载到内存中了,可以考虑使用 Image.frombufferImage.fromstring,并选择 'L' 模式(这是用来处理8位灰度数据的)。

23

当你创建新图像时,记得把模式设置为 L:

im = Image.new('L', size)
im.putdata([x1, x2, x3, ...])

这里的 data 是一个值的列表,而不是元组。

撰写回答