利用Python实现无损GIF动图的制作
先讲一讲整理的目标
1.挑选喜欢的照片用python制作GIF图
2.动图太大了,对它无损压缩
生成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动图的制作的文章就介绍到这了,更多相关Python制作无损GIF内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341