Python脚本—批量图片格式转换

该博客展示了如何利用Python的os、sys和PIL库来批量转换指定文件夹中的jpg格式图片为png格式。首先,它遍历指定的input_folder找到所有的jpg文件,然后将这些图片保存到output_folder中,转换后的图片格式为png。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图像处理和机器学习领域,经常需要对大量的图片进行格式转换。例如,将所有的.jpg格式图片转换为.png格式,以满足特定的应用需求。手动转换大量图片既耗时又容易出错,因此,利用Python编写一个批量转换脚本是一个高效且实用的解决方案。

本文将详细介绍如何使用Python的os、sys和PIL(Python Imaging Library)库,实现批量图片格式的转换。我们将逐步解析代码,并提供优化和扩展的建议,以提高代码的健壮性和效率。

一、前言

在处理图片数据时,不同的项目或算法可能需要特定的图片格式。手动转换大量图片既不现实,也不高效。Python提供了丰富的库,使得批量图片格式转换变得简单且高效。

二、涉及的Python库简介

  1. os库
    os模块提供了与操作系统进行交互的功能,如文件和目录的创建、删除、遍历等。

os.walk(path):生成目录树下的所有文件名,返回一个三元组 (dirpath, dirnames, filenames)。
os.path.join(path, *paths):将多个路径组合后返回。
os.path.splitext(path):分离文件名与扩展名。

  1. sys库
    sys模块提供了访问Python解释器的变量和与解释器进行交互的功能。在本例中,我们并未直接使用sys模块,因此可以考虑是否需要导入。

  2. PIL库
    PIL(Python Imaging Library)是Python的图像处理标准库。由于PIL已停止更新,通常使用其分支Pillow,它兼容PIL并提供了更多功能。

Image.open(file):打开并识别图像文件。
Image.save(fp, format=None):保存图像到文件,format用于指定保存的格式。

三、代码实现

import os
from PIL import Image

def convert_images_format(input_folder, output_folder, src_format='.jpg', dst_format='.png'):
    """
    将输入文件夹中的所有指定格式图片转换为目标格式,并保存到输出文件夹。

    :param input_folder: 源文件夹路径
    :param output_folder: 输出文件夹路径
    :param src_format: 源文件格式(例如:'.jpg')
    :param dst_format: 目标文件格式(例如:'.png')
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"输出文件夹 {output_folder} 已创建。")

    # 遍历输入文件夹及其子文件夹
    for root, dirs, files in os.walk(input_folder):
        for filename in files:
            if filename.lower().endswith(src_format.lower()):
                src_path = os.path.join(root, filename)
                # 获取相对路径
                relative_path = os.path.relpath(root, input_folder)
                dst_dir = os.path.join(output_folder, relative_path)
                if not os.path.exists(dst_dir):
                    os.makedirs(dst_dir)
                # 构建输出文件路径
                base_name = os.path.splitext(filename)[0]
                dst_path = os.path.join(dst_dir, base_name + dst_format)
                try:
                    with Image.open(src_path) as img:
                        img.save(dst_path)
                    print(f"已转换:{src_path} --> {dst_path}")
                except Exception as e:
                    print(f"转换文件 {src_path} 时出错:{e}")

if __name__ == "__main__":
    input_folder = r'D:\Toolkit\Project\image\traininput'    # 源文件夹
    output_folder = r'D:\Toolkit\Project\image\trainoutput'  # 输出文件夹
    convert_images_format(input_folder, output_folder)

代码解释
函数定义:convert_images_format函数用于将指定格式的图片批量转换为目标格式。

创建输出文件夹:使用os.makedirs确保输出文件夹存在。

遍历输入文件夹:使用os.walk遍历输入文件夹中的所有文件和子目录。

文件格式检查:使用str.endswith方法,忽略大小写,筛选出源格式的图片文件。

保持目录结构:使用os.path.relpath获取文件的相对路径,以在输出文件夹中保持与输入文件夹相同的目录结构。

构建输出路径:使用os.path.splitext分离文件名和扩展名,然后组合成新的输出文件路径。

图片格式转换:使用Image.open打开源图片,img.save保存为目标格式。

异常处理:在转换过程中捕获可能的异常,防止程序因错误而终止,并输出错误信息。

四、注意事项

确保Pillow库已安装:如果尚未安装,请使用以下命令安装:

pip install Pillow

处理异常情况:在转换过程中,可能会遇到损坏的图片文件或不支持的格式,需要做好异常处理。

考虑内存占用:对于超大图片,可能会占用较多内存,可考虑进行优化。

保留元数据:如果需要保留图片的EXIF信息,需在保存时进行处理。

五、总结

通过本文的介绍,我们学习了如何使用Python的os、sys和PIL库,实现批量图片格式转换。我们从基本的代码入手,逐步优化,添加了目录结构保持、命令行参数支持、进度条显示等功能,使脚本更加健壮和实用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值