使用Python批量将图片转换为WebP格式并压缩:完整教程与实例详解 – 幽络源

使用Python批量将图片转换为WebP格式并压缩:完整教程与实例详解 – 幽络源

一、为什么选择 WebP?

在现代网页开发中,图片加载速度直接影响用户体验和SEO排名。Google推出的 WebP 图像格式 能在保持高质量的同时显著减小文件体积:

  • 相比 JPEG,WebP 有损压缩平均节省 25%~35% 的体积;
  • 相比 PNG,WebP 无损压缩可减少 26% 以上;
  • 支持透明通道(Alpha)、动画、元数据等高级特性。

因此,将网站中的 JPG/PNG 等传统格式批量转换为 WebP,是提升网站性能的重要一步。

本文幽络源将手把手教你使用 Python 脚本,一键批量转换任意文件夹下的图片为 WebP 格式,并附带真实操作示例

二、所需工具与环境

1. 安装 Python

确保你的系统已安装 Python 3.6 或更高版本。可通过终端/命令行输入:

python --version
# 或
python3 --version

2. 安装 Pillow 库

Pillow 是 Python 中最常用的图像处理库,支持多种格式读写。

pip install Pillow

三、完整转换脚本

将以下代码保存为 convert_to_webp.py

import os
from pathlib import Path
from PIL import Image


def convert_images_to_webp(directory, quality=80, delete_original=True):
    """
    将指定目录及其子目录下的所有支持的图片(包括 .webp)转换为 WebP 格式。
    对已有 .webp 文件也会重新压缩(可用于进一步降低质量)。

    参数:
        directory (str): 要处理的目录路径
        quality (int): WebP 有损压缩质量,范围 0~100(仅对非透明图生效;透明图默认 lossless=False + quality)
        delete_original (bool): 是否删除原始图片文件(默认 True)
    """
    # 支持的原始图片扩展名(现在包含 .webp)
    image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp'}

    for root, _, files in os.walk(directory):
        for filename in files:
            filepath = Path(root) / filename
            file_ext = filepath.suffix.lower()

            if file_ext in image_extensions:
                new_filepath = filepath.with_suffix('.webp')

                try:
                    with Image.open(filepath) as img:
                        # 处理透明图像:使用带透明的有损 WebP(WebP 支持有损+透明)
                        if img.mode in ("RGBA", "LA"):
                            # 注意:有损 WebP 也支持透明,但需显式设置 method 和 quality
                            # lossless=False + quality 可减小体积,同时保留 alpha
                            img.save(new_filepath, 'WEBP', lossless=False, quality=quality, method=6)
                        else:
                            # 非透明图像:转为 RGB 后有损压缩
                            if img.mode != "RGB":
                                img = img.convert("RGB")
                            img.save(new_filepath, 'WEBP', quality=quality, method=6)

                    # 如果原文件就是 .webp 且启用了 delete_original,则覆盖前先判断是否同名
                    if delete_original:
                        if filepath != new_filepath:
                            filepath.unlink()
                        else:
                            # 原地重写:先保存到临时文件再替换,避免数据丢失(这里简化处理)
                            # 实际上 PIL 的 save 会直接覆盖,所以安全前提是先读取完成
                            pass
                        print(f"✅ 已转换并删除: {filepath} → {new_filepath}")
                    else:
                        print(f"✅ 已转换(保留原图): {filepath} → {new_filepath}")

                except Exception as e:
                    print(f"❌ 转换失败 {filepath}: {e}")


if __name__ == "__main__":
    # === 修改这里!设置你要转换的文件夹路径 ===
    target_directory = r"C:\Users\AW\Pictures\LW"

    if os.path.isdir(target_directory):
        print(f"开始转换目录: {target_directory}")
        convert_images_to_webp(
            directory=target_directory,
            quality=70,           # 可调低以进一步压缩(例如 30~70)
            delete_original=True  # 建议首次运行设为 False,确认效果后再删除
        )
        print("🎉 所有图片转换完成!")
    else:
        print(f"❌ 错误:目录不存在!请检查路径:{target_directory}")

💡 脚本亮点

  • 自动递归处理子文件夹;
  • 智能判断是否含透明通道(自动启用无损模式);
  • 可控是否删除原图,避免误操作;
  • 支持常见图片格式(JPG、PNG、BMP、GIF 等)。

四、具体使用示例

如下图,幽络源这里随便截图一张图片保存后可以看到大小为 156KB

6005c317-57b9-48c2-8912-b2c31e556ef5

将图片转换压缩脚本的质量参数设置为85后执行,如下

1be3714a-c033-42ce-80a9-6bdb1aad43b6

可以看到图像的大小减少到了56.3KB

5361134b-8122-4801-8814-5cf2b6f379fa

结语

通过这个简单而强大的 Python 脚本,你可以轻松实现全站图片 WebP 化,显著提升网页加载速度,降低带宽消耗,同时改善 SEO 表现,如有疑问或有其他Python脚本需求可加入幽络源官方QQ群咨询307531422

THE END
喜欢就支持一下吧
分享