likes
comments
collection
share

因为用Python实现GIF图的倒放,我决定做一件小事

作者站长头像
站长
· 阅读数 4

如何通过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')是读入一张图片。

假设是下面这张图片。

因为用Python实现GIF图的倒放,我决定做一件小事

通过ImageSequence.Iterator(input_img)可以获取这个动图所有的帧。

如果,调用保存每一帧img_file.save('frame_x.png') 看结果的话,最终是这样的。

因为用Python实现GIF图的倒放,我决定做一件小事

然后,通过循环每一帧,把他们存储到数组img_sequences中。接着调用img_sequences.reverse()对保存的正序数组进行顺序颠倒。也就是把[1,2,3,4]变成[4,3,2,1]

最后,把每一帧合成一个文件。

最终输出如下结果:

因为用Python实现GIF图的倒放,我决定做一件小事

是不是很丝滑。

小王说,太快看不仔细,我想调慢速度可以吗?

img_sequences[0].save(……)里面加一个间隔参数duration = 1000,也就是间隔1秒。

保存再看,效果很明显,1秒蹦一张。

因为用Python实现GIF图的倒放,我决定做一件小事

那么,不加时间它是多久的间隔呢?

看保存的时候是img_sequences[0]调用的save方法,说明是从原图中切了一个样本,样本带有原图的基因。那就是和原来的速度一个样

由此也可以看出,一定前提下,一个100秒的动图,和一个10秒的动图,所占的空间是一样的,只是时间间隔的描述不一样

因为用Python实现GIF图的倒放,我决定做一件小事

换句话说,不是动图的时间越长,文件就越大,实际是和有多少帧,每一帧图片的大小有关。

好了,朋友们可以去尝试一下了。如果帮大家解决了问题,我很荣幸。

下面要说的,就是我的问题了。


我有什么问题?为什么这么写?

你自己的博客,本可以想怎么写就怎么写。但是,如果要想融入到一个评价体系的话,就不能说太多的私话。毕竟,对于陌生人来说,大家都很忙。如果,非要说的话,就把它们放到后面……

其实,很小的一件事。我有点生气了。我生气,对其他人没有任何影响,只影响自己的健康。

网上看到一个gif动态图,就是这个特技自行车。

因为用Python实现GIF图的倒放,我决定做一件小事

因为经常写文,我就想收藏一下,作为素材。当再描述一段炫酷的代码时,把这个图片放出来,可以起到引导情绪的作用

但是,这个图有点夸张,很明显它是倒放的。过于夸张,就显得太假。由此,会影响读者,认为我刚刚说的也不靠谱。

如果能给它掰正就好了。

这很简单,我用PhotoShop做过gif动态图。其实就是多个图片排队播放而已。

因为用Python实现GIF图的倒放,我决定做一件小事

倒放,就是换一个方向。于是,我打开百度,想搜一个在线工具。用工具把这个动图倒放并生成文件。

搜到很多网站,选了一个进入。

上传图片,设置一些参数,点击生成按钮,想看看效果。结果,网站提示我关注微信公众号

这个操作很常规,人家需要知道是谁用了多少次。关注公众号,绑定手机号,成为用户。

现在可以点击生成了。嗯,还不错,再调一调参数,再看看效果,很满意。

现在终于满意了,点击下载,我要保存为文件。这时,网站弹出来一个购买界面,先购买198元会员,才能下载无水印版的文件。

点击退出,网站又弹出,如果花9.8元购买月会员,也能下载。实在不行,1.8元下载这一次也可以聊聊。还提示我:创作了那么久,忍心放弃吗?

我有点后悔了,后悔没有直接关闭浏览器。

我认为,并不是我习惯了免费、白拿,而是遭到了戏耍。

为什么,为什么一开始不说,一开始不说不能免费使用。

用户加工完素材,肯定是要下载的。不下载,难道搬着电脑到处走吗?

当然,我知道这是套路。而且,这种套路太多了。裁剪证件照、PDF转化个word,甚至压缩个图片、修改个文件的创建日期,他们都这么搞。尽管有些功能,对程序员来说,就是几行代码的事情。

他们也需要活着!服务器、开发者、带宽,都需要资金维持。这种模式是“先尝后买”。俗话说:先尝后买,知道好歹。

人家没毛病。上面我也说了,我是自己生气。

因为,我是这么一种人:

一个工具,我从头到尾用完了,它非常好地解决了我的问题。或者,虽然没有解决,但是人家做得很周到,只是我的需求太特殊(业内普遍没有类似解决方案)。那我会主动找他,给他报酬,以示感谢。或者,他提前跟我说,你可以试试效果,但是最终用的话,是要收费的。

上面的情况,我都认可。唯独,啥也不说,一层关注,一层注册,一层验证码,一层会员,最后拿钱。我受不了。

因此啊,我决定做一件小事。做一件小事。一件小事。

我要开发一个工具类便民网站,把那些几行代码能做到的功能,全都怼上去。免费提供所有人使用,在成品交付的页面,添加收款码。

我相信,我这类人还是存在的。借此机会也验证一下。

如果收着钱,算是赚了。收不到钱,算是投资个了教训。

转载自:https://juejin.cn/post/7174404816829939748
评论
请登录