使用 PIL 实现图片的批量格式转换

【Python 实战】---- 使用 PIL 实现图片的批量格式转换

1. 前言

在日常开发和图像处理工作中,我们经常需要将图片从一种格式转换为另一种格式。本文将基于一个实际的Python脚本示例,介绍如何实现批量图片格式转换,并对比几种常用的图像处理库的优劣势。

2. 技术对比分析

2.1 OpenCV

优势

  1. 功能强大,支持多种图像处理操作;
  2. 性能优秀,特别是在处理大量图像时;
  3. 支持多种图像格式。

劣势:学习曲线较陡峭;对于简单的格式转换任务可能过于复杂;主要专注于计算机视觉任务。

2.2 Wand

优势

  1. 功能非常全面,支持超过100种图像格式;
  2. 提供丰富的图像处理功能;
  3. 支持命令行工具的所有功能。

劣势:相对于PIL,社区支持较小;安装可能比较复杂。

2.3 pillow

优势

  1. 简单易用,API直观;
  2. 文档完善,社区支持良好;
  3. 轻量级,适合简单的图像处理任务;
  4. 广泛应用于Python图像处理领域。

劣势:在处理大量图像时性能不如OpenCV;功能相对有限,主要专注于基本的图像处理。

3. 实现分析

  1. 导入必要的库 :使用PIL库处理图像,os库处理文件和文件夹操作。
  2. 创建输出文件夹 :使用os.makedirs(output_folder, exist_ok=True)确保输出文件夹存在。
  3. 遍历输入文件夹 :使用os.listdir()获取输入文件夹中的所有文件。
  4. 筛选WebP文件 :通过filename.lower().endswith('.webp')筛选出WebP格式的文件。
  5. 图像转换 :使用Image.open()打开WebP图片,然后通过img.save()保存为PNG格式。
  6. 异常处理:在转换过程中加入异常处理,确保单个文件转换失败不会影响其他文件的转换。

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. 总结

  1. 通过使用PIL库,我们可以轻松地实现WebP到PNG的格式转换。
  2. 对比了OpenCV、Wand和PIL三种常用的图像处理库,每种库都有其适用的场景。 在选择图像处理库时,应根据具体需求和项目特点来决定。
相关推荐
zhaoyong2228 分钟前
MySQL 存储过程中字符集与排序规则不匹配导致查询性能下降的解决方案
jvm·数据库·python
sinat_383437368 分钟前
golang如何从Python转型Go开发_golang从Python转型Go开发攻略
jvm·数据库·python
rockey62718 分钟前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
gqk0125 分钟前
Python入门
python
Muyuan19981 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生1 小时前
statistics,一个统计的 Python 库!
开发语言·python
STLearner2 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱
FreakStudio2 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy
老陈说编程2 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
给自己做减法2 小时前
rag混合检索
人工智能·python·rag