from PIL import Image
import os
import io
def resize_images_in_directory(directory, target_size=(240, 240), max_file_size_kb=500): #保证处理后的图像集 大小为240*240 且不超过 500K
for filename in os.listdir(directory):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')): # 这里我添加了lower()以确保文件扩展名的大小写不敏感
file_path = os.path.join(directory, filename)
with Image.open(file_path) as img:
if img.mode != 'RGB':
img = img.convert('RGB')
img = img.resize(target_size, Image.ANTIALIAS)
# 初始化保存质量
save_quality = 95
while True:
# 使用 BytesIO 临时保存图像来检查大小
buffer = io.BytesIO()
img.save(buffer, format='JPEG', quality=save_quality)
buffer.seek(0) # 重置指针到文件的开始
size_kb = len(buffer.getvalue()) / 1024 # 获取buffer的大小
if size_kb <= max_file_size_kb or save_quality <= 10:
break
save_quality -= 5 # 减少质量以减小文件大小
# buffer.close() # 不需要显示关闭,with语句会处理
# 保存调整大小和压缩后的图像
with open(file_path, 'wb') as f:
f.write(buffer.getvalue()) # 写入文件
# 使用函数处理图像
resize_images_in_directory("C:/Users/JJ/Desktop/shousi") # 处理数据集的绝对路径 原始图像集需备份,这里是直接覆盖了
Python批量裁剪图像尺寸、压缩图像大小代码实现
最新推荐文章于 2024-06-24 00:16:35 发布