“最近在作公众号的时候,想添加一些gif动图,好让内容看起来更生动一些,但却遇到了这样的问题。
图片
“没错,微信公众号规定了上传的gif最高帧数不能超过300。
考虑到我后面内容中会用到很多gif图片,而且不少帧数超过300帧;
确定不可能一张一张地找出来设置帧数。
因而就想着能不能经过Python,实现一键压缩gif帧数的办法。
网上找了不少资料,没有令本身满意的,因此在这里着手写一个开发贴,
分享给那些须要对gif自动化降帧的朋友。微信
“咱们会用到Python最经常使用, 功能强大的PIL库来对图片进行处理; 同时,咱们会用到一个叫作imageio的第三方库,来对gif进行压缩。
import os import imageio from PIL import Image, ImageSequence
“这里会用到PIL里一个叫作ImageSequence的模块,主要用来逐帧展开gif,并返回成迭代器;网络
im = Image.open(source_file) index = 1 for frame in ImageSequence.all_frames(im): frame = frame.convert('RGB') frame.save(f"gif{index}.jpg", quality=100) index = index + 1
“因为要降帧,因此会跳过一些帧幅,变量n是用来计算跳帧频率的。 这里使用imageio这个库,对图片序列进行保存和压缩。
n = int(index / frame_limit) + 1 images = [] for i in range(1, index): if i % n == 0: images.append(imageio.imread(f'gif{i}.jpg')) imageio.mimsave(target_file, images, duration=0.1)
“在读取帧幅的时候,会将帧幅保存在本地的临时文件; 完成降帧后,这些临时的帧幅图片会经过下述代码批量删除。
for i in range(1, index): f = 'gif' + str(i) + '.jpg' if os.path.exists(f): os.remove(f)
“好了,我经过以上的代码对下图进行了降帧:
降帧前
降帧前
降帧后
降帧后app
“能够看到降帧后图片中的光标闪烁频率明显高于降帧前,实际帧数也从260多帧降到了100多帧。
降帧成功!
有须要的小伙伴,能够在老K玩代码公众号回复"降帧",获取源文件ide
“code