【Python 实战】---- 使用 PIL 实现图片的批量格式转换
1. 前言
在日常开发和图像处理工作中,我们经常需要将图片从一种格式转换为另一种格式。本文将基于一个实际的Python脚本示例,介绍如何实现批量图片格式转换,并对比几种常用的图像处理库的优劣势。
2. 技术对比分析
2.1 OpenCV
优势:
- 功能强大,支持多种图像处理操作;
- 性能优秀,特别是在处理大量图像时;
- 支持多种图像格式。
劣势:学习曲线较陡峭;对于简单的格式转换任务可能过于复杂;主要专注于计算机视觉任务。
2.2 Wand
优势:
- 功能非常全面,支持超过100种图像格式;
- 提供丰富的图像处理功能;
- 支持命令行工具的所有功能。
劣势:相对于PIL,社区支持较小;安装可能比较复杂。
2.3 pillow
优势:
- 简单易用,API直观;
- 文档完善,社区支持良好;
- 轻量级,适合简单的图像处理任务;
- 广泛应用于Python图像处理领域。
劣势:在处理大量图像时性能不如OpenCV;功能相对有限,主要专注于基本的图像处理。
3. 实现分析
- 导入必要的库 :使用
PIL
库处理图像,os
库处理文件和文件夹操作。 - 创建输出文件夹 :使用
os.makedirs(output_folder, exist_ok=True)
确保输出文件夹存在。 - 遍历输入文件夹 :使用
os.listdir()
获取输入文件夹中的所有文件。 - 筛选WebP文件 :通过
filename.lower().endswith('.webp')
筛选出WebP格式的文件。 - 图像转换 :使用
Image.open()
打开WebP图片,然后通过img.save()
保存为PNG格式。 - 异常处理:在转换过程中加入异常处理,确保单个文件转换失败不会影响其他文件的转换。
4. 实现代码
python
from PIL import Image
import os
def convert_webp_to_png(input_folder, output_folder):
# 创建输出文件夹(如果不存在)
os.makedirs(output_folder, exist_ok=True)
# 遍历输入文件夹中的所有webp文件
for filename in os.listdir(input_folder):
if filename.lower().endswith('.webp'):
# 构建完整的文件路径
input_path = os.path.join(input_folder, filename)
# 打开webp图片
try:
with Image.open(input_path) as img:
# 生成输出文件名(将.webp替换为.png)
output_filename = os.path.splitext(filename)[0] + '.png'
output_path = os.path.join(output_folder, output_filename)
# 转换并保存为png格式
img.save(output_path, 'PNG')
print(f"已转换: {filename} -> {output_filename}")
except Exception as e:
print(f"转换失败 {filename}: {str(e)}")
if __name__ == "__main__":
input_folder = "webp"
output_folder = "out_webp"
convert_webp_to_png(input_folder, output_folder)
print("所有webp图片已转换完成!")
5. 执行结果

6. 执行前后对比
7. 总结
- 通过使用PIL库,我们可以轻松地实现WebP到PNG的格式转换。
- 对比了OpenCV、Wand和PIL三种常用的图像处理库,每种库都有其适用的场景。 在选择图像处理库时,应根据具体需求和项目特点来决定。