怎么用Python实现无损GIF动图的制作

开发技术 作者:zzz 2024-05-08 11:30:01
今天小编给大家分享一下怎么用Python实现无损GIF动图的制作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家�...

今天小编给大家分享一下怎么用Python实现无损GIF动图的制作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

生成gif图

调用python库imageio可以轻松实现

读取静态图到列表中 ,作为 GIF 动图的每一帧

设置每一帧间隔时间duration,我设置为1.15秒

调用imageio库的函数imageio.mimsave即可

实现代码

import imageio

def create_gif(image_list, gif_name, duration=0.35):
    frames = []
    for image_name in image_list:
        frames.append(imageio.imread(image_name))
    imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
    return

def main():
    image_list = ['car/10.jpg','car/15.jpg','car/8.jpg',]
    gif_name = 'car/car.gif'
    duration = 1.15
    create_gif(image_list, gif_name, duration)

if __name__ == '__main__':
    main()

By the way

我原来制作GIF用的是软件ScreenToGif,它录制出来的动图真大,编辑有些卡顿,不用它了

无损压缩

前面的GIF动图是压缩后的,只有3M多,原大小接近50MB。

如果不压缩,小伙伴们需要浪费50M的流量下载。

资源是可贵的,先用收藏的网页压缩试下

压缩之后仍有20多M,质量有损失,且没有压缩比参数可选。

还是python好,有免费的模块,省去网上找这些要注册的资源

使用ImageIo 和PIL库,对gif动图进行压缩处理,先导入

import imageio
from PIL import Image, ImageSequence

设置压缩尺寸,这里设置压缩尺寸为1000

rp = 1000

50M压缩之后大小降到4M,如果设置为500,压缩完不到1M

接下来的代码如下

img_list = []

# 读取原gif动图
img = Image.open("car/car.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('car/car1.gif', img_list, duration=durt )

压缩完成后,就是3.51MB,这缩小的不是一点点,而且无损展示

以上就是“怎么用Python实现无损GIF动图的制作”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注捷杰建站行业资讯频道。

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_24995.html
python