Python压缩图片大小

今天遇到一个问题,制作的网站因为图片尺寸比较大导致加载很慢,所以想通过压缩图片的方式来加快页面的加载速度(当然也可以选择cdn和oss的方式来加快页面加载速度)

话不多说,Python肯定是首选项嘛,那么PIL(Python Imaging Library)库肯定是要用到的,下面一起看下怎么操作吧

一、安装PIL库

pip install Pillow

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

二、检验是否安装成功

from PIL import Image
print(Image.__version__)

三、打开图片

img = Image.open("test.jpg")# 如果文件不存在或格式不支持,会抛出异常。所以我们可以用try-except语句来捕获异常,并打印错误信息
try:img = Image.open("test.jpg")
except IOError as e:print(e)

四、保存图片

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)
print(img.size) # (800, 600)# format属性:返回一个字符串,表示图像的格式,例如"JPEG"
print(img.format) # JPEG# mode属性:返回一个字符串,表示图像的模式,例如"RGB"
print(img.mode) # RGB

六、修改图片

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

# resize方法:接受一个元组作为参数,表示新的宽度和高度(单位是像素),返回一个新的Image对象
new_img = img.resize((400, 300))# convert方法:接受一个字符串作为参数,表示新的模式,返回一个新的Image对象
new_img = img.convert("L") #转化为为灰色图像# transpose方法:接受一个常量作为参数,表示旋转或翻转的方式,返回一个新的Image对象
new_img = img.transpose(Image.ROTATE_90) #旋转90度

七、压缩图片

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

1、改变图片大小resize

# 改变图像的大小:通过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")

2、该片图片格式format

改变图像的格式:通过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

3、改变图片质量quality

改变图像的质量:通过save方法,我们可以指定quality参数,来控制图像保存时的质量。质量越低,压缩效果越好,但是也会损失一些细节和清晰度。我们可以根据需要,选择一个合适的质量值

img = Image.open("test.jpg")
img.save("new.jpg", quality=50)

4、改变图片模式convert

改变图像的模式:通过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")

关于批量压缩图片可以看我之前的文章:https://blog.csdn.net/weixin_42019349/article/details/132689515希望对你有所帮助 __

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习核心技术与实践之计算机视觉篇

非书中全部内容,只是写了些自认为有收获的部分 计算机视觉背景 (1)视觉皮层的神经元是一列一列组织起来的,每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合,而不是鱼、老鼠、鲜花 (2&#xf…

【Linux】Linux 下基本指令 -- 详解

无论是什么命令,用于什么用途,在 Linux 中,命令有其通用的格式: command [-options] [parameter] command:命令本身。-options:[可选,非必填]命令的一些选项,可以通过选项控制命令的…

EBU7140 Security and Authentication(二)非对称加密;授权

B2 非对称加密介绍 前面的传统加密算法都是对称加密。就是加密解密用一个密钥。非对称加密就是用不同的密钥,加密复杂度更高。 Diffie-Hellman 密钥交换法 一种密钥交换方法。 common 是公共基础颜色,secret 是各自私有颜色,公共颜色和自己…

【产品设计】信息建设三驾马车:MES系统拆解

本篇文章,将从三个方面对MES系统进行拆解分析,并分析其特殊功能——文档管理。MES系统能实现多个生产信息的互联互通,提高生产效率。 MES系统主要实现生产业务系统管理。 ERP系统主要实现采购、销售、库存(进销存)、财…

算法基础之滑雪

滑雪 核心思想&#xff1a;记忆化搜索 状态表示&#xff1a; f[i][j] 表示所有从(i,j) 开始滑的路径的最大值 状态计算&#xff1a; 分成四个方向 f[i][j] max(f[i][j] , f[i][j1] 1) 且h[a][b] (下一个点) 必须严格小于 h[i][j] 才能滑过去 #include<iostream>#…

大数据背景下基于联邦学习的小微企业信用风险评估研究

摘要&#xff1a; 小微企业信用风险评估难是制约其融资和发展的一个主要障碍。基于大数据的小微企业信用风险评估依然面临着单机构数据片面、跨机构数据共享难、模型不稳定等诸多挑战。针对相关问题和挑战&#xff0c;本项目拟在多主体所有权数据隐私保护与安全共享的背景下&am…

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于斑点鬣狗优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

junit单元测试Mock

在平常工作&#xff0c;经常会用到单元测试&#xff0c;那么单元测试应该怎么写呢&#xff1f; 1&#xff1a;引入包&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><…

数据结构:基于数组的环形队列(循环队列)实现

1 前言 队列是一种先进先出的线性表&#xff0c;简称为FIFO。它只允许在队尾插入成员&#xff0c;在队头删除成员&#xff0c;就像现实生活中排队上车一样。 队列的实现可以通过链表或数组完成&#xff0c;一般来说都推荐使用链表来实现队列&#xff0c;使用数组实现队列时每次…

AI人工智能技术发现了拉斐尔名画背后的秘密:这幅画并非完全由大师本人完成

最近&#xff0c;一个先进的人工智能神经网络在拉斐尔的名画中发现了一个不寻常的地方&#xff1a;其中的一副面孔并非由拉斐尔本人绘制&#xff0c;而是出自其他艺术家之手。 详细文章网址链接&#xff1a;Deep transfer learning for visual analysis and attribution of pai…

07 HAL库ADC读取电压的值

引言&#xff1a; 本文使用adc读取接在SOC的ADC的通道上外设的模拟数据&#xff0c;本文的的实验对象是一个滑动变阻器&#xff0c; 像其它的ADC外设不如光电管&#xff0c; 火焰传感器&#xff0c; 等等一些里的adc设备的根据都是差不多的。 一、ADC的基本知识 ADC&#xff08…

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理