当前位置:首页>python>文科生进阶python(八) | 图片管理工具2.0,图片批量压缩+重命名

文科生进阶python(八) | 图片管理工具2.0,图片批量压缩+重命名

  • 2026-09-02 19:27:38
文科生进阶python(八) | 图片管理工具2.0,图片批量压缩+重命名

此前,数据猿用CustomTkinter库开发了一个图片管理工具(v1.0版本)。这不,经过一段时间的打磨,升级版本来啦!

文科生进阶python(六)|CustomTkinter库开发图片管理工具

相比1.0版本,v2.0版本不仅界面更美观,功能也更强大——新增了图片压缩功能!这可是数据猿 Riggle 工作中实实在在的需求。

本文目录如下:

升级亮点

话不多说,先来看看v2.0相比1.0有哪些进步:

方面v1.0版本v2.0版本
功能仅图片重命名图片压缩 + 图片重命名
界面CustomTkinterCustomTkinter美化版
压缩不支持支持批量压缩,可设目标大小
性能单线程多线程并发压缩
进度无实时显示进度条+日志实时更新
预览基础预览尺寸信息+文件大小显示

可以说,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

使用流程

  1. 设置目标大小

  2. 调整压缩参数(可选)

  3. 选择图片文件或整个文件夹

  4. 点击"开始压缩"

程序会自动使用多线程并发压缩,压缩完成后会显示节省的空间百分比!

优化功能:图片重命名

图片重命名功能在v1.0版本的基础上进行了优化,界面更美观,操作更流畅。

两种重命名模式

  • 全部重新命名:新文件名格式为 前缀_序号.扩展名,如 照片_001.jpg

  • 增加前缀:新文件名格式为 前缀_原文件名,如 旅游_黄山.jpg

使用流程

  1. 选择包含图片的文件夹

  2. 通过搜索框搜索特定图片

  3. 在列表中选中需要重命名的图片

  4. 选择重命名模式

  5. 点击"执行重命名",输入前缀

  6. 批量完成重命名

技术改进解析

能让工具性能提升这么多,数据猿在代码里可是下了不少功夫!

1. 多线程并发压缩

图片压缩是个耗时操作,如果放在主线程里,界面就会卡住。所以,数据猿请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个线程同时开工,压缩速度提升明显!

2. 进度队列实时更新

压缩过程中,如何让主界面实时显示进度?数据猿用上了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)

3. CustomTkinter主题定制

彻底告别"土土"的Tkinter界面:

ctk.set_appearance_mode("System")  # 适配系统主题:Dark/Lightctk.set_default_color_theme("blue")  # 蓝色主题

扁平化设计,应用程序瞬间有了"现代感"!

4. 模式切换

v2.0支持有"图片压缩"和"图片重命名"两个功能tab。需要时可自由切换:

self.mode_selector = ctk.CTkSegmentedButton(self.window, values=["图片压缩", "图片重命名"], command=self.switch_mode)

小结

相比1.0版本,这次升级主要带来了:

  • ✅ 图片压缩功能:批量压缩,可设目标大小

  • ✅ 多线程并发:处理速度大幅提升

  • ✅ 实时进度显示:压缩过程一目了然

  • ✅ CustomTkinter美化:界面更加现代化

至于后续,如果小伙伴们还想继续优化,建议可以新增:

  1. 批量添加水印:支持文字或图片水印

  2. 导出打包:将处理后的图片打包导出

如需本文全部代码,请关注文科数据员公众号,在后台回复“图片管理工具2.0”获取代码片段!


欢迎添加数据猿微信(后台回复【0】即可获得微信号)拉大家进文科数据交流群!

往期经典文章:
使用playwright爬取动态加载数据,检验武大杨某某论文
数据可视化入门(八) | 使用GeoPandas库绘制市-区地图
数据可视化入门(七)|使用matplotlib库快速绘制Joinpoint分段回归图
DeepSeek制作一个可“视频”对话的程序员鼓励师
文科生进阶python(六)|CustomTkinter库开发图片管理工具
指南更新 | python下载全球各大影音网站音视频
社会网络分析(六) | ROSTCM6+Gephi的网络语义分析详细教程

文字编辑:数据猿Riggle

首发平台:微信公众号-文科数据员

最新文章

随机文章