在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用Python来实现图像压缩呢?
平均一张图片的大小约23.4kb 总大小压缩到了1/10。明显减少服务器的空间和宽带压力。
使用PIL库 需要安装Pillow库 pip install Pillow
具体代码如下:
from PIL import Image
import os
def getfilenames(mulu): #获取文件夹目录下的多个文件名
filenames=[]
for filename in os.listdir(mulu):
filenames.append(filename)
return filenames
def yasuo(tupian): #图片压缩
try:
img=Image.open(tupian)
print(img.size[1])
宽=img.size[0] #图片宽度
高=img.size[1] #图片高度
if 宽 > 高: #判读图片竖图还是横图
print("横图")
newimg=img.convert("RGB")
newimg = newimg.resize((400, 300)) #如果是横图就按4:3压缩 可自己按需设计大小
else:
print("竖图")
newimg = img.convert("RGB")
newimg = newimg.resize((300, 400)) #如果是竖图就按3:4压缩
newimg.save(tupian) #保存并覆盖原来的图片
except IOError as e:
print(e)
if "__main__" == __name__:
mulv = r'D:\pycharm\pythonProject1\爬虫\2023-12-13' #指定图片目录
file_names = getfilenames(mulv)
for filename1 in file_names:
tupian = "D:/pycharm/pythonProject1/爬虫/2023-12-13/" + filename1 #构造图片地址
yasuo(tupian) #进行压缩
print('压缩成功')
小知识:
如果要指定保存的格式,可以传入format参数,例如:
img.save("new.png", format="PNG")
如果要指定保存的质量,可以传入quality参数,取值范围是1-95,默认是75。质量越高,文件越大,压缩效果越差;质量越低,文件越小,压缩效果越好。例如:
img.save("new.jpg", quality=50)
size属性:返回一个元组,表示图像的宽度和高度(单位是像素),例如(800, 600)。
format属性:返回一个字符串,表示图像的格式,例如"JPEG"。
mode属性:返回一个字符串,表示图像的模式,例如"RGB"。
print(img.size) # (800, 600)
print(img.format) # JPEG
print(img.mode) # RGB
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)
image = image.convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式
有九种不同模式:
1: 1位像素,黑白,每字节一个像素存储
L: 8位像素,黑白
P: 8位像素,使用调色板映射到任何其他模式
RGB: 3x8位像素,真彩色
RGBA: 4x8位像素,带透明度掩模的真彩色
CMYK: 4x8位像素,分色
YCbCr: 3x8位像素,彩色视频格式
I: 32位有符号整数像素
F: 32位浮点像素
博主使用的是image.convert(“RGB”) 图片体积小且有色彩