如何通过python
实现gif
动图的倒放呢?其实很简单,代码如下:
# 导入处理图片的库
from PIL import Image, ImageSequence
# 读入gif文件
input_img = Image.open('input.gif')
# 获取gif的每一帧图片
gif_imgs = ImageSequence.Iterator(input_img)
# 存放gif的每一帧图片的文件
img_sequences = []
# 将每一帧图片集中保存到img_sequences,此时是在内存中
for index,img_file in enumerate(gif_imgs):
img_sequences.append(img_file.copy())
# 如果你想保存每一帧并导出成文件的话
# img_file.save('frame_'+str(index+1)+'.png')
# 将保存的文件的数组,次序反转
img_sequences.reverse()
# 保存倒放后的图片数组,合成一个文件
img_sequences[0].save('out.gif',save_all=True,append_images=img_sequences[1:])
gif
动图,其实就是多个图片依次播放。
我们稍微分析一下上面的代码。
Image.open('input.gif')
是读入一张图片。
假设是下面这张图片。
通过ImageSequence.Iterator(input_img)
可以获取这个动图所有的帧。
如果,调用保存每一帧img_file.save('frame_x.png')
看结果的话,最终是这样的。
然后,通过循环每一帧,把他们存储到数组img_sequences
中。接着调用img_sequences.reverse()
对保存的正序数组进行顺序颠倒。也就是把[1,2,3,4]
变成[4,3,2,1]
。
最后,把每一帧合成一个文件。
最终输出如下结果:
是不是很丝滑。
小王说,太快看不仔细,我想调慢速度可以吗?
img_sequences[0].save(……)
里面加一个间隔参数duration = 1000
,也就是间隔1
秒。
保存再看,效果很明显,1
秒蹦一张。
那么,不加时间它是多久的间隔呢?
看保存的时候是img_sequences[0]
调用的save
方法,说明是从原图中切了一个样本,样本带有原图的基因。那就是和原来的速度一个样。
由此也可以看出,一定前提下,一个100
秒的动图,和一个10
秒的动图,所占的空间是一样的,只是时间间隔的描述不一样。
换句话说,不是动图的时间越长,文件就越大,实际是和有多少帧,每一帧图片的大小有关。
好了,朋友们可以去尝试一下了。如果帮大家解决了问题,我很荣幸。
下面要说的,就是我的问题了。
你有什么问题?
其实,很小的一件事。我有点生气了。我生气,对其他人没有任何影响,只影响自己的健康。
网上看到一个gif
动态图,就是这个特技自行车。
因为经常写文,我就想收藏一下,作为素材。当再描述一段炫酷的代码时,把这个图片放出来,可以起到引导情绪的作用。
但是,这个图有点夸张,很明显它是倒放的。过于夸张,就显得太假。由此,会影响读者,认为我刚刚说的也不靠谱。
如果能给它掰正就好了。
这很简单,我用PhotoShop
做过gif
动态图。其实就是多个图片排队播放而已。
倒放,就是换一个方向。于是,我打开百度,想搜一个在线工具。用工具把这个动图倒放并生成文件。
搜到很多网站,选了一个进入。
联系客服