2010-01-21 113 views
8

我正在從一個文件中讀取二進制數據,該文件指定x和y座標(非開源圖像格式)上的強度值並希望將其轉換爲PNG圖像(或其他廣泛支持的格式)。我有數據加載到一個數組(使用數組模塊),其中每個元素是從0到255的整數。要將其保存到PNG,我可以創建每個元素(x)的3項目元組,如下所示:創建灰度圖像

t = (x, x, x) 

使用map()將其應用於整個數組中,然後使用putdata()保存圖像。但是,轉換爲元組數組需要很長時間(幾分鐘)。有沒有辦法只使用一個整數(而不是元組)來指定rgb值。我猜想一個替代方案是使用NumPy,但我不知道從哪裏開始,所以在這方面的任何幫助也將不勝感激。

在此先感謝您的幫助。

回答

11

當您創建的新形象,給它的模式L:

im = Image.new('L', size) 
im.putdata([x1, x2, x3, ...]) 

其中數據值的元組不是一個列表。

+0

正是我在找的東西。謝謝! – Vince 2010-01-21 18:23:48

3

有幾種方法可以做到這一點,但是如果您已經有內存中的數據,請使用Image.frombufferImage.fromstring使用'L'模式(用於8位灰度數據)進行研究。

0

im.putpixel(xy,color)是你在找什麼?

+0

putpixel明顯慢於putdata – 2010-01-21 17:15:24

+0

我同意。我在以前的版本中使用putpixel()。工作,但速度慢了10倍。 (1分30秒vs 0分15秒putdata()) – Vince 2010-01-21 18:25:46