玖叶教程网

前端编程开发入门

Python序列_如何做一个图片压缩工具

Python序列_如何做一个图片压缩工具



问题拆分

方法

思路:

from PIL import Image
path=r'C:\Users\Administrator\Desktop\excle_python\aa1.jpg'
out_path=r'C:\Users\Administrator\Desktop\excle_python\out\aa1.jpg'
image_open = Image.open(path)
image_open.save(out_path,quality=50)

压缩前


压缩后:---接近50%的压缩而且图片清晰度影响很小

特别注意

特别注意:tkinter 和第三方压缩工具的Image方法同名的方法,所以引用时

第三方要取一个别名,规避错误!否则会报错!

错误信息为:




下调字体样式

字体属性font 样式 ‘Hack’ 大小20 粗体 ‘bold’




代码如下:
from PIL import Image as Img
#回话包tkinter.filedialog
# from tkinter import *
from tkinter.filedialog import *
#设置当前路径
import sys
import os
import datetime


#添加数据字典 接收路径
info ={'path':[]}

quality_value =''
#字体样式
_font = ['Hack', 20, 'bold']

def get_today():
now = datetime.datetime.now()
otherStyleTime = now.strftime("%Y-%m-%d")
return otherStyleTime

file_url = os.path.dirname(os.path.realpath(sys.argv[0])).replace('\\','/')
#百分比
quality_value=0

def make_app():
app = Tk()
Label(app,text='图片压缩工具',font=_font).pack()
Label(app, text='请输入百分比', font=_font).pack()
Entry(app, name='input',text='压缩百分比').pack()
#ill=BOTH 左右两边 expand=True 上下两边
Listbox(app,name='listbox',bg='#f2f2f2').pack(fill=BOTH,expand=True)
Button(app,name='open', text='打开',command=ui_getdata,font=_font).pack(fill=BOTH,expand=True)
Button(app,name='compress',text='压缩',command=compress,font=_font).pack(fill=BOTH,expand=True)
#初始框大小
app.geometry('300x400')
return app
#ui界面交互
def ui_getdata():
ui_change('压缩')
f_names = askopenfilenames()
#赋值--路径添加到数据字典中
info['path']=f_names
#找到listbox
list_box = app.children['listbox']
#清空所有列表
list_box.delete(0,END)
#如果不等于空
if info['path']:
for f in f_names:
#f.split('/')[-1] 截取最后一个取得文件路径
list_box.insert(END,f.split('/')[-1])


#压缩功能

def compress():
quality_value = app.children['input'].get()
if app.children['input'].get() == '':
quality_value=50
try:
out_path = file_url + '/' + '压缩图片保存路径'+get_today()
if os.path.exists(out_path) == False:
os.makedirs(out_path)
for f_path in info['path']:
name=f_path.split('/')[-1]
image_open = Img.open(f_path)
#quality 压缩率是int类型 不能是string
image_open.save(out_path + '/' + 'c_'+name, quality=int(quality_value))
ui_change('压缩成功')
except:
ui_change('压缩失败')

def ui_change(s_str):
app.children['compress']['text']=s_str

if __name__=='__main__':
app = make_app()
app.mainloop()

欢迎关注和转发! 希望对你有帮助!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言