当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • js获取和设置url参数
  • 7月17日学习打卡,数组
  • Android12 OTA全包升级清除用户数据
  • 基于matlab的深度学习案例及基础知识专栏前言
  • 生成Elasticsearch xpack安全认证证书
  • 巧用 VScode 网页版 IDE 搭建个人笔记知识库!
  • notepad++中文出现异体汉字,怎么改正
  • Matlab学习笔记01 - 基本数据类型
  • 算法刷题笔记 字符串哈希(C++实现)
  • 【07】分布式事务解决方案
  • Spring Boot请求参数映射:@RequestBody、@RequestParam和@RequestPart的应用
  • 破解反爬虫策略 /_guard/auto.js(一) 原理
  • spring security新版本的爽点在哪里,DSL?
  • 【事件排查】网络问题排查H3C无线优化方案
  • Postcat使用全解析
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017届校招提前批面试回顾
  • angular2 简述
  • MySQL数据库运维之数据恢复
  • Objective-C 中关联引用的概念
  • Vue 重置组件到初始状态
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Webpack 4 学习01(基础配置)
  • 闭包--闭包之tab栏切换(四)
  • 飞驰在Mesos的涡轮引擎上
  • 前端js -- this指向总结。
  • 如何合理的规划jvm性能调优
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Spring Batch JSON 支持
  • 整理一些计算机基础知识!
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #Linux(权限管理)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $ git push -u origin master 推送到远程库出错
  • $forceUpdate()函数
  • (1)Nginx简介和安装教程
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (void) (_x == _y)的作用
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (自用)仿写程序
  • .NET Framework .NET Core与 .NET 的区别
  • .net 按比例显示图片的缩略图
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)