- 安装依赖
pip install Pillow libwebp
- 实现代码
import os
from PIL import Image
from pathlib import Path
def convert_folder_to_png(input_folder, output_folder=None, add_suffix=True):
"""
将输入文件夹内的所有图片转为 PNG 格式
:param input_folder: 输入文件夹路径(字符串或 Path 对象)
:param output_folder: 输出文件夹路径(可选,若未指定则默认在原文件夹创建)
:param add_suffix: 是否为转换后的文件添加 "_png" 后缀(默认 True)
"""
# 确保输入路径存在
input_path = Path(input_folder)
if not input_path.exists() or not input_path.is_dir():
raise ValueError(f"输入路径不存在或不是文件夹: {input_folder}")
# 创建输出文件夹(如果未指定则使用原文件夹)
output_path = output_folder or (input_path/"to_png")
if output_path != input_path:
output_path.mkdir(exist_ok=True)
# 支持的图片格式列表(可自行扩展)
SUPPORTED_FORMATS = {'.webp', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff'}
# 遍历文件夹(递归)
for root, _, files in os.walk(input_path):
for filename in files:
file_ext = Path(filename).suffix.lower()
if file_ext in SUPPORTED_FORMATS:
# 构建原文件路径和输出文件路径
src_file = Path(root) / filename
dst_dir = output_path
# 确保输出目录存在
dst_dir.mkdir(exist_ok=True)
# 构建新文件名(添加后缀或不添加)
if add_suffix:
dst_filename = f"{Path(filename).stem}_png{file_ext.replace(file_ext, '.png')}"
else:
dst_filename = f"{Path(filename).stem}{file_ext.replace(file_ext, '.png')}"
dst_file = dst_dir / dst_filename
try:
with Image.open(src_file) as img:
# 保存为 PNG(无损质量)
img.save(dst_file, "PNG", quality=100, exif=img.info.get('exif', b''))
print(f"成功转换: {src_file} → {dst_file}")
except Exception as e:
print(f"转换失败: {src_file} | 错误: {str(e)}")
# 使用示例
if __name__ == "__main__":
# 将当前目录下的所有图片转为 PNG(保留原文件夹结构)
convert_folder_to_png(".", add_suffix=False)
# 或者自定义输入输出路径:
# convert_folder_to_png("/path/to/input/folder", "/path/to/output/folder", add_suffix=False)
- 拖到cmd窗口运行
网友评论