2016-10-04 7 views
0

私は整数値の大きな二次元リストを持っています。各値はピクセルを表し、色と一致する必要がありますが、明らかに類似した値は似た色を持つ必要があります。ここで私のリストの例:どのように二次元リストをpythonで画像に保存しますか?

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 

「リスト」は4行の矩形であり、各行は6列を有しています。 0の値は無色に一致する必要があります。言い換えれば、0の値はtrasparentな色です。私はPILを使用しようとしましたが、正しい結果を得られませんでした。ここでは、テストコード:

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (4,6)) 
new.putdata(list) 
new.save('test.tif') 

答えて

0

失敗の原因は、(私は2次元配列は、配列オブジェクトとしてカウントされません推測)シーケンスオブジェクトを期待する、new.putdata(list)中にあります。

修正点は、2D配列を1D配列に変換することです。これを行う方法の一例は次のとおりです。

sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 

したがって、次のコードは正常に動作する必要がありますあなたのコードが間違って

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (6,4)) 
sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 
new.putdata(sequence) 
new.save('test.tif') 
+0

何かを。結果が表示された場合、 'test.tif'は長方形の4列の砂6行です。正しい結果は、6列と4行の長方形でなければなりません。 – lausent

+0

new = Image.new( "P"、(6,4))が正しいです。とにかく別の問題があり、それはcoluorです。このアッチでは、グレースケールの色(黒から白まで)があります。他の色はどのように入手できますか?私は次のようなものを知らない:低い値の青色、緑色の後、黄色と赤色の後に高値(勾配のような) – lausent

関連する問題