我们来看下,小屌丝提供的原图片的大小,10MB,
我们再来看一下,C站的上传图片限制:
因为C站的限制,单张最大上传文件为5MB
想象一下,如果C站不限制图片上传的大小,那是不是… C站得每隔一段时间就得扩容一次。
所以,为了照顾运维同学的身体,我们就来压缩自己的图片大小吧。
因为是要生成gif动图,所以,必不可少的模块:ImageIo。
小屌丝:这合着, 不管会不会,都要重新学习一次呗。
小鱼:知识就是在复习与学习之间,才能完全掌握的。
小屌丝:服。。
1、ImageIo定义:
引言官网的解释:ImageIo提供了一系列示例图像,可以使用类似于URI的方式来使用。
换句话说,即:ImageIo是一个处理图像的接口。
2、ImageIo组成部分
ImageIo分为三部分,如下:
看到这, 是不是对ImageIo有了初步的了解。
接下来, 我们就去体会ImageIo的强大功能喽。
由于ImageIo是第三方库,所以,在使用前,要安装。
老规矩,我们直接pip方式安装,即:
pip install imageio
然后就是等待着安装。
pip的安装方式很多,你可以,直接看这两篇:
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-02-15
# @Author : Carl_DJ
'''
实现功能
使用ImageIo 和PIL库,对gif动图进行压缩处理
'''
import imageio
from PIL import Image, ImageSequence
# 设置压缩尺寸,这里设置压缩尺寸为500
rp = 500
img_list = []
# 读取原gif动图
img = Image.open("./data/param-demo.gif")
# 对原动图进行压缩,并存入img_list
for i in ImageSequence.Iterator(img):
i = i.convert('RGB')
if max(i.size[0], i.size[1]) > rp:
i.thumbnail((rp, rp))
img_list.append(i)
# 计算帧的频率
durt = (img.info)['duration'] / 1000
# 读取img_list合成新的gif
imageio.mimsave('param-out.gif', img_list, duration=durt )
运行结果:
你看, 这压缩完成后, 就是2.7MB,这缩小的不是一点点。
接着,我展示下压缩后的动图,看看是不是无损展示。
小鱼:你看, 是不是非常完美。
小屌丝:唉, 鱼哥,你这动图,怎么似曾相似啊
小鱼:这说明,你又仔细的看我的博文了,这就《Python3,2分钟掌握Doscoart库,你也能成为艺术大师。》 这篇啊。
小屌丝:我去~~~ 我说的嘛。
看到这里, 今天的分享就差不多结束了。
同样,回顾下今天的内容,其实很简单的。
介绍了什么是ImageIo,已经ImageIo的组成部分,和代码实战。