matlab 保存动图 GIF

在Mathematica当中,有Export函数可以很方便地将你绘出的多张图片合成为一张gif动图,在Matlab当中有没有类似的函数呢?当然,没有用起来那么方便的。但是Matlab可以使用imwrite函数进行gif的复写叠加形成gif动图,这也是最为普遍的一种方法。

动机来源于很多时候,你想要向别人讲解或者展示某个函数的变化过程,或者要说明某个变化的物理过程(比如说流体),利用matlab的类型于以下框架的代码,可以很方便地在软件中将过程动态展示出来。

    figure(1);
    plot(pic(i));%pic(i)表示不同时间下的图像
    axis([xmin xmax ymin ymax]);
    drawnow;

问题的关键在于,很多时候我们并不只是想在Matlab中把图动态显示一下给自己看,而是需要将它保存为gif(为什么是gif呢?因为其小巧方便,容易嵌入到其他东西中),从而用以汇报说明,或者其他用途。 
之前很长一段时间,我嫌matlab保存gif要改动的代码比较多(Mathematica只要在Animate时,将Animate改成Export就直接出图了),都是利用gif动画录制工具(推荐灵者Gif录制),在matlab图在跑的时候,给它录成gif。 
后来,需要的从matlab中搞出来的gif越来越多了,深感录制方法的琐碎,便又想到了利用Matlab自身函数,将参数递变绘制的多张图,保存为gif动图。 
一个简洁而基本的框架如下:

clc
clear
pic_num = 1;
for ***************************
    plot(fig(i));
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);

    if pic_num == 1
    imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);

    else
    imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);

    end

    pic_num = pic_num + 1;

end

这里imwrite写入时,要保证原来已经有一个文件存在,才能用“append”参数,所以设置了一个pic_num,让一张图直接保存,后面用“append”。

举个例子结束吧:

clc
clear
pic_num = 1;
for epsilon = 0.01:-0.001:0.005
    t = 1;
    syms x;
    ur = -1;
    ul = 1;
    s = (ur + ul)/2;
    w = ur + 1/2*(ul - ur)*(1-tanh((ul-ur)*(x-s*t)/(4*epsilon)));
    figure(1);
    ezplot(w);
    axis([-0.05,0.05 -1.5 1.5])
    drawnow;
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);
    if pic_num == 1
        imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.2);
    else
        imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
    end
    pic_num = pic_num + 1;
end

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值