Как закруглить углы изображения в tkinter python?

Рейтинг: -1Ответов: 1Опубликовано: 29.01.2023

Я пишу программу с интерфейсом на 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 в формате класса. На этом вроде бы всё.. Если я чтото не уточнил важное, то напишите под постом я его изменю! Всем заранее спасибо;)

Ответы

▲ 0

Библиотека 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')```