Python照片压缩教程:如何轻松减小图片大小

news2024/11/26 18:43:12

介绍

在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用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官方文档。

希望本教程对你有所帮助!

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分析】统计量

1. 均值、众数描述数据的集中趋势度量,四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度,协方差是度量相关性。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为: 从直观上来看&…

开源vue动态表单组件

一、项目简介 vueelement的动态表单组件,拖拽组件到面板即可实现一个表单 二、实现功能 支持拖拽 支持输入框 支持文本框 支持数字输入框 支持下拉选择器 支持多选框 支持日期控件 支持开关 支持动态表格 支持上传图片 支持上传文件 支持标签 支持ht…

无涯教程-Python机器学习 - Semi-supervised Learning函数

Python机器学习 中的 Semi - 无涯教程网无涯教程网提供https://www.learnfk.com/python-machine-learning/machine-learning-with-python-semi-supervised-learning.html

图像翻拍检测——反射分量分离的特征融合

随着计算机技术的迅速发展,需要建立人与信息一一对应的安保认证技术,通过建立完整的映射网络体系,从而确保每个人的人身、财产、隐私等的安全.与指纹、基因等人体生物特征识别系统相比,人脸识别系统更加友好,不需要人的…

【C语言】位操作符的一些题目与技巧

初学者在学完位操作符之后,总是不能很好的掌握,因此这篇文章旨在巩固对位操作符的理解与使用。 有的题目可能会比较难以接受,但是看完一定会有收获 目录 位操作符:一些题目:不创建临时变量交换整数整数转换二进制中1的…

【校招VIP】产品设计分析之思维整体性

考点介绍: 对于产品分析设计时需要全面的分析用户需求,而产品思维方式的核心是“以问题为核心”,即先多花时间搞清楚要解决的问题究竟是什么,要深入、全面的思考。 『产品设计分析之思维整体性』相关题目及解析内容可点击文章末尾…

揭秘偏向锁的升级

今天开始,我会和大家一起深入学习synchronized的原理,原理部分会涉及到两篇: 偏向锁升级到轻量级锁的过程轻量级锁升级到重量级锁的过程 今天我们先来学习偏向锁升级到轻量级锁的过程。因为涉及到大量HotSpot源码,会有单独的一篇…

从钉钉到金蝶云星空通过接口配置打通数据

从钉钉到金蝶云星空通过接口配置打通数据 对接系统钉钉 钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能…

python | 将pdf文件转换为图片,这一招就够了

一、背景 部分情况下,需要将 PDF 页面转换为图片,例如 PNG 或 JPEG 格式。 python 的开源库 pdfplumber,提供了将 pdf 文件转换为图片的方法。 如果之前还没有安装和使用过pdfplumber库,pdfplumber的安装及基础使用,可…

【React学习】—SetState的使用(九)

【React学习】—SetState的使用(九) state的简写方式 state属性总结

PCD格式点云文件结构及在线查看工具

本文档描述了 PCD(点云数据)文件格式及其在点云库(PCL)中的使用方式。可以使用NSDT 3DConvert 在线预览查看PCD格式的点云数据文件。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、为何定义新的点云数据文件格式&#…

【问题总结+备忘录】上传一个shp文件能够读取其中的空间矢量字段,代码+采坑总结

需求描述 要求上传一个shp文件能够读取其中的空间矢量字段。 简单分析 SHP上传格式应该有两种(zip格式和.shp的格式文件内部可能存在多个空间矢量,结果以列表形式返回文件不大,使用MultipartFile上传上传即可结合geo-tools读取空间字段&am…

【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 vector 1. 前言2. 熟悉vector的接口函数2.1 vec…

无涯教程-Python机器学习 - Reinforcement Learning函数

这些方法不同于以前研究的方法,也很少使用。在这种学习算法中,我们需要在一段时间内训练一个代理,以便它可以与特定环境交互。代理将遵循一系列与环境进行交互的策略,然后在观察环境之后,它将针对环境的当前状态采取措施。以下是强化学习方法的主要步骤。 第1步-首先,我们需要准…

金鸣表格文字识别软件,让你的图片瞬间变成excel

来百度APP畅享高清图片 首先,让我们打开金鸣表格文字识别软件! 然后点击那个“添加文件”的按钮,在弹出的窗口中选择你想要识别的图片,再点击“打开”,就可以把图片添加到待识别的列表中了。 接下来,你只需…

领星ERP和金蝶云星空接口打通对接实战

领星ERP和金蝶云星空接口打通对接实战 对接系统:领星ERP 深圳市领星网络科技有限公司创立于2017年,致力于通过SaaSERP产品为跨境电商行业创造价值,让跨境生意更简单。公司总部位于深圳,在广州、杭州、厦门等设有服务中心。领星现已…

[计算机入门] 账户管理

3.4 账户管理 用户账户是计算机操作系统中用于标识和管理用户身份的概念。 每个用户都拥有一个唯一的用户账户,该账户包含用户的登录名、密码和其他与用户身份相关的信息。 用户账户通常用于验证用户身份,并授权对系统资源的访问权限。在多用户操作系统…

SSL证书申请

DV SSL证书申请需要多久? DV SSL证书无需验证所有者资质资料,审核流程相对简单,因此可快速签发。但部分域名信息可能会触发不同等级的安全审查机制,必要时需要人工介入进行审查签发,因此,SSL证书签发时间可…

【OpenCV • c++】图像对比度调整 | 图像亮度调整

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

GIS全国技能大赛试题及解题过程

1、提供数据列表如下: 2、试题要求如下: 3、解题步骤如下: (1.1)导入土地利用数据,如下: (1.2)导入土地采集表格,然后右键选择显示XY数据,如下&am…