Почему не вставляется круглое изображение на другое фото? Python
Код взял со стека: https://ru.stackoverflow.com/questions/581788/Как-создать-круглый-портрет-в-pil
Он рабочий, закругляет фото как надо, сохраняет в папку, но когда я пытаюсь это же круглое фото вставить в другое изображение, то у меня в конечном результате получается, что вставляется квадратное. Не пойму, что может быть не так, подскажите пожалуйста!
size = (200, 200)
im = Image.open('VK_AVATARS/photo_1.png')
im = crop(im, size)
im.putalpha(prepare_mask(size, 4))
screen = Image.open('test.png')
screen.paste(im, (70, 40))
screen.save('full_screen.png', quality= 95)
def prepare_mask(size, antialias = 2):
mask = Image.new('L', (size[0] * antialias, size[1] * antialias), 0)
ImageDraw.Draw(mask).ellipse((20, 20) + mask.size, fill=255)
return mask.resize(size, Image.ANTIALIAS)
def crop(im, s):
w, h = im.size
k = w / s[0] - h / s[1]
if k > 0: im = im.crop(((w - h) / 2, 0, (w + h) / 2, h))
elif k < 0: im = im.crop((0, (h - w) / 2, w, (h + w) / 2))
return im.resize(s, Image.ANTIALIAS)
Ответы (1 шт):
Автор решения: pumpkin
→ Ссылка
Пришлось дорабоать код с ссылки стека моего вопроса и вот что получилось:
fixed_width = 60
img = Image.open('VK_AVATARS/photo_1.png')
width_percent = (fixed_width / float(img.size[0]))
height_size = int((float(img.size[0]) * float(width_percent)))
new_image = img.resize((fixed_width, height_size))
new_image.save('VK_AVATARS/photo_new.png')
im = Image.open('VK_AVATARS/photo_new.png')
size = (63, 63)
mask = Image.new('L', size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, 63, 63), fill=255)
im = im.resize(size)
output = ImageOps.fit(im, (63, 63), centering=(1, 1))
output.putalpha(mask)
output.thumbnail(size, Image.ANTIALIAS)
img = Image.open('test.png')
img1 = ImageDraw.Draw(img)
user_name = ImageFont.truetype('halvetica2.ttf', 27)
img1.text((168, 55), name_ + ' ' + surname, (0, 0, 0), user_name)
img.paste(output, (80, 42), output)
Вставленное круглое изображение немного искажено по краям, но для моего проекта этого достаточно, а также добавил возможность вставлять текст на фото ;)
