Как закруглить углы изображения в tkinter python?
Я пишу программу с интерфейсом на python с помощью модуля tkinter(а точнее custom_tkinter). Я столкнулся с пролемой что мне нужно закруглять углы у изображения которое парситься с интернета. Вот код объявления самого изображения:
self.label = CTkLabel(
master=self,
text="",
image=CTkImage(
Image.open(
BytesIO(
requests.get(
"https://techindroid.com/wp-content/uploads/2018/02/YouTube-Downloader-for-Windows-10.jpg"
).content
)
),
size=(240, 140),
),
)
self.label.pack(anchor="n", side="top", pady=5
А и да, как вы видите я пишу GUI в формате класса. На этом вроде бы всё.. Если я чтото не уточнил важное, то напишите под постом я его изменю! Всем заранее спасибо;)
Ответы (1 шт):
Автор решения: Viktor Shapoval
→ Ссылка
Библиотека Pillow Изображение делается круглым
from PIL import Image, ImageDraw
# Подготавливает маску, рисуя её в <antialias> раз больше и
# затем уменьшая, чтобы получилось сглаженно.
def prepare_mask(size, antialias = 2):
mask = Image.new('L', (size[0] * antialias, size[1] * antialias), 0)
ImageDraw.Draw(mask).ellipse((0, 0) + mask.size, fill=255)
return mask.resize(size, Image.ANTIALIAS)
# Обрезает и масштабирует изображение под заданный размер.
# Вообще, немногим отличается от .thumbnail, но по крайней мере
# у меня результат получается куда лучше.
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)
size = (200, 200)
im = Image.open('image.png')
im = crop(im, size)
im.putalpha(prepare_mask(size, 4))
im.save('image_output.png')```