介绍
在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用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学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除