利用python批量压缩图教程:如何轻松减小图片大小

2023-12-14 05:01:29

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

文章来源:https://blog.csdn.net/wg2627/article/details/134984855
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。