Python 批量转化图片格式为png

2025-03-17  本文已影响0人  饱饱抓住了灵感
  1. 安装依赖
pip install Pillow libwebp
  1. 实现代码
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)
  1. 拖到cmd窗口运行
上一篇 下一篇

猜你喜欢

热点阅读