当涉及到处理大量图片并确保它们符合特定大小要求时,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 # 转换为KBif output_size_kb < target_size_kb:print(f"Compressed image saved to {output_image_path}, size: {output_size_kb:.2f} KB")return Trueelse:print(f"Image {input_image_path} could not be compressed to less than {target_size_kb} KB.")return Falseexcept 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 = 0total_images = 0for 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 += 1total_images += 1print(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 库来批量压缩图片,并将它们保存到指定的文件夹中。这对于需要优化网页加载速度或节省存储空间的项目特别有用。你可以根据实际需求调整代码,并集成到自己的项目中,以便高效地处理大量图片文件。