当前位置:首页>python>图片太大发不了?这个免费Python工具一键批量压缩(附代码)

图片太大发不了?这个免费Python工具一键批量压缩(附代码)

  • 2026-09-30 11:30:24
图片太大发不了?这个免费Python工具一键批量压缩(附代码)

每次传照片都提示“文件过大”,找压缩软件不是要会员就是带水印。今天分享一个Python脚本,把要压缩的图片放进一个文件夹,运行后自动批量压缩,想压到多大都行,完全免费,本地处理不伤画质。复制代码运行就行,再也不用给那些软件送钱。

一键批量压缩所有图片,想压多大压多大,完全免费,本地处理不伤画质。

一、先看效果:运行脚本,选个文件夹,所有图片自动压缩

你只需要:

  1. 把所有要压缩的图片放进一个文件夹(比如“活动照片”)
  2. 运行脚本,输入文件夹路径和目标大小(比如800KB)
  3. 脚本自动压缩每张图片,生成新的压缩版文件夹

运行界面长这样:

=== 图片批量压缩免费工具 ===请输入图片文件夹路径:D:\活动照片请输入目标大小(单位KB,例如800):800✅ 共找到 23 张图片,开始压缩...正在压缩:第1/23张 - 1.jpg(原大小3.2M → 压缩后756K)正在压缩:第2/23张 - 2.jpg(原大小4.1M → 压缩后789K)...✅ 压缩完成!共23张图片,总空间从85.3M减小到17.8M,节省79%压缩图片已保存到:D:\活动照片_压缩版

二、完整代码(复制就能用)

把下面代码保存为 图片压缩.py,双击运行即可。

import osimport sysfrom PIL import Imageprint("=== 图片批量压缩免费工具 ===")folder = input("请输入图片文件夹路径:").strip()folder = folder.strip('"').strip("'")if not os.path.isdir(folder):print(f"❌ 文件夹不存在:{folder}")    input("按回车键退出...")    sys.exit()# 获取目标大小try:    target_kb = int(input("请输入目标大小(单位KB,例如800):"))    target_bytes = target_kb * 1024except:print("❌ 请输入有效的数字")    input("按回车键退出...")    sys.exit()# 获取所有图片文件支持格式 = ('.jpg', '.jpeg', '.png', '.bmp', '.webp')图片列表 = [f for f in os.listdir(folder) if f.lower().endswith(支持格式)]if not 图片列表:print("❌ 该文件夹中没有支持的图片格式")    input("按回车键退出...")    sys.exit()图片列表.sort()print(f"✅ 共找到 {len(图片列表)} 张图片,开始压缩...")# 创建输出文件夹output_folder = folder + "_压缩版"os.makedirs(output_folder, exist_ok=True)total_original = 0total_compressed = 0压缩计数 = 0for i, filename in enumerate(图片列表, 1):    输入路径 = os.path.join(folder, filename)    输出路径 = os.path.join(output_folder, filename)# 获取原文件大小    original_size = os.path.getsize(输入路径)    total_original += original_size# 打开图片    img = Image.open(输入路径)# 如果是RGBA模式(PNG带透明),转RGBif img.mode == 'RGBA':        img = img.convert('RGB')# 保存并调整质量,直到满足目标大小    quality = 85  # 初始质量    img.save(输出路径, quality=quality, optimize=True)    current_size = os.path.getsize(输出路径)# 如果还是太大,逐步降低质量while current_size > target_bytes and quality > 10:        quality -= 5        img.save(输出路径, quality=quality, optimize=True)        current_size = os.path.getsize(输出_path)    total_compressed += current_size    压缩计数 += 1print(f"正在压缩:第{i}/{len(图片列表)}张 - {filename} "          f"(原大小{original_size/1024:.1f}K → 压缩后{current_size/1024:.1f}K)")# 统计print(f"\n✅ 压缩完成!共{压缩计数}张图片")print(f"总空间:{total_original/1024/1024:.1f}M → {total_compressed/1024/1024:.1f}M")print(f"节省:{(1 - total_compressed/total_original)*100:.1f}%")print(f"压缩图片已保存到:{output_folder}")input("按回车键退出...")

三、逐行解释

target_kb = int(input("请输入目标大小(单位KB):"))target_bytes = target_kb * 1024
  • 用户输入目标大小(KB),转成字节。
img = Image.open(输入路径)
  • 打开图片。
if img.mode == 'RGBA':    img = img.convert('RGB')
  • PNG图片可能有透明通道(RGBA),保存为JPG时需要转成RGB。
img.save(输出路径, quality=quality, optimize=True)
  • 保存图片,quality 控制压缩质量(1-100),optimize 开启优化。
while current_size > target_bytes and quality > 10:    quality -= 5    img.save(输出路径, quality=quality, optimize=True)    current_size = os.path.getsize(输出路径)
  • 如果压缩后还太大,逐步降低质量,直到达标或降到10为止。
original_size = os.path.getsize(输入路径)total_original += original_size
  • 累加原大小,用于统计节省空间。

四、踩过的坑

坑1:压缩后反而变大?

如果原图已经是压缩过的JPG,再次压缩可能变化不大,甚至因为重新编码变大。可以加个判断:如果原图已经小于目标大小,直接复制过去。

坑2:PNG压缩效果不明显

PNG是无损格式,直接转JPG会大幅减小,但可能损失透明度。如果需要保留透明,可以输出为PNG,但压缩空间小。

坑3:有些图片打不开

有的图片后缀是JPG,但实际是损坏的。代码里用了 try...except 捕获异常,但这里没加,可以自行添加。

坑4:压缩过度画质差

如果目标大小设得太小,quality会降到很低,画质会变差。建议目标大小不低于200KB,或者根据用途调整。

五、为什么用Python而不是压缩软件

对比项
在线工具/软件
Python脚本
价格
免费版限制多,专业版收费
0元
批量
很多软件一次只能压一张
一键批量
隐私
要上传到服务器
本地处理
自定义
固定几个压缩等级
任意目标大小
画质
黑盒压缩
可调质量参数

六、今日挑战

找一堆手机里的照片,用这个脚本压缩一下,看看能省多少空间。如果有任何问题,评论区告诉我。

七、下期写什么?

想用Python解决什么日常麻烦?比如:

  • 批量提取PDF里的图片?
  • 自动重命名一堆文件?
  • 把Excel拆分成多个文件?
  • 批量给照片添加水印?

在评论区留下需求,点赞最高的需求,小编下期就安排脚本!免费、好用、带详细解释。

八、下期预告

评论区见!高赞需求就是下期内容。

回复「Py脚本」获取本文完整代码(含.exe工具)

图片转PDF还要花钱?这个免费Python工具一键搞定(附代码)

合并PDF别再傻傻充会员了!这个Python脚本一键搞定(附代码)

Excel卡死?用Python连上SQLite,10万行数据秒开!

最新文章

随机文章