这次让我们一个用 Python 做一个小工具:将动态 GIF 图片倒序播放!
GIF(Graphics Interchange Format) 是一种可以用来呈现动画效果的图片格式,原理就是保存很多帧(Frame)静态图像,然后连续呈现。很多简短的视频也会被转换成动态 GIF 呈现,压缩画质和去除声音之后可以有效地减小文件大小。网络上不计其数的搞笑动图,几乎承载了网友大半的欢乐,但是也有人发现,将正常的动画倒序播放往往可以获得更搞笑的效果,Reddit 上甚至有一个专门的节点:/r/reversegif。
要做到这一点其实很简单,只要从原始图片中提取中间每一帧静态图像,然后将顺序颠倒之后重新生成一张 GIF 图片即可。Python 中专门用于处理图像的库是 PIL,在 PIL 基础上由 Alex Clark 等人开发了一个更友好的版本:Pillow。于是首先来安装(或升级)Pillow:
pip install --upgrade pillow -i http://pypi.douban.com/simple python -c "import PIL; print(PIL.VERSION,'\t',PIL.PILLOW_VERSION)" // 1.1.7 3.4.2 利用 Pillow 可以先读取图片文件并判断该图片是否为动态图片及其帧数: from PIL import Imagewith Image.open('ani.gif') as im: print(im.is_animated,im.n_frames)
新版本的 Pillow 提供了更多写入 GIF 的功能:
im.save(out,save_all=True,append_images=[im1,im2,...])
通过设定 save_all=True 参数和 append_images 可以一次性将多帧图像同时存入 GIF 图片,于是我们可以这样来生成倒序播放的图片:
from PIL import Image,ImageSequence with Image.open('ani.gif') as im: if im.is_animated: frames = [f.copy() for f in ImageSequence.Iterator(im)] frames.reverse() # 内置列表倒序方法 # 将倒序后的所有帧图像保存下来 frames[0].save('out.gif',append_images=frames[1:])
import random # frames.reverse() random.shuffle(frames)
效果如下:
以上所述是小编给大家介绍的用Python将动态gif图片倒放播放的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。