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


    640?wx_fmt=png&wxfrom=13&tp=wxpic


    介绍

    在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用Python来实现图像压缩呢?

    在本教程中,我们将介绍一个强大的Python图像处理库——PIL(Python Imaging Library),它可以让我们对图像做很多事情,例如压缩图像。我们将通过一些例子或数据讲解PIL库具体的使用方法和api用途。本教程面向的是新手程序员,所以我们会尽量简单明了地解释每一步。

    安装PIL库

    640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

    要使用PIL库,我们首先需要安装它。有两种方法可以安装PIL库:

    • 方法一:使用pip命令,在终端或命令行中输入以下代码:

    pip install Pillow
    
    • 方法二:从官网下载Pillow源码包,解压后,在终端或命令行中进入源码目录,输入以下代码:

    python setup.py install
    

    注意:Pillow是PIL库的一个分支,它是更加活跃和完善的版本,所以我们推荐使用Pillow而不是PIL。

    Pillow对python的版本有一定要求,详见下图:

    640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

    安装完成后,我们可以在Python中导入PIL库,检查是否成功:

    1. from PIL import Image
    2. print(Image.__version__)

    如果输出了Pillow的版本号,例如8.4.0,那么说明安装成功了。

    打开和保存图像

    要对图像进行压缩,我们首先需要打开图像文件,并保存为一个Image对象。Image对象是PIL库中最基本的类,它表示一个图像,并提供了很多属性和方法来操作图像。

    打开图像文件的方法很简单,只需要调用Image类的open方法,传入文件名或文件路径即可:

    img = Image.open("test.jpg")
    

    如果文件不存在或格式不支持,会抛出异常。所以我们可以用try-except语句来捕获异常,并打印错误信息:

    1. try:
    2.     img = Image.open("test.jpg")
    3. except IOError as e:
    4.     print(e)

    保存图像文件也很简单,只需要调用Image对象的save方法,传入文件名或文件路径即可:

    img.save("new.jpg")
    

    640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

    如果要指定保存的格式,可以传入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"。

    例如:

    1. print(img.size) # (800600)
    2. print(img.format) # JPEG
    3. print(img.mode) # RGB

    如果要修改图像的大小、格式或模式,可以使用Image对象的方法:

    • resize方法:接受一个元组作为参数,表示新的宽度和高度(单位是像素),返回一个新的Image对象,例如:

    new_img = img.resize((400300))
    
    • convert方法:接受一个字符串作为参数,表示新的模式,返回一个新的Image对象,例如:

    1. #转化为为灰色图像
    2. new_img = img.convert("L")

    • transpose方法:接受一个常量作为参数,表示旋转或翻转的方式,返回一个新的Image对象,例如:

    1. #旋转90
    2. new_img = img.transpose(Image.ROTATE_90)

    压缩图像

    有了上面的知识,我们就可以开始压缩图像了。压缩图像的本质就是减少图像的大小和质量,从而减少图像占用的空间和带宽。我们可以通过以下几种方式来压缩图像:

    • 改变图像的大小:通过resize方法,我们可以将图像的宽度和高度缩小一半或更多,这样就可以大幅度减少图像的像素数,从而减少图像的大小。例如:

    1. img = Image.open("test.jpg")
    2. print(img.size) # (640640)
    3. new_img = img.resize((400300))
    4. print(new_img.size) # (400300)
    5. new_img.save("new.jpg")

    • 改变图像的格式:通过save方法,我们可以将图像保存为不同的格式,不同的格式有不同的压缩算法和效率,一般来说,JPEG格式比PNG格式更适合压缩彩色图像,而PNG格式比JPEG格式更适合压缩黑白或透明图像。例如:

    1. img = Image.open("test.png")
    2. print(img.format# PNG
    3. img.save("new.jpg"format="JPEG")
    4. print(new_img.format# JPEG
    • 改变图像的质量:通过save方法,我们可以指定quality参数,来控制图像保存时的质量。质量越低,压缩效果越好,但是也会损失一些细节和清晰度。我们可以根据需要,选择一个合适的质量值。例如:

    1. img = Image.open("test.jpg")
    2. img.save("new.jpg", quality=50)
    • 改变图像的模式:通过convert方法,我们可以将图像转换为不同的模式。不同的模式有不同的颜色数和位深度,一般来说,颜色数越少,位深度越低,压缩效果越好。例如,RGB模式有16777216种颜色,每个像素占用24位;L模式只有256种颜色,每个像素占用8位;1模式只有2种颜色(黑白),每个像素占用1位。所以,我们可以将彩色图像转换为灰度或黑白图像来压缩。例如:

    1. img = Image.open("test.jpg")
    2. print(img.mode) # RGB
    3. new_img = img.convert("L")
    4. print(new_img.mode) # L
    5. new_img.save("new.jpg")

    总结

    本教程介绍了如何使用PIL库来压缩图像。我们学习了如何安装、打开、保存、获取、修改和压缩图像。我们还了解了一些基本的概念和方法,例如大小、格式、模式、resize、convert等。通过这些知识和技能,我们可以轻松地对图像进行压缩,并提高编程效率和用户体验。

    本教程只是PIL库功能的一小部分,PIL库还有很多其他的功能和方法,例如裁剪、旋转、滤镜、文字、水印等。如果你想了解更多,请参考PIL官方文档。

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

  • 相关阅读:
    Spring Security OAuth2基于JWT认证授权
    基于51单片机步进电机加减速正反转数码管显示( proteus仿真+程序+原理图+设计报告+讲解视频)
    【分析笔记】Linux 4.9 backlight 子系统分析
    你的小程序为什么还是不被用户看好?
    嵌入式基础
    Java【手撕滑动窗口】LeetCode 438. “字符串中所有异位词“, 图文详解思路分析 + 代码
    C#知识|基于实体类对象,返回实体集合封装介绍。
    芯片产业管理和营销指北(3)—— 赢得客户
    图扑数字孪生屋顶光伏,推进光伏建筑一体化监管
    4.Spring Boot
  • 原文地址:https://blog.csdn.net/Rocky006/article/details/133787973