上传文件至「/」
This commit is contained in:
76
convert_to_webp.py
Normal file
76
convert_to_webp.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
|
||||
def convert_images_to_webp_in_out_dir():
|
||||
"""
|
||||
将脚本所在目录下的所有支持的图片格式转换为 WebP 格式,并输出到 'out' 子目录。
|
||||
|
||||
功能:
|
||||
- 高质量压缩 (quality=85, method=6)。
|
||||
- 保留图片透明度。
|
||||
- 不删除原始文件。
|
||||
- 自动创建 'out' 目录用于存放结果。
|
||||
- 自动跳过在 'out' 目录中已存在的同名 WebP 文件。
|
||||
"""
|
||||
try:
|
||||
# 使用 pathlib 获取脚本所在的目录,这是更现代、更健壮的方式
|
||||
script_dir = Path(__file__).parent
|
||||
output_dir = script_dir / 'out'
|
||||
|
||||
# 创建输出目录,如果目录已存在则什么也不做
|
||||
output_dir.mkdir(exist_ok=True)
|
||||
|
||||
# 支持转换的图片格式列表
|
||||
supported_formats = ['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff']
|
||||
|
||||
print("--- 开始处理图片转换任务 ---")
|
||||
print(f"源目录: {script_dir}")
|
||||
print(f"输出目录: {output_dir}")
|
||||
print("-" * 30)
|
||||
|
||||
# 遍历目录中的所有文件
|
||||
for file_path in script_dir.iterdir():
|
||||
# 只处理文件,跳过子目录
|
||||
if not file_path.is_file():
|
||||
continue
|
||||
|
||||
# 检查文件扩展名是否在支持的格式列表中 (忽略大小写)
|
||||
if file_path.suffix.lower() in supported_formats:
|
||||
output_path = output_dir / f"{file_path.stem}.webp"
|
||||
|
||||
# 如果同名的 webp 文件已存在,则跳过
|
||||
if output_path.exists():
|
||||
print(f"跳过: {file_path.name} (目标文件已存在)")
|
||||
continue
|
||||
|
||||
try:
|
||||
# 打开图片文件
|
||||
with Image.open(file_path) as img:
|
||||
# Pillow 的 WebP 保存器会自动处理 RGBA (带透明通道) 和 RGB 模式。
|
||||
# 对于 GIF 动图,默认只保存第一帧。
|
||||
|
||||
# 保存为 WebP
|
||||
# quality: 质量参数,1-100。85 是在质量和体积之间很好的平衡点。
|
||||
# method: 压缩算法,0-6。6 是最慢但压缩效果最好的。
|
||||
img.save(output_path, 'webp', quality=85, method=6)
|
||||
|
||||
original_size_kb = file_path.stat().st_size / 1024
|
||||
new_size_kb = output_path.stat().st_size / 1024
|
||||
|
||||
print(f"成功: {file_path.name} ({original_size_kb:.1f} KB) -> out/{output_path.name} ({new_size_kb:.1f} KB)")
|
||||
|
||||
except Exception as e:
|
||||
print(f"失败: 转换 {file_path.name} 时发生错误: {e}")
|
||||
|
||||
print("-" * 30)
|
||||
print("--- 所有图片处理完成! ---")
|
||||
|
||||
except NameError:
|
||||
print("错误: 此脚本似乎不是作为文件直接运行的。请将其保存为 .py 文件后执行。")
|
||||
except Exception as e:
|
||||
print(f"发生意外错误: {e}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
convert_images_to_webp_in_out_dir()
|
||||
Reference in New Issue
Block a user