python将指定目录下图片统一转换为指定格式
发表于 : 2026-07-28 9:56
代码: 全选
from PIL import Image
import os
def batch_convert_images(input_dir, output_dir, target_format):
"""
将指定目录下的图片统一转换为指定格式
:param input_dir: 输入图片目录
:param output_dir: 输出图片目录
:param target_format: 目标格式,例如 'JPEG', 'PNG', 'WEBP' (注意:需大写)
"""
os.makedirs(output_dir, exist_ok=True)
# 支持读取的图片后缀
valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.webp', '.tiff')
for filename in os.listdir(input_dir):
if not filename.lower().endswith(valid_extensions):
continue # 跳过非图片文件
img_path = os.path.join(input_dir, filename)
# 将文件名后缀替换为目标格式后缀
base_name = os.path.splitext(filename)[0]
ext = '.jpg' if target_format == 'JPEG' else f'.{target_format.lower()}'
output_path = os.path.join(output_dir, base_name + ext)
try:
img = Image.open(img_path)
# 【核心处理】如果目标是 JPEG 且原图带有透明通道(RGBA),需先转为 RGB
# 否则保存 JPEG 时会报错
if target_format == 'JPEG' and img.mode in ('RGBA', 'LA', 'P'):
background = Image.new('RGB', img.size, (255, 255, 255))
if img.mode == 'P':
img = img.convert('RGBA')
background.paste(img, mask=img.split()[-1]) # 将透明部分用白色填充
img = background
# 执行保存
img.save(output_path, target_format)
print(f"✅ 成功转换: {filename} -> {base_name}{ext}")
except Exception as e:
print(f"❌ 处理 {filename} 时出错: {e}")
# ========== 使用示例 ==========
if __name__ == "__main__":
input_folder = "./media" # 替换为你的原图文件夹路径
output_folder = "./media_o" # 替换为转换后的输出文件夹路径
# 替换为你需要的格式:'JPEG' (jpg), 'PNG', 'WEBP'
target_fmt = 'JPEG'
batch_convert_images(input_folder, output_folder, target_fmt)