如何在 Python 中将二进制数组写为图像?
How can I write a binary array as an image in Python?
我在 Python 中有一个二进制数数组:
data = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1...]
我想把这个数据取出来保存为位图,'0'对应白色,'1'对应黑色。我知道数组中有2500个数字,对应一个50x50的位图。我已经下载并安装了 PIL,但我不确定如何将其用于此目的。如何将这个数组转换成对应的图片?
numpy
和 matplotlib
的方法是:
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)
见this
import scipy.misc
import numpy as np
data = [1,0,1,0,1,0...]
data = np.array(data).reshape(50,50)
scipy.misc.imsave('outfile.bmp', data)
您可以将 Image.new
与 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')
不适用于二进制数组
如果您有这种格式的二进制数据 - b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00...
,那么您可以使用这种方法将其写入图像文件:
with open("image_name.png", "wb") as img:
img.write(binary_data)
我在 Python 中有一个二进制数数组:
data = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1...]
我想把这个数据取出来保存为位图,'0'对应白色,'1'对应黑色。我知道数组中有2500个数字,对应一个50x50的位图。我已经下载并安装了 PIL,但我不确定如何将其用于此目的。如何将这个数组转换成对应的图片?
numpy
和 matplotlib
的方法是:
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)
见this
import scipy.misc
import numpy as np
data = [1,0,1,0,1,0...]
data = np.array(data).reshape(50,50)
scipy.misc.imsave('outfile.bmp', data)
您可以将 Image.new
与 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')
不适用于二进制数组
如果您有这种格式的二进制数据 - b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00...
,那么您可以使用这种方法将其写入图像文件:
with open("image_name.png", "wb") as img:
img.write(binary_data)