每次传照片都提示“文件过大”,找压缩软件不是要会员就是带水印。今天分享一个Python脚本,把要压缩的图片放进一个文件夹,运行后自动批量压缩,想压到多大都行,完全免费,本地处理不伤画质。复制代码运行就行,再也不用给那些软件送钱。
一键批量压缩所有图片,想压多大压多大,完全免费,本地处理不伤画质。
你只需要:
运行界面长这样:
=== 图片批量压缩免费工具 ===请输入图片文件夹路径: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 * 1024img = Image.open(输入路径)if img.mode == 'RGBA': img = img.convert('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(输出路径)original_size = os.path.getsize(输入路径)total_original += original_size如果原图已经是压缩过的JPG,再次压缩可能变化不大,甚至因为重新编码变大。可以加个判断:如果原图已经小于目标大小,直接复制过去。
PNG是无损格式,直接转JPG会大幅减小,但可能损失透明度。如果需要保留透明,可以输出为PNG,但压缩空间小。
有的图片后缀是JPG,但实际是损坏的。代码里用了 try...except 捕获异常,但这里没加,可以自行添加。
如果目标大小设得太小,quality会降到很低,画质会变差。建议目标大小不低于200KB,或者根据用途调整。
找一堆手机里的照片,用这个脚本压缩一下,看看能省多少空间。如果有任何问题,评论区告诉我。
想用Python解决什么日常麻烦?比如:
在评论区留下需求,点赞最高的需求,小编下期就安排脚本!免费、好用、带详细解释。
评论区见!高赞需求就是下期内容。
回复「Py脚本」获取本文完整代码(含.exe工具)
图片转PDF还要花钱?这个免费Python工具一键搞定(附代码)