2017-04-05 15 views
3

私はPython 3.6とPillow 4.0.0を使用しています 配列の値からPILイメージを作成しようとしています。以下の単純化されたコードを参照してください。 :Image.fromarray()機能を呼び出すときAttributeError: 'array.array' object has no attribute '__array_interface__'Image.fromarrayをarray.arrayで使用することはできません

どうしてですか? PILのドキュメントに記載されている場合: (バッファプロトコルを使用して)アレイインターフェイスをエクスポートするオブジェクトからイメージメモリを作成します。 とarray.arrayドキュメンテーションは言う: Arrayオブジェクトもバッファインタフェースを実装し、バイトのようなオブジェクトがサポートされているところはどこでも使用することができる...

from PIL import Image 
from array import array 

arr = array('B', [100, 150, 200, 250]) 
im = Image.fromarray(arr) 
im.show() 
+0

他に何もない場合は、 'Image.fromarray(np.asarray(arr))'と言うことができます。 –

+0

PILの 'fromarray()'は[Buffer Protocol](https://docs.python.org/3/c-api/buffer.html)をサポートするオブジェクトで動作します。 'array.array'オブジェクトはこれをサポートしています。配列インタフェースは、 'numpy'モジュールによって定義されたものです。 IMO PIL/pillowは、特に定義され、Pythonに組み込まれた標準の両方をサポートする必要があります。 – martineau

答えて

0

あなたはこの試みる、array interfaceusing the buffer protocol)を使用する必要があります。

ref
from PIL import Image 
import numpy as np 

w, h = 512, 512 
data = np.zeros((h, w, 4), dtype=np.uint8) 

for i in range(w): 
    for j in range(h): 
     data[i][j] = [100, 150, 200, 250] 

img = Image.fromarray(data, 'RGB') 

img.show() 

あなたは配列インタフェースは、numpyのコンセプトであるAn Introduction to the Python Buffer Protocol

+1

ありがとうございました。私はすでにNumPyに切り替えて、期待どおりに動作します。私はすでに、PIL関数が格納されている1次元配列からイメージサイズを知ることができないことを認識しました。array.array – masaj

1

読むことができます。言い換えれば、Image.fromarrayはnumpy配列でのみ動作し、標準Pythonライブラリarray.arrayでは動作しません。

関連する問題