用户:锦廷查看:0 回复:0 评论:0 创建时间:2022-08-18T09:45:08
【作品展示】

【作品介绍】
新增调整像素及页面布局。帖子可复制。
【作品源代码】
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