1376 字
7 分钟
高效图片批量转换 WebP 脚本
2025-06-22

项目背景#

在现代网页设计中,图片加载速度是影响用户体验和 SEO排名的关键因素。WebP 是由 Google 开发的一种现代图像格式,它能以更小的文件体积提供与 JPG, PNG 相媲美的图像质量。

为了让博客的图片加载的更快,所以写了这个 Python 脚本旨在解决手动转换图片的繁琐工作。它利用强大的 Pillow 库,可以一键将一个文件夹内所有支持的图片批量转换为高质量、小体积的 WebP 格式,极大地提升了前端开发和内容管理的效率。

功能特点#

  • 自动化批量处理:无需手动操作,一次性转换文件夹内的所有图片。
  • 多种格式支持:支持转换 .jpg, .jpeg, .png, .bmp, .gif, .tiff 等主流图片格式。
  • 高质量压缩:采用 quality=85method=6 的参数,在保证优秀画质的同时,最大限度地减小文件体积。
  • 保留透明度:自动处理并保留 PNG 等格式图片的透明背景。
  • 安全无损:转换过程不会删除原始图片,方便您对比和备份。
  • 智能跳过:如果同名的 .webp 文件已经存在,脚本会自动跳过,避免重复工作。
  • 简单易用:代码简洁,开箱即用,只需将脚本放置在目标文件夹内即可。

准备工作 (Prerequisites)#

在运行脚本之前,您需要确保您的电脑满足以下两个条件:

  1. 安装 Python: 您的电脑需要安装 Python 3.x 版本。如果您不确定是否已安装,可以在终端或命令提示符中输入 python --versionpython3 --version 查看。

    如果尚未安装,请访问 Python 官网 下载并安装。

  2. 安装 Pillow 库: Pillow 是 Python 中用于图像处理的核心库。请在终端或命令提示符中运行以下命令来安装它:

    Terminal window
    pip install Pillow

看到 Successfully installed Pillow-... 字样即表示安装成功。

使用方法 (Step-by-Step)#

步骤 1:创建脚本文件#

首先,创建一个名为 convert_to_webp.py 的文件。

步骤 2:将代码粘贴到文件中#

import os
from PIL import Image
def convert_images_to_webp():
"""
将脚本所在目录下的所有支持的图片格式转换为 WebP 格式。
- 高质量压缩 (quality=85, method=6)
- 保留透明度
- 不删除原文件
- 自动跳过已存在的 WebP 文件
"""
# 获取脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 支持转换的图片格式列表
supported_formats = ['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff']
print("--- 开始处理图片转换任务 ---")
# 遍历目录中的所有文件
for filename in os.listdir(script_dir):
# 分离文件名和扩展名
file_name_part, file_ext_part = os.path.splitext(filename)
# 检查文件扩展名是否在支持的格式列表中 (忽略大小写)
if file_ext_part.lower() in supported_formats:
input_path = os.path.join(script_dir, filename)
output_path = os.path.join(script_dir, f"{file_name_part}.webp")
# 如果同名的 webp 文件已存在,则跳过
if os.path.exists(output_path):
print(f"跳过: {filename} (已存在同名 WebP 文件)")
continue
try:
# 打开图片文件
with Image.open(input_path) as img:
# 对于 GIF 动图,只保存第一帧。如果需要完整动图支持,需要额外处理。
# Pillow 的 WebP 保存器会自动处理 RGBA (带透明通道) 和 RGB 模式。
# 保存为 WebP
# quality: 质量参数,1-100。85 是在质量和体积之间很好的平衡点。
# method: 压缩算法,0-6。6 是最慢但压缩效果最好的。
# lossless: 是否无损压缩。这里我们用有损来减小体积。
img.save(output_path, 'webp', quality=85, method=6)
original_size = os.path.getsize(input_path) / 1024 # KB
new_size = os.path.getsize(output_path) / 1024 # KB
print(f"成功: {filename} ({original_size:.1f} KB) -> {file_name_part}.webp ({new_size:.1f} KB)")
except Exception as e:
print(f"失败: 转换 {filename} 时发生错误: {e}")
print("--- 所有图片处理完成! ---")
if __name__ == '__main__':
convert_images_to_webp()

将本文开头提供的完整 Python 代码复制并粘贴到您创建的 convert_to_webp.py 文件中,然后保存。

步骤 3:放置脚本和图片#

这是最关键的一步:将您刚刚保存的 convert_to_webp.py 脚本文件,放入您存放着待转换图片的文件夹中。

示例文件夹结构:

/你的图片文件夹/
├── convert_to_webp.py <-- 你的脚本在这里
├── image1.jpg
├── photo_02.png
├── document.tiff
└── logo.gif

步骤 4:运行脚本#

  1. 打开您的终端或命令提示符 (CMD/PowerShell)。
  2. 使用 cd 命令切换到您存放图片和脚本的那个文件夹。例如:
    Terminal window
    cd /path/to/你的图片文件夹
  3. 运行脚本:
    Terminal window
    python convert_to_webp.py

步骤 5:查看结果#

脚本运行后,您会看到终端输出类似以下的处理日志:

--- 开始处理图片转换任务 ---
成功: image1.jpg (120.5 KB) -> image1.webp (35.2 KB)
成功: photo_02.png (85.1 KB) -> photo_02.webp (22.8 KB)
成功: document.tiff (1500.3 KB) -> document.webp (250.7 KB)
成功: logo.gif (15.2 KB) -> logo.webp (4.1 KB)
--- 所有图片处理完成! ---

同时,您的文件夹内会生成对应的 .webp 文件,而原始文件依然保留。

转换后的文件夹结构:

/你的图片文件夹/
├── convert_to_webp.py
├── image1.jpg
├── image1.webp <-- 新生成的文件
├── photo_02.png
├── photo_02.webp <-- 新生成的文件
├── document.tiff
├── document.webp <-- 新生成的文件
├── logo.gif
└── logo.webp <-- 新生成的文件

注意事项#

  • GIF 动图:当前脚本在处理 .gif 动图时,只会截取并转换其第一帧为静态的 WebP 图片。如果需要转换完整的 GIF 动图,需要更复杂的处理逻辑。
  • 自定义质量:您可以修改脚本中的 img.save() 行,调整 quality 参数(1-100)来平衡图像质量和文件大小。数字越高质量越好,但文件也越大。
高效图片批量转换 WebP 脚本
https://blog.wlens.top/posts/高效图片批量转换-webp-脚本/
作者
Lao Wang
发布于
2025-06-22
许可协议
CC BY-NC-SA 4.0