如何在Python中将二进制数组写为图像?

int*_*lex 10 python python-imaging-library

我在Python中有一个二进制数组:

data = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1...]
Run Code Online (Sandbox Code Playgroud)

我想取出这些数据并将其保存为位图,其中"0"对应于白色,"1"对应于黑色.我知道数组中有2500个数字,对应于50x50位图.我已经下载并安装了PIL,但我不确定如何将它用于此目的.如何将此数组转换为相应的图像?

ozg*_*gur 16

您可以使用Image.newwith 1模式并将每个整数作为像素放在初始图像中:

>>> from PIL import Image
>>> import random

>>> data = [random.choice((0, 1)) for _ in range(2500)]
>>> data[:] = [data[i:i + 50] for i in range(0, 2500, 50)]
>>> print data
[[0, 1, 0, 0, 1, ...], [0, 1, 1, 0, 1, ...], [1, 1, 0, 1, ...], ...]

>>> img = Image.new('1', (50, 50))
>>> pixels = img.load()

>>> for i in range(img.size[0]):
...    for j in range(img.size[1]):
...        pixels[i, j] = data[i][j]

>>> img.show()
>>> img.save('/tmp/image.bmp')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • Upvoting,因为这是唯一的答案,不使用原始问题或标签中未提及的外部库. (5认同)

CT *_*Zhu 8

numpymatplotlib这样做将是这样:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
plt.imsave('filename.png', np.array(data).reshape(50,50), cmap=cm.gray)
Run Code Online (Sandbox Code Playgroud)

看到这个

  • 默认情况下,它将数组保存在jet colormap中,黑色和白色将是灰色colormap.当我回到我的机器时会更新答案 (2认同)