使用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 库来批量压缩图片,并将它们保存到指定的文件夹中。这对于需要优化网页加载速度或节省存储空间的项目特别有用。你可以根据实际需求调整代码,并集成到自己的项目中,以便高效地处理大量图片文件。

相关推荐

  1. 使用Python批量压缩图片

    2024-07-18 23:30:02       25 阅读
  2. 使用Python多线程批量压缩图片文件

    2024-07-18 23:30:02       30 阅读
  3. Python批量图像处理--图片重命名、图片旋转

    2024-07-18 23:30:02       62 阅读
  4. 批量图像分割评估脚本:使用Python和OpenCV

    2024-07-18 23:30:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 23:30:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 23:30:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 23:30:02       62 阅读
  4. Python语言-面向对象

    2024-07-18 23:30:02       72 阅读

热门阅读

  1. 快速log10函数 fast_log10

    2024-07-18 23:30:02       21 阅读
  2. Linux 日志管理与系统调优补充

    2024-07-18 23:30:02       25 阅读
  3. Qt Creator 项目Console 项目踩坑日记

    2024-07-18 23:30:02       22 阅读
  4. 信息系统项目管理师(高项)—学习笔记三

    2024-07-18 23:30:02       21 阅读
  5. linux修改文件夹下所有文件的权限(常用)

    2024-07-18 23:30:02       21 阅读
  6. c++类的继承详解

    2024-07-18 23:30:02       20 阅读
  7. 目标检测算法

    2024-07-18 23:30:02       23 阅读
  8. 有道云笔记 markdown 生成目录

    2024-07-18 23:30:02       25 阅读
  9. c/c++:多线程下调用exit接口函数的问题

    2024-07-18 23:30:02       21 阅读
  10. 国王(C++)

    2024-07-18 23:30:02       24 阅读