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

本文介绍了如何利用Python的PIL库实现GIF动态图的倒放效果。通过Image和ImageSequence模块,首先读取GIF,然后拆解每一帧并保存,接着反转帧的顺序,最后将反序的帧重新组合成新的倒放GIF。通过简单的代码,即可完成这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

703deb01418f38be88813fb78cdb927f.png

大家好,我是辰哥~

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

516e772c8f783f932ee630499ca31a1a.gif

(原图1)

6e51c979c84b6cfaa96ef0694f93b3df.gif

(倒放1)


71fe950ba4290a5eb73b411b662cf128.gif

(原图2)

63358a6c6de239e2f3de557ac561d0c6.gif

(倒放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:])

最后生成结果

4a9d9a81d25b412bc72951458adaac43.png

完整源码

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)。

欢迎扫码与我交流


朋友圈经常有点赞送书,发红包等活动

欢迎来围观
- EOF -
推荐阅读  点击标题可跳转1、Python 中有 3 个不可思议的返回功能
2、整理了25个Python文本处理案例,收藏!
3、这可能是你见过最全的网络爬虫工具库集合!
4、爱了!这18个 Python 高效编程技巧真香!

觉得本文对你有帮助?请分享给更多人
点赞和在看就是最大的支持❤️
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyc2016012170

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值