此前,数据猿用CustomTkinter库开发了一个图片管理工具(v1.0版本)。这不,经过一段时间的打磨,升级版本来啦!
文科生进阶python(六)|CustomTkinter库开发图片管理工具
相比1.0版本,v2.0版本不仅界面更美观,功能也更强大——新增了图片压缩功能!这可是数据猿 Riggle 工作中实实在在的需求。
本文目录如下:

话不多说,先来看看v2.0相比1.0有哪些进步:
| 方面 | v1.0版本 | v2.0版本 |
|---|---|---|
| 功能 | 仅图片重命名 | 图片压缩 + 图片重命名 |
| 界面 | CustomTkinter | CustomTkinter美化版 |
| 压缩 | 不支持 | 支持批量压缩,可设目标大小 |
| 性能 | 单线程 | 多线程并发压缩 |
| 进度 | 无实时显示 | 进度条+日志实时更新 |
| 预览 | 基础预览 | 尺寸信息+文件大小显示 |
可以说,v2.0是一个全新的飞跃!接下来,数据猿就给大家详细介绍这两个核心功能。
数据猿平时工作中经常需要处理图片,有时候图片太大了,上传不方便,发送也慢。上传个几MB的图片,等得花儿都谢了。
所以,图片压缩功能就应运而生!

可调参数:
目标大小:滑动选择 10KB - 1024KB,也可直接输入数值
初始质量:1-95,数值越大质量越高,建议85左右
压缩比率:0.1-1.0,每次缩小的比例,默认0.9
智能压缩算法:
程序会反复尝试压缩,每次按比例缩小图片尺寸,直到达到目标大小或达到最大尝试次数(20次)为止。
whilecompressed_size_kb>target_size_kbandcompress_count<max_compress_attempts:# 按比例缩小图片out = im.resize((int(x*k), int(y*k)), resample_method)# 保存并压缩out.save(output_path, quality=quality, optimize=True)# 检查大小,不行就再来一次compressed_size_kb = os.path.getsize(output_path) //1024
设置目标大小
调整压缩参数(可选)
选择图片文件或整个文件夹
点击"开始压缩"
程序会自动使用多线程并发压缩,压缩完成后会显示节省的空间百分比!
图片重命名功能在v1.0版本的基础上进行了优化,界面更美观,操作更流畅。

全部重新命名:新文件名格式为 前缀_序号.扩展名,如 照片_001.jpg
增加前缀:新文件名格式为 前缀_原文件名,如 旅游_黄山.jpg
选择包含图片的文件夹
通过搜索框搜索特定图片
在列表中选中需要重命名的图片
选择重命名模式
点击"执行重命名",输入前缀
批量完成重命名
能让工具性能提升这么多,数据猿在代码里可是下了不少功夫!
图片压缩是个耗时操作,如果放在主线程里,界面就会卡住。所以,数据猿请AI帮我使用了concurrent.futures.ThreadPoolExecutor来实现多线程并发压缩:
max_workers = min(8, os.cpu_count() or4)withconcurrent.futures.ThreadPoolExecutor(max_workers=max_workers) asexecutor:futures = []forimage_pathinself.selected_images:futures.append(executor.submit(compress_one, image_path))fori, futureinenumerate(concurrent.futures.as_completed(futures)):processed_count += 1
8个线程同时开工,压缩速度提升明显!
压缩过程中,如何让主界面实时显示进度?数据猿用上了queue.Queue这个函数方法:
self.progress_queue = queue.Queue()# 压缩线程发送进度self.progress_queue.put(("progress", progress))self.progress_queue.put(("log", log_msg))# 主线程检查队列更新UIdefcheck_progress_queue(self):try:whileTrue:item_type, data = self.progress_queue.get_nowait()# 更新进度条或日志exceptqueue.Empty:passself.window.after(100, self.check_progress_queue)
彻底告别"土土"的Tkinter界面:
ctk.set_appearance_mode("System") # 适配系统主题:Dark/Lightctk.set_default_color_theme("blue") # 蓝色主题
扁平化设计,应用程序瞬间有了"现代感"!
v2.0支持有"图片压缩"和"图片重命名"两个功能tab。需要时可自由切换:
self.mode_selector = ctk.CTkSegmentedButton(self.window, values=["图片压缩", "图片重命名"], command=self.switch_mode)
相比1.0版本,这次升级主要带来了:
✅ 图片压缩功能:批量压缩,可设目标大小
✅ 多线程并发:处理速度大幅提升
✅ 实时进度显示:压缩过程一目了然
✅ CustomTkinter美化:界面更加现代化
至于后续,如果小伙伴们还想继续优化,建议可以新增:
批量添加水印:支持文字或图片水印
导出打包:将处理后的图片打包导出
如需本文全部代码,请关注文科数据员公众号,在后台回复“图片管理工具2.0”获取代码片段!
欢迎添加数据猿微信(后台回复【0】即可获得微信号)拉大家进文科数据交流群!
文字编辑:数据猿Riggle
首发平台:微信公众号-文科数据员
