猫史档案馆


【Python作品分享】图片转化器3.0【作品秀】

用户:锦廷锦廷查看:0 回复:0 评论:0 创建时间:2022-08-18T09:45:08


【作品展示】

center_image

 

【作品介绍】

新增调整像素及页面布局。

帖子可复制。

 

【作品源代码】

from PIL import Image
from PIL import ImageDraw
from PIL import ImageTk
import tkinter as tk
from tkinter import filedialog as fd
window = tk.Tk()
window.title('图片像素化')
window.geometry('喵0x350')
file = r''
file_save = r''
# 打开图片的函数


def askfile():
    global file
    file = fd.askopenfilename()  # 打开图片,返回图片路径
    e_file.delete(0, 'end')      # 清空输入框
    e_file.insert(0, file)       # 插入路径

# 选择图片保存路径的函数


def asksave():
    global file_save
    file_save = fd.asksaveasfilename()  # 选择保存路径
    e_filesave.delete(0, 'end')          # 清空输入框
    e_filesave.insert(0, file_save)      # 插入保存路径


def 像素化():
    img = Image.open(file)
    x, y = img.size     # 获取图片尺寸
    pixel = int(e_p.get())
    new_x = x//pixel
    new_y = y//pixel
    colordata = img.load()  # 加载img图片的所有颜色
    new_img = Image.new('RGB',
                        (new_x*pixel, new_y*pixel))
    draw = ImageDraw.Draw(new_img)
    for i in range(new_x):
        for j in range(new_y):
            color = colordata[i*pixel, j*pixel]
            draw.rectangle((i*pixel,
                            j*pixel,
                            (i+1)*pixel,
                            (j+1)*pixel),
                           fill=color,
                           outline=color)
    new_img.save(file_save, "JPEG")  # 保存像素化的图片
    x1, y1 = new_img.size    # 获取尺寸
    # 按比例缩放
    if x1 > y1:
        new_img = new_img.resize((300, int(300*y1/x1)))
    else:
        new_img = new_img.resize((int(300*x1/y1), 300))
    # 显示在标签控件 Label_image 中
    tk_img = ImageTk.PhotoImage(new_img)    # 将new_img转换成tkinter支持的图像对象
    label_image.config(image=tk_img)
    label_image.image = tk_img  # 将image属性设置为tk_img对象
# -----------------------------------------------------------
    e_trans.delete(0, 'end')         # 清空输入框
    e_trans.insert(0, '转换完成!')   # 插入提示语


b_file = tk.Button(window, text='选择图片位置', command=askfile)
# 选择保存路径的按钮
b_filesave = tk.Button(window, text='选择保存位置', command=asksave)
# 开始转换像素化的按钮
b_trans = tk.Button(window, text='点击开始转换', command=像素化)
# --------文字框---------
# 显示原图片路径的输入框
e_file = tk.Entry(window, width=40)
# 显示保存路径的输入框
e_filesave = tk.Entry(window, width=40)
# 显示转换成功提示语的输入框
e_trans = tk.Entry(window)
e_p = tk.Entry(window)
e_p.insert(0, '10')
l_=tk.Label(window,text='请输入像素大小(整数),默认为10')
label_image = tk.Label(window, text="展示图片区域",
                       width=300, height=300)

i0 = Image.new('RGB', (300, 300))
tk_img = ImageTk.PhotoImage(i0)
label_image.config(image=tk_img)
# 这里会重新设置控件的布局
b_file.grid(row=0, column=0, columnspan=2)
e_file.grid(row=1, column=0, columnspan=2, sticky=tk.N)

b_filesave.grid(row=2, column=0, columnspan=2)
e_filesave.grid(row=3, column=0, columnspan=2, sticky=tk.N)

l_.grid(row=4, column=0)
e_p.grid(row=4, column=1)

b_trans.grid(row=5, column=0)
e_trans.grid(row=5, column=1)
label_image.grid(row=0, column=2, rowspan=6)

window.mainloop()


 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页