python 3.4のピロー3.3.1を使用して大きな画像を保存しようとしています。これらの画像は、uint8 RGBピクセルとして1〜4 GBの範囲にある傾向があります。 LinuxとOSXは私に同じ結果を与えます。PIL.Image.fromArrayを読み込む際のPILオーバーフローエラー
from PIL import Image
import numpy as np
imgArray = np.random.randint(255, size=(39000, 35000, 3)).astype(np.uint8)
print("buffer size:", imgArray.size)
print("image max bytes:", 2**32)
pilImage = Image.fromarray(imgArray)
私は次の出力
buffer size: 4095000000
image max bytes: 4294967296
Traceback (most recent call last):
File "storeLargeImage.py", line 6, in <module>
pilImage = Image.fromarray(imgArray)
File "/home/mpesavento/miniconda3/lib/python3.4/site-packages/PIL/Image.py", line 2189, in fromarray
return frombuffer(mode, size, obj, "raw", rawmode, 0, 1)
File "/home/mpesavento/miniconda3/lib/python3.4/site-packages/PIL/Image.py", line 2139, in frombuffer
return frombytes(mode, size, data, decoder_name, args)
File "/home/mpesavento/miniconda3/lib/python3.4/site-packages/PIL/Image.py", line 2074, in frombytes
im.frombytes(data, decoder_name, args)
File "/home/mpesavento/miniconda3/lib/python3.4/site-packages/PIL/Image.py", line 736, in frombytes
s = d.decode(data)
OverflowError: size does not fit in an int
にバッファを取得するには、私は、バッファの長さのためUINT32を使用と思った私はPILのpython 3で使用して考える最大、より小さい。 Python 2のPILはint32を使用し、max 2 ** 31-1となります。
このバグは、保存するコーデックを決定する前に表示されます。例えば、私はどのように1が2ギガバイト(2147483647バイト)よりも大きな画像を保存するについて行くことができ
pilImage.save(BytesIO(), format="png")
または
pilImage.save(BytesIO(), format="tiff")
を経由して、ロスレスPNGまたはTIFを保存するためにどちらかご希望ですか?
編集: fixed a while agoのように見えます。なぜ問題がまだ現れているのか分かりません。
それが[未解決の問題](https://github.com/python-pillow/Pillow/issues/1475)だように見えます。 Pythonの純粋でない – Carpetsmoker
ライブラリは依然として32ビット整数に制限することができます。 –