【图片小小小】Python渣渣,也能做出的图片压缩软件!

本文介绍了一位Python初学者如何使用tkinter和PIL模块制作一个简单的图片压缩软件。核心功能是按比例缩小图片以减少内存大小,避免图片变形。用户可以选择压缩比例,从本地选择图片,指定保存路径和命名,以及查看图片信息。虽然在打包成exe过程中遇到问题,但已实现基本的图片压缩功能。
摘要由CSDN通过智能技术生成

在这里插入图片描述


一、背景需求

你,是不是有这样的烦恼!

在某网站注册需要上传个人免冠形象照,网站限制照片大小200KB以内,而你的照片却有250KB!!!
在这里插入图片描述
写文章博客需要上传一些图片辅助(比如在CSDN),却发现网站限制了图片大小不能超过5MB,而你的图片却有10MB,上传不上去!
在这里插入图片描述

照片太大,太占内存空间,需要把这些照片统统压缩压缩减减肥。
在这里插入图片描述

在日常的生活工作中,我就经常遇见各种需要压缩图片的场景。

虽然能够实现图片压缩效果的方法不少

  • 比如过大的图片在微信、QQ里面滚一圈
  • 比如在电脑端的office软件里面滚一圈
  • 又或者使用专业图片软件的压缩功能

但是终究或多或少有些不方便的地方。

再怎么说,我也是自学过几天Python编程的人,虽然什么实现压缩图片的高级算法我统统不会,但是这不影响,能够解决问题的道路千千万万,总有一条适合我。

所以决定写一个小小的程序来帮助自己解决日常里需要图片压缩的问题。

在这里插入图片描述

二、设计分析

——

1. 核心功能

我们的核心目标:将目标图片压缩到符合要求的指定内存大小。

对于我来说,什么高深的图片压缩算法,抱歉,我真不会!
在这里插入图片描述

搜索了一下自己的大脑库存,可以通过 PIL 模块中的 resize() 方法重新设定图片的宽高,从而就可以达到改变图片内存大小的目的。

当然,我们并不是任意去修改图片的宽高,为了避免图片变形,应该是同等比例缩小宽高,也就是图片的宽高比要始终保持一致。

——

2. 功能描述

我们自行设计的这样一个小软件需要具备哪些功能呢?

  1. 核心功能:缩小图片宽高比例并保存
  2. 用户可任意选择宽高缩小的比例是多少
  3. 从本地文件夹选择图片
  4. 指定保存的路径并自定义命名图片
  5. 图片缩小前后信息的对比
  6. 针对用户选择非图片类文件的错误提示

基本上以上的几个功能就完全能够满足我们的需求,不仅能够自定义缩小的比例,同时还能够显示图片信息,从而判断适合符合要求。

——

3. UI设计图

设计的最后一步,我们将所有想法画在纸上形成一个初步的设计图。

对着设计图来写代码,才能更轻松便捷。
在这里插入图片描述
OK!前期设计工作到此基本搞定!
在这里插入图片描述

三、代码构造

最关键的步骤我们已经完成了,那就是对于整个小软件的功能和设计的构建。

接下来要做的就是对照设计蓝图一点一点写代码了。

——

1. 界面框架代码

首先第一步,我们对照的设计图用tkinter搭建出界面框架,这一步照葫芦画瓢即可,没有太大的难度,其中核心的调用函数先pass着。

import tkinter as tk 

# 调用函数-选择图片
def selectIm():
	pass

# 调用函数-选择保存路径
def outputFile():
	pass

# 核心调用函数-缩小图片大小
def changeIm():
	pass

# 调用函数-显示原图基本信息
def before_im():
	pass

root = 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)

# 构建“图片命名”这一行的标签、输入框
tk.Label(root, text='图片命名').grid(row=5, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=newname)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值