Pillowをからにアップグレードするときに同じ問題が発生2.8.1
し4.1.0
ます。
実行時に例外を生成するサンプルコードを次に示しますPillow==4.1.0
。
from PIL import Image
img = Image.new('RGBA', [100,100])
# An empty mask is created to later overlay the original image (img)
mask = Image.new('L', img.size, 255)
# Get transparency (mask) layer pixels, they will be changed!
data = mask.load()
# The function used later
def foo(x,y): return round(1.0*x/(y+1))
# Update all pixels in the mask according to some function (foo)
for x in range(img.size[0]):
for y in range(img.size[1]):
data[x,y] = foo(x,y)
出力:
Traceback (most recent call last):
File "x.py", line 12, in <module>
data[x,y] = foo(x,y)
SystemError: new style getargs format but argument is not a tuple
ここでの実際のエラーは、例外で述べられていることとは何の関係もありません。間違っているのは、実際にはデータに割り当てられているデータのタイプです。とは2.8.1
両方とも有効であるため、のようなものは有効ですが、の場合は次のような整数を使用する必要があります。int
float
data[x,y]=1.0
4.1.0
data[x,y]=1
data[x,y]=int(1.0)
したがって、上記の例では、との両方でfoo
機能するように次のように再定義できます。2.8.1
4.1.0
def foo(x,y): return int(round(1.0*x/(y+1)))