用户:锦廷查看:0 回复:0 评论:0 创建时间:2022-08-22T11:42:31
【作品展示】

【作品介绍】
新增设置像素颜色,控制警告等功能。
【作品源代码】
from PIL import Image
from PIL import ImageDraw
from PIL import ImageTk
import tkinter as tk
from tkinter import filedialog as fd
from tkinter.messagebox import*
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 像素化():
if file=='' or file_save=='':
showwarning('Error','路径不正确')
return
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]
l__cc=l_c.selection_get()
if l__cc == '原色':
l__cc=color
draw.rectangle((i*pixel,
j*pixel,
(i+1)*pixel,
(j+1)*pixel),
fill=color,
outline=l__cc)
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.Scale(window,from_=0,to=100,resolution=5,orient=tk.HORIZONTAL)
t_l = tk.Label(window, text='像素边框颜色')
colorw = ['原色', 'white', 'black']
l_c=tk.Listbox(window,height=len(colorw))
for i in colorw:
l_c.insert('end',i)
l_c.selection_set(0)
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, sticky=tk.S)
e_file.grid(row=1, column=0, columnspan=2, sticky=tk.N)
b_filesave.grid(row=2, column=0, columnspan=2, sticky=tk.S)
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)
t_l.grid(row=5,column=0)
l_c.grid(row=5,column=1)
b_trans.grid(row=6, column=0)
e_trans.grid(row=6, column=1)
label_image.grid(row=0, column=2, rowspan=7)
window.mainloop()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn