整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

python快速生成gif动图

gif图就是动态图,它的原理和视频有点类似,也是通过很多静态图片合成的.本篇文章主要介绍,如何利用Python快速合成gif图,主要利用Python的第三方库imageio

imageio介绍

imageio提供了很多方便读写图片的接口、包括读取网络图片、读取视频、生成gif图等。imageio提供许多的接口,

imageio API:https://imageio.readthedocs.io/en/latest/userapi.html

示例程序:https://imageio.readthedocs.io/en/latest/examples.html

imageio安装

pip install imageio

合成gif图

import imageio
def compose_gif():
 img_paths = ["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg"
 ,"img/5.jpg","img/6.jpg"]
 gif_images = []
 for path in img_paths:
 gif_images.append(imageio.imread(path))
 imageio.mimsave("test.gif",gif_images,fps=1)

通过fps参数可以控制合成gif图片播放图片的速度和视频的播放帧率是一样的,fps参数越大播放的速率越大,fps越小播放的速度越慢.

读取特殊url图片

  • 读取imageio的示例图片
import imageio
import matplotlib.pyplot as plt
def read_special_url_image():
 img = imageio.imread("imageio:chelsea.png")
 plt.imshow(img)
 plt.show()
  • 读取url的网络图片
 url = 'http://upload.wikimedia.org/wikipedia/
 commons/d/de/Wikipedia_Logo_1.0.png'
 img = imageio.imread(url)

在使用url读取图片的时候可能会报seek的错误,这时候可以改成下面的形式

 url = "https://timgsa.baidu.com/timg?image&quality=80&size=
 b9999_10000&sec=1545324012100&di=77a4ba3d60cdfc60
 d161bd6ed97c2319&imgtype=0&src=http%3A%2F%2Fwww.hxzyt
 j.com%2Fthemes%2Ftheme_3%2Fpc%2Fimages%2Fpython%2Fimg_01.jpg"

 img = imageio.imread(imageio.core.urlopen(url).read(), '.jpg')

截图和读取粘贴板的图片

 #截屏
 img = imageio.imread("<screen>")
 #读取粘贴板的图片
 img = imageio.imread("<clipboard>")

读取视频

def get_video_per_frame():
 reader = imageio.get_reader("test.mp4")
 for i,im in enumerate(reader):
 print("Mean of frame %i is %1.1f"%(i,im.mean()))

在使用imageio读取视频的时候可能会报上面的错误,提示需要安装ffmpeg,可以根据提示进行安装即可.除此之外,imageio还提供了许多方便的接口,有兴趣的可以去了解一下.

了参加最近的StackExchange的“time”主题比赛,我制作了一个Gif来展示StackOverflow网站从2008年 到今天的发展历程:

这里是一张GIF图片,可以点击阅读原文查看。图片太大,无法插入公众号文章。

第一步是为Internet Archive找到一个合适的API。它支持Memento,这是2013年RFC 7089中定义的基于http的协议。使用memento_client包装器,我们可以使用以下Python代码得到网站最接近给定日期的快照:

不要忘记安装memento_client库哦:

pip install memento_client

请注意,此代码会给我们一个最接近的快照,所以不可能确切地是两周以前的。

通过使用一个持续增加的时间增量,我们可以循环此段代码来获取不同 时间的快照。但我们不只是想获取URL。我们还想对每一个网页都做一个截图。

以编程方式获取网页截图的最简单方法可能是使用Selenium。我用Chrome作为驱动程序;你可以从ChromeDriver网站下载,也可以在使用Homebrew包管理器的Mac电脑上运行以下命令:

brew install bfontaine /utils/ chromedriver

我们还需要为Python安装Selenium:

pip install selenium

代码很短:

如果你运行上面的代码,你会看到一个Chrome窗口自动打开,并自动去访问URL,当页面全部加载后自动关闭。然后你就获得了一个该页面的截图,文件名是 stackoverflow_20181119211854.png!然而,很快你就会注意到这个截图中网站的最上面有Wayback Machine(一款网页备份工具)的页眉。

这在手动浏览快照时非常方便,但在从Python访问快照时就不那么方便了。

幸运的是,我们可以通过稍微修改URL来获得一个无页眉的URL:我们可以将 id _ 添加到日期的末尾,以便获得与机器爬取时完全相同的页面。当然,这意味着它会链接到可能不再存在的CSS和JS文件。通过用im_替代id_,我们也可以得到一个链接到经过稍微修改的存档页面的URL,用它来替换原始的存档页面。

带有页眉和重写链接的页面:

https://web.archive.org/web/20181119211854/...

原始页面,跟爬取的页面一样:

https://web.archive.org/web/20181119211854id_/...

重写链接后的原始页面:

https://web.archive.org/web/20181119211854im_/...

使用修改后的URL重新运行代码会得到正确的截图:

将这两段代码组合起来,我们可以在不同的时间间隔对URL进行截图。你可能想在截图完成时检查图片,并删除不一致的图片。例如,谷歌主页的存档快照并不是一直都是同一种语言。

一旦得到了所有的图片,我们就可以使用Imagemagick生成一个gif:

convert –delay 50 –loop 1 *.jpg stackoverflow.gif

我使用了以下参数:

  • –delay 50:每0.5s改变画面。数字代表每1/100秒。

  • –loop 1:对所有画面只循环一次。默认情况下是进行无限循环,但在这里没有意义。

你可能想要使用-delay参数进行播放,这取决于你有多少图片以及网站改变的频率。

我也做了一个谷歌版本(约10MB)的gif,每秒5帧,并使用了 –delay 20参数。我使用了与StackOverflow gif相同的延迟时间::每个截图之间至少间隔5周。通过查看每张图片的底部,你可以看到每个截图来自哪一年。

2018年 12月3日-#experiments,#imagemagick,#python,#selenium

——Baptiste Fontaine"s Blog

英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE2/record-website-change-gif.pdf
译者:浣熊君( ・᷄৺・᷅ )

在人们经常会看到很多由视频片段制作而来的动图,这种截取视频片段内容来制作成GIF表情包的方法其实并不困难,接下来我将推荐三种方法来快速完成视频到GIF动图的转换。简单几步就可以轻松搞定。

一、万兴优转桌面端

1、启动万兴优转然后选择工具箱板块,单击GIF动图制作功能

2、在新的弹窗中选择视频转GIF动图功能,然后点击添加图标将本地的视频文件导入至产品当中。

3、导入视频后你可以直接拖动进度条两端来控制转换的视频片段,另一种方法是直接设定开始和结束的时间。然后自定义输出的大小和帧率,直接点击创建GIF动图即可。

二、万兴优转在线端

1、在浏览器中登录https://www.media.io/zh/gif-maker.html,进入视频转GIF功能页面,点击选择文件按钮将视频内容导入至工具中。

2、接下来选择GIF动图的开始时间和结束时间,你还可以控制输出的大小和帧速率,最后点击创建GIF按钮即可完成工作。

三、美图秀秀
如果你只是将多张图片进行合并来做成动图的效果,那你可以使用美图秀秀的图片合并功能,只需要依次放入多张图片即可,效果就会是按顺序来播放图片。


当然这种图片拼接的效果有限,更多时候我们会需要选择将视频的片段截取为GIF动图,所以万兴优转还是你的最优选择。另外有个好消息分享给大家,万兴优转双十二优惠活动已经于12月1日上线了,这次活动还新增了月度增值服务包的限时特卖,有需要的小伙伴可以前往官网了解。