Вы не говорите, как именно putdata()
не ведет себя. Я предполагаю, что вы делаете
>>> pic.putdata(a)
Traceback (most recent call last):
File "...blablabla.../PIL/Image.py", line 1185, in putdata
self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple
Это потому, что putdata
ожидает последовательность кортежей, а вы присваиваете ей пустой массив. Это
>>> data = list(tuple(pixel) for pixel in pix)
>>> pic.putdata(data)
будет работать, но очень медленно.
Начиная с PIL 1.1.6, «правильный» способ преобразования между изображениями и массивами это просто
>>> pix = numpy.array(pic)
хотя полученный массив имеет формат, отличный от вашего (в этом случае 3-й массив или row / columns / rgb).
Затем, после внесения изменений в массив, вы сможете выполнить либо pic.putdata(pix)
, либо создать новое изображение с помощью Image.fromarray(pix)
.