2012-05-26 51 views
3

基本上我想要做的是拿一个文件,将它的二进制数据(当然是十进制数)放入一个列表中,然后使用基于该列表的PIL生成一个灰度位图图像。如何读取二进制文件并将数据转换为图像?

例如,如果文件是5000字节(图像大小将是100 x 50),每个字节是0到255之间的整数,我想绘制第一个字节到第一个像素,然后沿着这一行直到所有字节已耗尽。

我到目前为止的唯一的事情就是读文件:

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

此输出字节小数。

我正在寻找如何完成此操作的一些方向。我做了很多搜索,但似乎没有太多尝试做我想做的事情。

任何帮助将不胜感激!

+0

“二进制数据(当然是十进制数)”有一些我明显不了解基地。 – SingleNegationElimination

+0

基数2 =只有2个可能的数字“1”和“0”AKA二进制。基数10 = 10个可能的数字(0-9)AKA小数。基地16 = 16个可能的数字(0-9,阿F)AKA十六进制....希望这可以帮助 – clrx

回答

2

我不认为使用PIL将会非常高效,但是如果您正在绘制空白画布,则可以查看ImageDraw模块。

我的方法会有点不同:因为您的文件格式非常类似于Netpbm格式,所以我会尝试将其转换。为了简单起见,请尝试在读取时添加/处理格式的标题,以便PIL可以本地读取它。

1

我认为这应该做到这一点。是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

PIL Image documentation

Image.fromstring(mode, size, data) 

对于示例:

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

还有一个frombuffer功能,但差异并不明显。

+0

它不能这么简单...可以吗? – clrx

相关问题