
你,是不是有这样的烦恼!
在某网站注册需要上传个人免冠形象照,网站限制照片大小200KB以内,而你的照片却有250KB!!!
写文章博客需要上传一些图片辅助(比如在CSDN),却发现网站限制了图片大小不能超过5MB,而你的图片却有10MB,上传不上去!
照片太大,太占内存空间,需要把这些照片统统压缩压缩减减肥。
…
在日常的生活工作中,我就经常遇见各种需要压缩图片的场景。
虽然能够实现图片压缩效果的方法不少
但是终究或多或少有些不方便的地方。
再怎么说,我也是自学过几天Python编程的人,虽然什么实现压缩图片的高级算法我统统不会,但是这不影响,能够解决问题的道路千千万万,总有一条适合我。
所以决定写一个小小的程序来帮助自己解决日常里需要图片压缩的问题。
——
我们的核心目标:将目标图片压缩到符合要求的指定内存大小。
对于我来说,什么高深的图片压缩算法,抱歉,我真不会!
搜索了一下自己的大脑库存,可以通过 PIL 模块中的 resize() 方法重新设定图片的宽高,从而就可以达到改变图片内存大小的目的。
当然,我们并不是任意去修改图片的宽高,为了避免图片变形,应该是同等比例缩小宽高,也就是图片的宽高比要始终保持一致。
——
我们自行设计的这样一个小软件需要具备哪些功能呢?
基本上以上的几个功能就完全能够满足我们的需求,不仅能够自定义缩小的比例,同时还能够显示图片信息,从而判断适合符合要求。
——
设计的最后一步,我们将所有想法画在纸上形成一个初步的设计图。
对着设计图来写代码,才能更轻松便捷。
OK!前期设计工作到此基本搞定!
最关键的步骤我们已经完成了,那就是对于整个小软件的功能和设计的构建。
接下来要做的就是对照设计蓝图一点一点写代码了。
——
首先第一步,我们对照的设计图用tkinter搭建出界面框架,这一步照葫芦画瓢即可,没有太大的难度,其中核心的调用函数先pass着。
import tkinter as tk # 调用函数-选择图片
def selectIm():pass# 调用函数-选择保存路径
def outputFile():pass# 核心调用函数-缩小图片大小
def changeIm():pass# 调用函数-显示原图基本信息
def before_im():passroot = tk.Tk()
root.title('逆旅—图片缩小工具') # 窗口标题命名
root.iconphoto(False, tk.PhotoImage(file='头像.png')) # 更改窗口图标# 定义关联变量
Imgname = tk.StringVar()
outputpath = tk.StringVar()v_width = tk.IntVar()
v_height = tk.IntVar()newname = tk.StringVar()# 构建“选择图片”这一行的标签、输入框以及启动按钮,同时我们希望当用户选择图片之后能够显示原图的基本信息
tk.Label(root, text='选择图片').grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=Imgname,validate='focusout', validatecommand=before_im).grid(row=1, column=1, padx=5, pady=5)
tk.Button(root, text='打开文件', command=selectIm).grid(row=1, column=2, padx=5, pady=5)# 构建“保存路径”这一行的标签、输入框以及启动按钮
tk.Label(root, text='保存路径').grid(row=2, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=outputpath).grid(row=2, column=1, padx=5, pady=5)
tk.Button(root, text='选择路径', command=outputFile).grid(row=2, column=2, padx=5, pady=5)# 构建“宽度缩小”这一行的标签、输入框
tk.Label(root, text='宽度缩小').grid(row=3, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=v_width).grid(row=3, column=1, padx=5, pady=5)# 构建“高度缩小”这一行的标签、输入框
tk.Label(root, text='高度缩小').grid(row=4, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=v_height).grid(row=4, column=1, padx=5, pady=5)
本文发布于:2024-02-13 16:35:02,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1715576084253690.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |