2012-05-26 53 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

相關問題