banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

Python将头像图片改为圆形头像

直接上代码

from PIL import Image, ImageDraw, ImageTk
import tkinter as tk
from tkinter import filedialog

def convert_to_circle(image_path):
    # 打开图片并转换为RGBA模式
    image = Image.open(image_path).convert("RGBA")

    # 创建一个与图片大小相同的透明背景图像
    circle_image = Image.new('RGBA', image.size, (0, 0, 0, 0))

    # 创建一个画笔
    draw = ImageDraw.Draw(circle_image)

    # 画一个圆形
    draw.ellipse((0, 0, image.size[0], image.size[1]), fill=(255, 255, 255, 255))

    # 将原始图片应用到遮罩上
    circle_image.paste(image, (0, 0), mask=circle_image)

    # 返回圆形边缘图像
    return circle_image

def select_image():
    # 打开文件对话框,选择图片文件
    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png")])

    # 如果选择了图片文件,则进行转换并显示在程序中
    if file_path:
        circle_image = convert_to_circle(file_path)
        circle_image.thumbnail((300, 300))  # 缩小图像以适应显示区域
        photo = ImageTk.PhotoImage(circle_image)  # 将图像转换为PhotoImage对象
        image_label.configure(image=photo)
        image_label.image = photo  # 保持对图像的引用
        image_label.circle_image = circle_image  # 保存原始的PIL图像

def save_image():
    # 获取当前显示的图像
    circle_image = image_label.circle_image

    # 如果有图像,则保存为文件
    if circle_image:
        save_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png")])
        if save_path:
            circle_image.save(save_path)
            print("头像已保存为:", save_path)

# 创建主窗口
window = tk.Tk()
window.title("圆形头像转换")
window.geometry("400x400")

# 创建选择按钮
select_button = tk.Button(window, text="选择图片", command=select_image)
select_button.pack(pady=10)

# 创建图像显示区域
image_label = tk.Label(window)
image_label.pack()

# 创建保存按钮
save_button = tk.Button(window, text="保存图像", command=save_image)
save_button.pack(pady=10)

# 运行主循环
window.mainloop()

首先,我们导入了所需的库。PIL 库用于图像处理,tkinter 库用于创建 GUI 界面。

接下来,我们定义了一个名为 convert_to_circle 的函数,用于将选择的图片转换为圆形图像。这个函数接受一个图片路径作为参数,并返回处理后的圆形图像。

在 convert_to_circle 函数中,我们首先打开图片并将其转换为 RGBA 模式。然后,创建一个与原始图片大小相同的透明背景图像。接着,创建一个画笔对象,并使用它绘制一个圆形,圆形的位置和大小与原始图片相同,填充颜色为白色。最后,将原始图片应用到透明背景图像上,使用透明背景图像作为遮罩。最终,返回处理后的圆形图像。

接下来,我们定义了一个名为 select_image 的函数,用于选择图片文件并将其转换为圆形图像。在这个函数中,我们打开文件对话框,选择图片文件,并获取选择的文件路径。如果选择了图片文件,则调用 convert_to_circle 函数将图片转换为圆形图像。然后,将图像缩小以适应显示区域,并将其显示在程序中的图像标签上。

最后,我们定义了一个名为 save_image 的函数,用于保存当前显示的圆形图像为文件。在这个函数中,我们获取当前显示的圆形图像,并打开文件对话框选择保存路径。如果选择了保存路径,则将图像保存为文件。

在主程序中,我们创建了一个主窗口,并设置窗口的标题和大小。然后,创建了一个选择按钮,点击按钮时调用 select_image 函数。接着,创建了一个用于显示图像的标签。最后,创建了一个保存按钮,点击按钮时调用 save_image 函数。

最后,通过运行主循环启动应用程序,等待用户的交互操作。

代码中使用了 PIL 库(Python Imaging Library)来处理图像,以及 tkinter 库来创建图形用户界面。它通过将图像转换为 PhotoImage 对象,并将其赋值给图像显示区域的 image 属性,来显示图像。同时,它还保持了对原始 PIL 图像的引用,以便在保存图像时使用。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。