使用Python批量压缩图片

当涉及到处理大量图片并确保它们符合特定大小要求时,Python 中的 PIL 库(现在称为 Pillow)提供了强大的工具。本文将详细介绍如何利用 Python 和 Pillow 库编写一个批量压缩图片的程序,以及如何将这些图片保存到指定目录中。

介绍

在许多应用程序中,特别是在网页开发和移动应用开发中,经常需要将图片压缩到较小的尺寸,以提高加载速度和节省带宽。本文将教你如何使用 Python 编写一个程序,自动压缩指定文件夹中的所有图片,并将它们保存到另一个目录中。

准备工作

确保你已经安装了 Python 环境,并且安装了 Pillow 库。Pillow 是 Python 中用于处理图片的库,它支持几乎所有主流的图片格式,并提供了丰富的图像处理功能。

pip install Pillow

编写代码

1. 导入必要的库
from PIL import Image
import os
2. 编写图片压缩函数

下面是一个函数 compress_image,用于压缩单个图片,并保存到指定路径。

def compress_image(input_image_path, output_image_path, target_size_kb, quality=85):
    try:
        with Image.open(input_image_path) as img:
            img.save(output_image_path, quality=quality)
        
        # 检查压缩后的文件大小
        output_size_kb = os.path.getsize(output_image_path) / 1024.0  # 转换为KB
        
        if output_size_kb < target_size_kb:
            print(f"Compressed image saved to {output_image_path}, size: {output_size_kb:.2f} KB")
            return True
        else:
            print(f"Image {input_image_path} could not be compressed to less than {target_size_kb} KB.")
            return False
        
    except Exception as e:
        print(f"Error compressing image {input_image_path}: {e}")
        return False

此函数打开指定路径的图片,按照设定的质量参数压缩图片,并将压缩后的图片保存到输出路径。它还会检查输出图片的大小,如果小于目标大小,就打印成功信息;否则打印失败信息。

3. 编写批量压缩函数

接下来编写一个函数 batch_compress_images,它将遍历输入文件夹中的所有图片,并调用 compress_image 函数进行压缩处理。

def batch_compress_images(input_folder, output_folder, target_size_kb, quality=85):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    total_success = 0
    total_images = 0
    
    for filename in os.listdir(input_folder):
        if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
            input_image_path = os.path.join(input_folder, filename)
            output_image_path = os.path.join(output_folder, filename)
            
            if compress_image(input_image_path, output_image_path, target_size_kb, quality):
                total_success += 1
            
            total_images += 1
    
    print(f"Batch compression completed. {total_success} out of {total_images} images successfully compressed.")

这个函数首先检查输出文件夹是否存在,如果不存在则创建。然后遍历输入文件夹中的每个文件,仅处理以 .jpg, .jpeg, .png 结尾的图片文件。对每个符合条件的文件,调用 compress_image 函数进行压缩,并统计成功压缩的图片数量。

4. 示例用法

在示例代码中,我们指定了输入图片文件夹路径、输出压缩后图片文件夹路径以及目标压缩大小(单位为KB),然后调用 batch_compress_images 函数进行批量压缩。

input_folder = 'input_images'  # 输入图片文件夹路径
output_folder = 'output_compressed'  # 输出压缩后图片文件夹路径
target_size_kb = 150  # 目标压缩大小,单位为KB

# 调用函数进行批量压缩
batch_compress_images(input_folder, output_folder, target_size_kb)

结论

通过这篇博客,你学习了如何使用 Python 和 Pillow 库来批量压缩图片,并将它们保存到指定的文件夹中。这对于需要优化网页加载速度或节省存储空间的项目特别有用。你可以根据实际需求调整代码,并集成到自己的项目中,以便高效地处理大量图片文件。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值