如何按指定比例批量调整目录中图片的尺寸?
批量按指定比例缩放图片并保持宽高比的Python实现
嘿,你的思路方向完全没问题!保持宽高比批量缩放图片其实用Python的Pillow库就能轻松搞定,我给你整理一套完整的实现方案,刚好匹配你的需求:
核心思路说明
你提到的aspectRatio = currentWidth / currentHeight其实已经被自动覆盖了——只要我们按相同的比例同时缩放宽和高,就能完美保留原图片的宽高比,不需要额外计算面积来推导尺寸,直接用原尺寸乘以缩放比例就够了,简单又高效。
完整代码实现
首先确保你已经安装了Pillow库:
pip install pillow
然后是批量处理的代码:
from PIL import Image import os def batch_resize_images(input_dir, output_dir, scale_ratio): # 创建输出目录(如果不存在) os.makedirs(output_dir, exist_ok=True) # 遍历输入目录下的所有文件 for filename in os.listdir(input_dir): # 过滤常见的图片格式(可根据需要补充) if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')): input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) try: # 打开图片 with Image.open(input_path) as img: # 获取原尺寸 original_width, original_height = img.size # 计算新尺寸(保持宽高比) new_width = int(original_width * scale_ratio) new_height = int(original_height * scale_ratio) # 缩放图片,使用LANCZOS重采样保证高质量 resized_img = img.resize((new_width, new_height), resample=Image.LANCZOS) # 保存处理后的图片 resized_img.save(output_path) print(f"已处理:{filename} → 原尺寸{original_width}x{original_height} → 新尺寸{new_width}x{new_height}") except Exception as e: print(f"处理{filename}时出错:{str(e)}") # 示例用法 if __name__ == "__main__": # 替换成你的输入目录路径 INPUT_FOLDER = "path/to/your/input/images" # 替换成你的输出目录路径 OUTPUT_FOLDER = "path/to/your/output/resized_images" # 指定缩放比例,比如0.25就是缩小到原尺寸的25% SCALE_RATIO = 0.25 batch_resize_images(INPUT_FOLDER, OUTPUT_FOLDER, SCALE_RATIO)
关键细节解释
- 重采样方法:使用
Image.LANCZOS是因为它在缩小图片时能提供最高的画质,避免出现锯齿或模糊;如果是放大图片,可以考虑Image.BICUBIC。 - 格式兼容:代码里过滤了常见的图片格式,你可以根据自己的需求添加或修改后缀(比如
.webp)。 - 异常处理:加入了try-except块,避免单个图片处理失败导致整个批量任务中断。
- 目录创建:
os.makedirs(output_dir, exist_ok=True)会自动创建输出目录,如果目录已经存在也不会报错。
如果你想按目标面积比例来缩放(比如原面积的20%),那可以基于你的思路调整尺寸计算:
# 目标面积比例(比如0.2代表原面积的20%) area_ratio = 0.2 # 计算缩放比例:面积比例的平方根 scale_ratio = area_ratio ** 0.5 # 后续的尺寸计算和上面一致
这样就能完美匹配你最开始提到的面积推导思路啦!
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

