PIL(pillow)で新しく作ったイメージだと、一部のメソッドが欠如する原因と、イメージ情報の永続化と復元の方法について


`python`の画像処理系モジュールである`pillow`を使ってイメージから情報を取り出し、一旦`pickle`に保存して、  
再度取り出した後、そのイメージをもとのイメージのように復元したい  
と考えています。保存とロードで同じものを取り出すところまではできたんですが、  
再度そこから元と同じイメージを作り出すのに、`new`メソッドを用いて、  
それに読み込んだ情報を載せたいと思ったのですが、  
`new`で作った`Image`クラスは、`fromarray`がないと言ってきます。  
`asarray`で作った情報を保存しているので、`fromarray`出来るかなと思ったん  
ですが、出来ませんでした。`Image.new()`で作ったオブジェクトは`Image`オブジェクトであり、`Image`オブジェクトはfromarrayメソッドを持っていると[公式](https://pillow.readthedocs.io/en/5.1.x/reference/Image.html)には書いてあるのですが。  
`print(type(tumps))  
<class 'numpy.ndarray'>`

[code]

    re_im.fromarray(tumps)
    
    AttributeError: 'Image' object has no attribute 'fromarray'
    
[/code]

これがサンプルコードです。

[code]

    from PIL import Image
    import numpy as np
    filename = 'any.png'
    import pickle
    im = Image.open(filename)
    data = np.asarray(im.getdata())
    f = open("test_file.dat","wb")
    
    dumps = pickle.dump(data,f)
    
    f = open("test_file.dat","rb")
    tumps = pickle.load(f)
    re_im = Image.new(im.mode, im.size)
    re_im.fromarray(tumps)
    re_im.show()
    
    
    python3.6.3 
    PIL.PILLOW_VERSION
    Out[10]: '5.1.0'
    
[/code]




`show()`のように`Image`クラス本体内で定義された関数（=メソッド）は、`re_im.show()`のように呼び出せますが、`fromarray()`のように`Image`クラス本体の外で定義された関数は、`re_im.fromarray()`のように呼び出せません。`Image.open()`と同様に`Image.fromarray()`で呼び出せば、少なくとも`AttributeError`は解消されます。

詳細はソースコードを確認して下さい。

<https://github.com/python-pillow/Pillow/blob/master/src/PIL/Image.py>




`show()`のように`Image`クラス本体内で定義された関数（=メソッド）は、`re_im.show()`のように呼び出せますが、`fromarray()`のように`Image`クラス本体の外で定義された関数は、`re_im.fromarray()`のように呼び出せません。`Image.open()`と同様に`Image.fromarray()`で呼び出せば、少なくとも`AttributeError`は解消されます。

詳細はソースコードを確認して下さい。

<https://github.com/python-pillow/Pillow/blob/master/src/PIL/Image.py>

