PIL пятнает изображение, когда я накладываю на него другое изображение - PullRequest
4 голосов
/ 14 августа 2011

Я использую следующий код для наложения изображения на другое изображение, используя PIL

path = "/home/blah.png"
background = Image.open(path)
product = Image.open("/home/51tmBaivYhL._SL75_.jpg")
background.paste(product, (20,40))
background.save("/home/newImage.jpg")

Это изображения, которые я использую в качестве фона http://i.imgur.com/bwPFT.png, product http://i.imgur.com/Ig6qV.jpg и это результат, который отображается как http://i.imgur.com/JfGoS.jpg

Буду признателен за любую помощь, которую я могу получить.

Спасибо.

РЕДАКТИРОВАТЬ: Кроме того, когда япопробуйте background.paste(product, (20,40), product), я получаю ошибку "ValueError: маска плохой прозрачности"

Ответы [ 2 ]

5 голосов
/ 14 августа 2011

Проблема не имеет ничего общего с PIL. Проблема в том, что фон - это .png, и вы его составляете, а затем выводите в виде .jpg.

.png без потерь, очень хорош для синтетических изображений, таких как фон. .jpg с потерями, очень хорошо для естественных изображений, таких как фотографии. Когда вы выводите свой фон в виде .jpg, он будет содержать артефакты сжатия, которые вы называете «пятна».

Выведите окончательное изображение в формате .png. Это будет больше байтов, чем .jpg, но будет выглядеть лучше.

2 голосов
/ 14 августа 2011

Вы открываете фоновое изображение PNG с прозрачностью и сохраняете результат в формате .JPG без прозрачности. Цвета в прозрачной области - это, вероятно, остатки от редактора изображений, который вы использовали для создания PNG.

...