Python照片压缩教程详解
介绍
在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用Python来实现图像压缩呢?
在本教程中,我们将介绍一个强大的Python图像处理库——PIL(Python Imaging Library),它可以让我们对图像做很多事情,例如压缩图像。我们将通过一些例子或数据讲解PIL库具体的使用方法和api用途。本教程面向的是新手程序员,所以我们会尽量简单明了地解释每一步。
安装PIL库

要使用PIL库,我们首先需要安装它。有两种方法可以安装PIL库:
-
方法一:使用pip命令,在终端或命令行中输入以下代码:
pip install Pillow
-
方法二:从官网下载Pillow源码包,解压后,在终端或命令行中进入源码目录,输入以下代码:
python setup.py install
注意:Pillow是PIL库的一个分支,它是更加活跃和完善的版本,所以我们推荐使用Pillow而不是PIL。
Pillow对python的版本有一定要求,详见下图:

安装完成后,我们可以在Python中导入PIL库,检查是否成功:
from PIL import Image
print(Image.__version__)
如果输出了Pillow的版本号,例如8.4.0,那么说明安装成功了。
打开和保存图像
要对图像进行压缩,我们首先需要打开图像文件,并保存为一个Image对象。Image对象是PIL库中最基本的类,它表示一个图像,并提供了很多属性和方法来操作图像。
打开图像文件的方法很简单,只需要调用Image类的open方法,传入文件名或文件路径即可:
img = Image.open("test.jpg")
如果文件不存在或格式不支持,会抛出异常。所以我们可以用try-except语句来捕获异常,并打印错误信息:
try:img = Image.open("test.jpg")
except IOError as e:print(e)
保存图像文件也很简单,只需要调用Image对象的save方法,传入文件名或文件路径即可:
img.save("new.jpg")

如果要指定保存的格式,可以传入format参数,例如:
img.save("new.png", format="PNG")

如果要指定保存的质量,可以传入quality参数,取值范围是1-95,默认是75。质量越高,文件越大,压缩效果越差;质量越低,文件越小,压缩效果越好。例如:
img.save("new.jpg", quality=50)
获取和修改图像信息
在对图像进行压缩之前,我们可能需要获取一些图像的基本信息,例如大小、格式、模式等。这些信息可以通过Image对象的属性来获取:
-
size属性:返回一个元组,表示图像的宽度和高度(单位是像素),例如(800, 600)。
-
format属性:返回一个字符串,表示图像的格式,例如"JPEG"。
-
mode属性:返回一个字符串,表示图像的模式,例如"RGB"。
例如:
print(img.size) # (800, 600)
print(img.format) # JPEG
print(img.mode) # RGB
如果要修改图像的大小、格式或模式,可以使用Image对象的方法:
-
resize方法:接受一个元组作为参数,表示新的宽度和高度(单位是像素),返回一个新的Image对象,例如:
new_img = img.resize((400, 300))
-
convert方法:接受一个字符串作为参数,表示新的模式,返回一个新的Image对象,例如:
#转化为为灰色图像
new_img = img.convert("L")
-
transpose方法:接受一个常量作为参数,表示旋转或翻转的方式,返回一个新的Image对象,例如:
#旋转90度
new_img = img.transpose(Image.ROTATE_90)
压缩图像
有了上面的知识,我们就可以开始压缩图像了。压缩图像的本质就是减少图像的大小和质量,从而减少图像占用的空间和带宽。我们可以通过以下几种方式来压缩图像:
-
改变图像的大小:通过resize方法,我们可以将图像的宽度和高度缩小一半或更多,这样就可以大幅度减少图像的像素数,从而减少图像的大小。例如:
img = Image.open("test.jpg")
print(img.size) # (640, 640)
new_img = img.resize((400, 300))
print(new_img.size) # (400, 300)
new_img.save("new.jpg")
-
改变图像的格式:通过save方法,我们可以将图像保存为不同的格式,不同的格式有不同的压缩算法和效率,一般来说,JPEG格式比PNG格式更适合压缩彩色图像,而PNG格式比JPEG格式更适合压缩黑白或透明图像。例如:
img = Image.open("test.png")
print(img.format) # PNG
img.save("new.jpg", format="JPEG")
print(new_img.format) # JPEG
-
改变图像的质量:通过save方法,我们可以指定quality参数,来控制图像保存时的质量。质量越低,压缩效果越好,但是也会损失一些细节和清晰度。我们可以根据需要,选择一个合适的质量值。例如:
img = Image.open("test.jpg")
img.save("new.jpg", quality=50)
-
改变图像的模式:通过convert方法,我们可以将图像转换为不同的模式。不同的模式有不同的颜色数和位深度,一般来说,颜色数越少,位深度越低,压缩效果越好。例如,RGB模式有16777216种颜色,每个像素占用24位;L模式只有256种颜色,每个像素占用8位;1模式只有2种颜色(黑白),每个像素占用1位。所以,我们可以将彩色图像转换为灰度或黑白图像来压缩。例如:
img = Image.open("test.jpg")
print(img.mode) # RGB
new_img = img.convert("L")
print(new_img.mode) # L
new_img.save("new.jpg")
总结
本教程介绍了如何使用PIL库来压缩图像。我们学习了如何安装、打开、保存、获取、修改和压缩图像。我们还了解了一些基本的概念和方法,例如大小、格式、模式、resize、convert等。通过这些知识和技能,我们可以轻松地对图像进行压缩,并提高编程效率和用户体验。
本教程只是PIL库功能的一小部分,PIL库还有很多其他的功能和方法,例如裁剪、旋转、滤镜、文字、水印等。如果你想了解更多,请参考PIL官方文档。
希望本教程对你有所帮助!
相关文章:
Python照片压缩教程详解
介绍 在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用Python来实现图像压缩呢&…...
软路由的负载均衡设置:优化网络性能和带宽利用率
在现代网络环境中,提升网络性能和最大化带宽利用率至关重要。通过合理配置软路由IP的负载均衡设置,可以有效地实现这一目标,并提高整体稳定性与效果。本文将详细介绍如何进行软路由IP的负载均衡设置,从而优化网络表现、增加带宽利…...
CH06_第一组重构(上)
提取函数(Extract Function |106) 曾用名:提炼函数(Extract Function) 反向重构:内联函数(115) 示例代码 function printOwing(invoice) {printBanner();let outstanding calcul…...
RHCSA-VMware Workstation Pro-Linux基础配置命令
1.代码命令 1.查看本机IP地址: ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1:<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>为虚拟机自身网卡 2.测试网络联通性: [f…...
YOLO-NAS详细教程-姿势估计实现
姿势估计是一项计算机视觉任务,涉及估计图像或视频中物体或人的位置和方向。它通常涉及识别特定的关键点或身体部位(例如关节),并确定它们的相对位置和方向。姿势估计有许多应用,包括机器人、增强现实、人机交互和运动分析。 自上而下和自下而上是姿态估计中两种常用的方法…...
【扩散模型 李宏毅B站教学以及基础代码运用】
李宏毅教学视频: Link1 B站DDPM公式推导以及代码实现: Link2 这个视频里面有论文里面的公式推导,并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念:Diffusion Model工作原理:影像生成模型本质上的共同目标B站…...
SpringBoot隐藏文件
1.设置 2.输入file Types 3.点击忽略文件或者文件夹 4.成功...
常见数据库介绍对比之SQL关系型数据库
1.关系型数据库介绍 关系型数据库是一种基于关系模型的数据库,它使用表格来组织和存储数据。下面是一些常见的关系型数据库: 1.1. MySQL MySQL是一种开源的关系型数据库管理系统(RDBMS),广泛用于Web应用程序和企业级…...
OLED透明屏模块:引领未来显示技术的突破
OLED透明屏模块作为一项引领未来显示技术的突破,以其独特的特点和卓越的画质在市场上引起了广泛关注。 根据行业报告,预计到2025年,OLED透明屏模块将占据智能手机市场的20%份额,并在汽车导航系统市场中占据30%以上份额。 那么&am…...
Python_操作记录
1、Pandas读取数据文件(以文本文件作为示例),sep表示间隔,headerNone表示无标题行 df pd.read_table("data/youcans3.dat", sep"\t", headerNone) 2、线性规划问题求解 1)问题定义,…...
常用激活函数整理
最近一边应付工作,一边在补足人工智能的一些基础知识,这个方向虽然新兴,但已是卷帙浩繁,有时不知从何入手,幸亏有个适合基础薄弱的人士学习的网站,每天学习一点,积跬步以至千里吧。有像我一样学…...
uniapp 地图跳转到第三方导航软件 直接打包成apk
// 判断是否存在导航软件judgeHasExistNavignation() {let navAppParam [{pname: com.baidu.BaiduMap,action: baidumap://}, // 百度{pname: com.autonavi.minimap,action: iosamap://}, // 高德{pname: com.tencent.map,action: tencentmap://}, // 腾讯];return navAppPara…...
CentOS 8 通过YUM方式升级最新内核
CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…...
java 版本企业招标投标管理系统源码+功能描述+tbms+及时准确+全程电子化
功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…...
Python爬虫数据存哪里|数据存储到文件的几种方式
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种: 文件:txt、csv、excel、json等,保存数据量小。 关系型数据库…...
软件测试/测试开发丨Web自动化 测试用例流程设计
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27173 一、测试用例通用结构回顾 1.1、现有测试用例存在的问题 可维护性差可读性差稳定性差 1.2、用例结构设计 测试用例的编排测试用例的项目结构 1…...
git撤销修改命令
要撤销Git中尚未提交的所有修改,可以使用以下几种方法: 1、使用git checkout命令丢弃工作目录的修改,重置工作目录中所有文件的修改。 git checkout . 2、使用git reset命令重置暂存区和工作目录, 重置暂存区和工作目录,回到最后一次提交后的状态。 …...
EOCR-AR电机保护器自动复位的启用条件说明
为适用不同的现场使用需求,施耐德韩国公司推出了带有自动复位功能的模拟型电动机保护器-EOCR-AR。EOCR-AR电机保护器具有过电流、缺相、堵转保护功能,还可根据实际需要设置自动复位时间。 EOCR-AR自动复位的设置方法 如上图,R-TIME旋钮是自动…...
Apache nginx解析漏洞复现
文章目录 空字节漏洞安装环境漏洞复现 背锅解析漏洞安装环境漏洞复现 空字节漏洞 安装环境 将nginx解压后放到c盘根目录下: 运行startup.bat启动环境: 在HTML文件夹下有它的主页文件: 漏洞复现 nginx在遇到后缀名有php的文件时,…...
.NET之后,再无大创新
回想起来,2001年发布的.NET已经是距离最近的一次软件开发技术的整体创新了,后续的新技术就没有在各个端都这么成功的了。.NET是Windows平台下软件开发技术的巨大变革。在此之前,有VB、C(MFC)、JSP,在此之后…...
学历作为硬实力:当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制
学历作为硬实力:当代中国权力结构中知识资本的制度化逻辑与社会地位再生产机制 作者:培风图南以星河揽胜 专栏链接:澄心观道 字数:约 14,200 字 | 阅读时长:约 52 分钟 引言:一个被广泛观察却少有深究的社会…...
BYD 高通8155 OTA项目 我写的一篇专利
草根不要在BYD写专利,我24年1月初开始撰写,24年6月份才提交到专利公司,被驳回是因为有对比文件公开了我的发明点,是重庆赛力斯 4月份公开的,部门内部流程审核极慢,集团IPR找各种理由能拖上你半年࿰…...
终极指南:如何快速完成语雀文档批量导出与迁移
终极指南:如何快速完成语雀文档批量导出与迁移 【免费下载链接】yuque-exporter export yuque to local markdown 项目地址: https://gitcode.com/gh_mirrors/yuq/yuque-exporter 在当今数字化创作时代,语雀文档批量导出已成为许多创作者和团队的…...
曾经我和大模型交流业务实现记录
第一次: 我有一组子组件11个,通过子组件的不同组合,可以组成表单,这些表单让不同的用户使用,表单组成公共的内容,让大部分用户使用,当然用户可以在这些表单的基础上修改一些默认值,变…...
新手福音:通过快马平台零代码基础理解qun329群聊应用开发
作为一个刚接触编程的新手,想要理解群聊应用开发确实容易一头雾水。最近我在尝试用InsCode(快马)平台搭建类似qun329的简单群聊网页时,发现整个过程比想象中简单很多。下面分享我的学习过程,希望能帮到同样零基础的朋友。 项目结构规划 首先明…...
AI报告文档审核助力本地化升级:IACheck如何支撑食品加工行业数据安全与质量协同发展
在食品加工行业不断强化质量控制与数据安全要求的背景之下,“本地部署”正逐渐成为企业数字化转型中的关键路径之一,尤其是在涉及检测数据与质量报告的场景中,数据不仅需要具备高度准确性,还必须满足合规与安全要求,因…...
别再只用SUM了!用Excel分析Kaggle数据集,我发现了这些销售秘密
别再只用SUM了!用Excel分析Kaggle数据集,我发现了这些销售秘密 作为一名常年与Excel打交道的业务分析师,我习惯了用SUM和VLOOKUP解决80%的问题。直到上个月,当我偶然下载了Kaggle上的牛油果销售数据集,才发现这个"…...
html-to-docx:让HTML转Word不再头疼的开源解决方案
html-to-docx:让HTML转Word不再头疼的开源解决方案 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 在数字化办公的浪潮中,文档格式转换已成为企业和个人的日常需求。据行业调研…...
论文AIGC全红99%怎么救?2026实测Gemini去痕术:3组指令集联合3大工具,稳稳拉回10%安全线
视角重构,打破“平铺直叙”的机械感 AI生成的最大特征是“正确但平庸的上帝视角”。要ai降ai,第一步不是改词,而是强行植入一个具有批判性的“人类观察者”视角,迫使模型重组叙事逻辑。 核心原理:通过引入“辩证法”…...
Omni-Vision Sanctuary 企业级部署架构设计:高可用与弹性伸缩
Omni-Vision Sanctuary 企业级部署架构设计:高可用与弹性伸缩 1. 企业级AI部署面临的挑战 当企业决定在生产环境中部署Omni-Vision Sanctuary这类AI服务时,通常会遇到几个关键挑战。首先是服务可用性问题,任何计划外停机都可能直接影响业务…...


