爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 21256|回复: 3

[源代码] 利用python制作gif动图

[复制链接]

新浪微博达人勋

发表于 2021-9-28 00:32:37 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 晋陵小生 于 2021-9-28 00:34 编辑

本文搬运自公众号:气象备忘录。分享编程语言和模式技巧,欢迎关注、点赞和转发~

                               
登录/注册后可看大图

原文链接:https://mp.weixin.qq.com/s/RRRLfH890IDfRURSc2qrTg

                               
登录/注册后可看大图

640.gif


气象上经常需要展示一些二维场的时间演变,ppt中如果仅罗列多个静态的二维平面图显得不够直观,可以利用imageio库,通过数行代码python将多张静态的二维平面图合成为一张GIF动图。
动图的制作可以分为三步:
  • 利用绘图软件(如NCL)绘制各个时刻的平面图
    这一步大家应该都没啥问题,可以参考下WRF后处理:图片美化中的小tips,绘制出来的平面图尽量简洁美观。
  • 将图片四周的空白切除
    切除图片空白主要用到了PIL库,具体参考1中的链接
  • 合成gif动图
    这里主要用到了imageio库


  1. import imageio
  2. def png2gif(filelist, name, duration=0.5):
  3.     # filelist为图片列表,存放图片路径
  4.     # name为输出GIF动图的名称
  5.     # duration表示切换间隔,默认0.5,可以根据需要调整
  6.     frames = []
  7.     for img in filelist:
  8.         frames.append(imageio.imread(img))
  9.     imageio.mimsave(name,frames,'GIF',duration=0.5)
复制代码


完整示例代码:
  1. import imageio
  2. import os, sys
  3. import glob
  4. from PIL import Image, ImageOps

  5. def png2gif(filelist, name, duration=0.5):
  6.     frames = []
  7.     for img in filelist:
  8.         crop_margin(img, img)
  9.         frames.append(imageio.imread(img))
  10.     imageio.mimsave(name,frames,'GIF',duration=0.5)   

  11. def crop_margin(img_fileobj, out, padding=(0, 0, 0, 0)):
  12.     image = Image.open(img_fileobj).convert('RGB')
  13.     ivt_image = ImageOps.invert(image)
  14.     bbox = ivt_image.getbbox()
  15.     left = bbox[0] - padding[0]
  16.     top = bbox[1] - padding[1]
  17.     right = bbox[2] + padding[2]
  18.     bottom = bbox[3] + padding[3]
  19.     cropped_image = image.crop([left, top, right, bottom])
  20.     cropped_image.save(out)
  21.     return

  22. path =r"C:\Users\xxxx\Desktop\vis"
  23. Toplist = glob.glob(os.path.join(path, "MSP2_GD-MO_WRF_CT_VIS*png" ))
  24. Toplist.sort()

  25. png2gif(Toplist, "wrfplt_vis.gif")
复制代码




评分

参与人数 1金钱 +2 收起 理由
SiriusJ + 2

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-9-28 07:52:16 | 显示全部楼层
学到了,多谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-9 19:26:06 | 显示全部楼层
nbnb学到了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-9 20:34:52 | 显示全部楼层
楼主棒,学习一个
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表