«Новый стиль getargs, но аргумент не кортеж» Ошибка вставки изображения подушки - PullRequest
1 голос
/ 24 апреля 2019

Я использую библиотеку «Подушка» для создания рандомизированных листов бинго персонажей «Игры престолов» для моих друзей и создаю фоновый лист PNG для вставки миниатюр изображений, на которых я нашел. Однако, когда я вставляю свою картинку случайного персонажа Game of Thrones (скажем, Arya) на мое фоновое изображение и определяю область, используемую для вставки, я получаю ошибку «новый формат getargs, но аргумент не является кортежем», и код не выполняется.

Я использовал Python 3.6.6 и тоже попробовал 3.6.5, используя Pip и Conda для переустановки Pillow в каждой версии (теперь у меня есть Pillow 5.1.0 и Pillow 6.0.0). Я попытался написать пасту. координаты напрямую, вместо использования переменной и изменения типов изображения, на которое я вставляю изображение, и вставки непосредственно из PNG в JPEG, чтобы увидеть, изменит ли это способ определения координат без удачи.

Я также пытался преобразовать переменную в кортеж, хотя она уже есть, все еще не работает. В документации сказано, что если вы оставите поле пустым, оно должно автоматически пройти через верхний левый угол до (0,0), но когда я это сделаю, я получаю сообщение об ошибке, сообщающее мне ввести координаты поля. Также сказано, что если вы используете кортеж 2 вместо 4, это должно сработать, но это вернуло ошибку, говорящую мне использовать кортеж 4.

bingo = Image.new("RGB",(740,740), color=(10,10,10))

size = 128,128
arya = Image.open("arya_edit.jpg")              #arya 1
arya = arya.thumbnail(size)

box = (10,10,138,138)
#tried box = tuple(box) 
bingo.paste(arya, box)

Фотография Арьи должна занимать верхний левый угол фонового изображения, но каждый раз возвращает ошибку. Я не понимаю, откуда эта ошибка.

1 Ответ

0 голосов
/ 24 апреля 2019

Проблема с вашим кодом не в строке paste, а в том, как вы делаете свой эскиз. Метод Image.thumbnail изменяет Image на месте и возвращает None, поэтому при запуске arya = arya.thumbnail(size) вы перезаписываете свою ссылку на новое изображение с измененным размером с помощью None, что это, конечно, не то, что вы хотели.

Это значение None нарушает ваш более поздний код, как вы описали. Вы можете избежать этого, просто вызвав thumbnail, не присваивая его возвращаемое значение чему-либо:

arya = Image.open("arya_edit.jpg")
arya.thumbnail(size)               # don't assign here, it modifies the image in place
...