如何读取二进制文件并将数据转换为图像?

时间:2012-05-26 03:07:21

标签: python binary python-imaging-library

基本上我想要做的是获取一个文件,将其二进制数据(当然是十进制)放入一个列表中,然后使用基于该列表的PIL生成灰度位图图像。

例如,如果文件是5000字节(图像大小将是100 x 50)并且每个字节是0到255之间的整数,我想将第一个字节绘制到第一个像素并向下行直到所有字节筋疲力尽。

到目前为止,我唯一得到的是阅读文件:

f = open(file, 'rb')
text = f.read()
for s in text:
    print(s)

以十进制输出字节。

我正在寻找如何实现这一目标的方向。我已经做了很多搜索,但似乎并没有太多尝试做我想做的事情。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

来自PIL Image documentation

Image.fromstring(mode, size, data)

对于你的例子:

im = Image.fromstring('L', (100, 50), text)

还有一个frombuffer函数,但区别并不明显。

答案 1 :(得分:2)

我不认为使用PIL会非常有效,但如果您想在空白画布上绘画,可以查看ImageDraw模块。

我的方法会有所不同:由于您的文件格式非常接近Netpbm格式,我会尝试转换它。为简单起见,请在阅读时尝试添加/操作格式的标题,以便PIL可以原生读取它。

答案 2 :(得分:2)

我认为应该这样做。 scipy是一个选项吗?

In [34]: f = open('image.bin', 'r')

In [35]: Y = scipy.zeros((100, 50))

In [38]: for i in range(100):
             for j in range(50):
                 Y[i,j] = ord(f.read(1))

In [39]: scipy.misc.imsave('image.bmp', Y)

答案 3 :(得分:0)

您可以使用Numpy的my_data_frame["key"] = value来有效地阅读它:

my_data_frame.key

关键字:PIL,Pillow,Python,Numpy,读取原始,二进制,8位,灰度灰度,图像,图像处理。