如何用Python 代码批量压缩500 张图片

发布时间:2021-12-02 17:38:35 作者:柒染
来源:亿速云 阅读:342

如何用Python 代码批量压缩500 张图片

在现代数字时代,图片已经成为我们日常生活和工作中不可或缺的一部分。无论是社交媒体、网站设计,还是文档处理,图片都扮演着重要的角色。然而,高分辨率的图片往往会占用大量的存储空间,并且在网络上传输时可能会导致加载速度变慢。因此,图片压缩成为了一项重要的技术,它可以在不显著降低图片质量的情况下,大幅减小图片的文件大小。

本文将详细介绍如何使用Python代码批量压缩500张图片。我们将使用Python中的Pillow库来实现这一功能。Pillow是Python Imaging Library(PIL)的一个分支,提供了丰富的图像处理功能。

1. 安装Pillow库

在开始之前,我们需要确保已经安装了Pillow库。如果还没有安装,可以使用以下命令进行安装:

pip install pillow

2. 导入必要的库

在编写代码之前,我们需要导入一些必要的库。除了Pillow库之外,我们还需要使用os库来处理文件路径。

from PIL import Image
import os

3. 定义图片压缩函数

接下来,我们需要定义一个函数来压缩单张图片。这个函数将接受图片的路径、输出路径以及压缩质量作为参数。

def compress_image(input_path, output_path, quality=85):
    """
    压缩图片并保存到指定路径
    :param input_path: 输入图片路径
    :param output_path: 输出图片路径
    :param quality: 压缩质量,范围是1-95,默认值为85
    """
    try:
        # 打开图片
        img = Image.open(input_path)
        # 保存压缩后的图片
        img.save(output_path, quality=quality)
        print(f"图片已压缩并保存到: {output_path}")
    except Exception as e:
        print(f"压缩图片时出错: {e}")

4. 批量压缩图片

现在,我们已经有了压缩单张图片的函数,接下来我们需要编写代码来批量处理500张图片。假设这些图片都存储在一个文件夹中,我们可以使用os库来遍历文件夹中的所有图片文件。

def batch_compress_images(input_folder, output_folder, quality=85):
    """
    批量压缩图片
    :param input_folder: 输入文件夹路径
    :param output_folder: 输出文件夹路径
    :param quality: 压缩质量,范围是1-95,默认值为85
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        # 构建完整的文件路径
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        # 只处理图片文件
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff')):
            compress_image(input_path, output_path, quality)
        else:
            print(f"跳过非图片文件: {filename}")

5. 使用示例

假设我们有一个名为images的文件夹,里面存放了500张需要压缩的图片。我们希望将这些图片压缩后保存到compressed_images文件夹中。我们可以使用以下代码来实现这一目标:

input_folder = 'images'
output_folder = 'compressed_images'
quality = 75  # 可以根据需要调整压缩质量

batch_compress_images(input_folder, output_folder, quality)

6. 进一步优化

在实际应用中,我们可能需要对图片进行更多的处理,例如调整图片大小、转换图片格式等。Pillow库提供了丰富的功能来满足这些需求。以下是一些常见的操作示例:

6.1 调整图片大小

def resize_image(input_path, output_path, size=(800, 600)):
    """
    调整图片大小并保存到指定路径
    :param input_path: 输入图片路径
    :param output_path: 输出图片路径
    :param size: 目标大小,格式为(宽度, 高度)
    """
    try:
        img = Image.open(input_path)
        img = img.resize(size, Image.ANTIALIAS)
        img.save(output_path)
        print(f"图片已调整大小并保存到: {output_path}")
    except Exception as e:
        print(f"调整图片大小时出错: {e}")

6.2 转换图片格式

def convert_image_format(input_path, output_path, format='JPEG'):
    """
    转换图片格式并保存到指定路径
    :param input_path: 输入图片路径
    :param output_path: 输出图片路径
    :param format: 目标格式,例如'JPEG', 'PNG'
    """
    try:
        img = Image.open(input_path)
        img.save(output_path, format=format)
        print(f"图片已转换格式并保存到: {output_path}")
    except Exception as e:
        print(f"转换图片格式时出错: {e}")

6.3 批量处理图片

我们可以将上述功能整合到一个函数中,以便在一次遍历中完成多种操作。

def batch_process_images(input_folder, output_folder, quality=85, size=None, format=None):
    """
    批量处理图片
    :param input_folder: 输入文件夹路径
    :param output_folder: 输出文件夹路径
    :param quality: 压缩质量,范围是1-95,默认值为85
    :param size: 目标大小,格式为(宽度, 高度),默认为None
    :param format: 目标格式,例如'JPEG', 'PNG',默认为None
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        # 构建完整的文件路径
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, filename)

        # 只处理图片文件
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff')):
            try:
                img = Image.open(input_path)
                # 调整大小
                if size:
                    img = img.resize(size, Image.ANTIALIAS)
                # 转换格式
                if format:
                    output_path = os.path.splitext(output_path)[0] + '.' + format.lower()
                # 保存图片
                img.save(output_path, quality=quality)
                print(f"图片已处理并保存到: {output_path}")
            except Exception as e:
                print(f"处理图片时出错: {e}")
        else:
            print(f"跳过非图片文件: {filename}")

7. 总结

通过本文的介绍,我们学习了如何使用Python代码批量压缩500张图片。我们使用了Pillow库来实现图片的压缩、调整大小和格式转换等功能。这些技术不仅可以应用于图片压缩,还可以扩展到其他图像处理任务中。

在实际应用中,我们可以根据具体需求对代码进行进一步的优化和扩展。例如,我们可以添加更多的错误处理机制,或者将代码封装成一个独立的工具类,以便在其他项目中复用。

希望本文对你有所帮助,祝你在Python图像处理的学习和实践中取得更多的成果!

推荐阅读:
  1. Python如何用5行代码实现批量抠图
  2. 如何使用python实现图片批量压缩程序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何使用Matplotlib创建饼图

下一篇:tk.Mybatis插入数据获取Id怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》