此脚本将图片压缩到小于600kb,可以修改参数target_size_kb,指定压缩大小
import os
from PIL import Image
def resize_image(input_folder, output_folder, target_size_kb=600):
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
filepath = os.path.join(input_folder, filename)
img = Image.open(filepath)
# 调整图像质量以降低文件大小
quality = 95 # 初始图像质量
while True:
output_filepath = os.path.join(output_folder, filename)
img.save(output_filepath, quality=quality)
file_size_kb = os.path.getsize(output_filepath) / 1024 # 文件大小(KB)
if file_size_kb <= target_size_kb or quality < 10: # 降低质量直至达到目标大小或质量太低
break
quality -= 5 # 逐步降低图像质量
# 如果仍然太大,进一步缩小图像尺寸
if file_size_kb > target_size_kb:
scale_factor = (target_size_kb / file_size_kb) ** 0.5 # 计算比例
new_width = int(img.width * scale_factor)
new_height = int(img.height * scale_factor)
resized_img = img.resize((new_width, new_height), Image.ANTIALIAS)
# 重新保存缩小后的图像
resized_img.save(output_filepath, quality=quality)
print(f"{filename} 已处理,最终文件大小约为: {os.path.getsize(output_filepath) / 1024:.2f} KB")
# 使用方法
input_folder = 'C:\\Users\\zhan wang\\Pictures\\Saved Pictures\\0914'
output_folder = 'C:\\Users\\zhan wang\\Pictures\\Saved Pictures\\091401'
resize_image(input_folder, output_folder)