查看原文
其他

几行Python代码实现动图倒放,太好玩

IT服务圈儿 2023-02-06

The following article is from Python研究者 Author 李运辰

源丨经授权转自 Python研究者(ID:PythonYjz)

作者丨李运辰


开始分享今天的技术之前,先来看几个动图(gif)


(原图1)


(倒放1)




(原图2)


(倒放2)


上诉两个动图,可以通过几行Python代码就可以实现倒放效果。


导入库

from PIL import Image, ImageSequence


Image库用于读取(加载)图片

ImageSequence 用于将GIF拆解为图片(一帧一图)

# 加载本地动图
image = Image.open("cg.gif")
# GIF 动图拆分器
list = ImageSequence.Iterator(image)


拆分动图

imgs = []
# 拆分后的图片进行编号,从1开始
k = 1
# 遍历图片流的每一帧
for frame in list:
    # 拆分后的图片,保存到chenge文件夹下,图片命名为img_1.png、img_2.png、...
    frame.save("./chenge/img_%d.png" % k)
    imgs.append(frame.copy())
    k += 1


将拆解后的帧图进行反转(倒序排列),并保存成新的动图reverse_cg.gif

# 拆分图片流进行反序
imgs.reverse()
# 将反序后所有帧图保存下来,命名为reverse_cg.gif
imgs[0].save("reverse_cg.gif", save_all=True, append_images=imgs[1:])


最后生成结果




完整源码

from PIL import Image, ImageSequence
# 加载本地动图
image = Image.open("cg.gif")
# GIF 动图拆分器
list = ImageSequence.Iterator(image)

imgs = []
# 拆分后的图片进行编号,从1开始
k = 1
# 遍历图片流的每一帧
for frame in list:
    # 拆分后的图片,保存到chenge文件夹下,图片命名为img_1.png、img_2.png、...
    frame.save("./chenge/img_%d.png" % k)
    imgs.append(frame.copy())
    k += 1

# 拆分图片流进行反序
imgs.reverse()
# 将反序后所有帧图保存下来,命名为reverse_cg.gif
imgs[0].save("reverse_cg.gif", save_all=True, append_images=imgs[1:])


以上就是本文的动图倒放技术过程


原理:读取动图,将动图进行拆分(一帧一图),将拆分后的动图进行反转(实现倒放的关键),然后反转后的图片保存新动图(gif)。



1、继微博之后,抖音、今日头条、小红书宣布将显示账号IP属地

2、爆火的微信农场,已经快被网友玩坏了!

3、什么?函数类型重载还可以动态生成?

4、抢先看!Ubuntu 22.04诱人的新功能

5、如何在 40 亿个非负整数中找到所有未出现的数?

点分享

点点赞

点在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存