脚本介绍:
该脚本用于批量将当前目录下的 JPG、JPEG、PNG 图片转换为 WebP 格式,并将结果统一输出至一个名为 webp_images 的子目录中。支持增量转换:仅当目标 .webp 文件不存在,或源图像已更新时,才会执行转换操作,避免重复处理,节省资源。
✅ 支持 .jpg、.jpeg、.png 格式的图片文件
✅ 自动创建输出目录 webp_images
✅ 支持智能跳过已转换且未变动的文件
✅ 使用 Pillow 库处理图像,设定默认压缩质量为 85
✅ 控制台输出转换进度和错误提示
脚本名:
convert_to_webp.py
脚本内容:
import os
from PIL import Image
# 原始图片目录(当前目录)
SOURCE_DIR = os.getcwd()
# 统一输出目录
OUTPUT_DIR = os.path.join(SOURCE_DIR, "webp_images")
os.makedirs(OUTPUT_DIR, exist_ok=True)
# 支持的图片扩展名
EXTENSIONS = ('.jpg', '.jpeg', '.png')
def is_conversion_needed(src_path, dst_path):
"""
判断是否需要转换:目标文件不存在,或源文件比目标更新
"""
return not os.path.exists(dst_path) or os.path.getmtime(src_path) > os.path.getmtime(dst_path)
def convert_image(file_path, output_dir):
try:
basename = os.path.splitext(os.path.basename(file_path))[0]
webp_path = os.path.join(output_dir, basename + ".webp")
if not is_conversion_needed(file_path, webp_path):
print(f"[跳过] 已存在并是最新: {basename}.webp")
return
img = Image.open(file_path)
img.save(webp_path, 'webp', quality=85)
print(f"[转换] {file_path} -> {webp_path}")
except Exception as e:
print(f"[错误] 转换失败: {file_path} 错误: {e}")
def batch_convert(source_dir, output_dir):
for root, _, files in os.walk(source_dir):
for filename in files:
if filename.lower().endswith(EXTENSIONS):
file_path = os.path.join(root, filename)
convert_image(file_path, output_dir)
if __name__ == "__main__":
print(f"📁 扫描目录: {SOURCE_DIR}")
print(f"💾 输出目录: {OUTPUT_DIR}")
batch_convert(SOURCE_DIR, OUTPUT_DIR)
print("✅ 全部转换完成。")
脚本效果:

哥 avif都用上了
源文件一般没人存webp,都是访问时自动去转换的。
类似cdn,套了一层转换的服务
@35后就失业 #2 那样资源占用会很大
@kejilion #3
webp节省的是传输成本,不是存储。
而且不是所有浏览器都支持webp,通常在服务上会通过
HTTP Accept判断给不同的返回策略哥,没必要,这玩意还是交给图床来做吧....
@35后就失业 #4 还要判断 原来是为了兼容性 兼容老浏览器呗
@lynkchan #5 我没图床 以后看情况加吧
cfworks实时转换+缓存
@kejilion #6
存储才几个钱,流量是大头。 省流量这才是谷歌搞这个的原因
@35后就失业 #9 我感觉我的硬盘快不够了才想到 这样的