1
引言
毕业答辩或者工作汇报,如果你的汇报PPT有几张动图,顿时会高逼格起来,视觉的冲击胜过千言万语。
有限元分析是按照求解时间顺序进行迭代,使用动图展示结果将会很直观观察到应力、应变、位移等演化过程。LS-Prepost软件可在后处理直接导出GIF格式的动图,非常方便。但是Abaqus软件却无法导出GIF格式的动图,对于经常使用Abaqus的人非常不友好,因此掌握将静图转变为GIF动图的方法将会省去很多事情。借助剪辑软件可将多帧图片合成一个GIF动图,但对总是想一劳永逸的我——毫不犹豫使用MATLAB进行程序控制。
2
对Abaqus后处理图片进行GIF制作
MATLAB制作GIF动图主要使用到两个函数命令:
1.rgb2ind/gray2ind() %将RGB或灰度图转换为索引图
2.imwrite()%写入GIF
对于预先保存好的图片,可使用下面这段通用代码,将每张图片读入,然后转换成索引图,最后使用imwrite函数合成GIF动图。
%将ABAQUS云图转变成GIF动图
clear,clc,close all
for i =1:NumImage
nameImage =[num2str(i),'.png'];%图片名称
img =imread(nameImage);
[Im,map]=rgb2ind(img,256);
%写gif
if i==1
imwrite(Im,map,'move.gif','DelayTime',1e-4,'LoopCount',Inf)%第一帧
else
imwrite(Im,map,'move.gif','WriteMode','append','DelayTime',1e-4)%其余帧
end
end
以Abaqus后处理为例,提取出若干张应力云图,依次命名为“1.png”,...,"10.png"共10张静态图片,运行上述代码便可获得如下GIF格式的云图。这里需要注意的是导出Abaqus云图的时候默认是将图片压缩到256,一定要取消压缩,否则MATLAB读入的图片数据是2维矩阵,而制作GIF需要3维图片数据矩阵。
3
函数式绘图过程GIF制作
上面的方法是对已保存好的图片进行GIF动图的制作,能否捕捉画图的演变过程,一边绘制图片一边进行GIF动图的制作呢?of course! 实现这一想法的思想是将作图的窗口按照作图的先后顺序保存成一帧帧图片,然后进行第2节的操作。
下面分享使用函数:
y=sin(2x) cos(x) exp(-x)
进行函数演变过程的GIF制作。这里相比第一个程序,还需用到两个函数:
1.getframe(gcf);%获得当前绘图窗口的图片
2.frame2im;%将当前窗口转化为图片数据格式
奉上作图代码,以供诸君食用!
% 制作y=sin(2x) cos(x) exp(-x)函数的GIF
clc,clear,close all
axis([-1,5,-2,4]);
xlabel('x','FontSize',16,'FontName','Times New Roman');
ylabel('y','FontSize',16,'FontName','Times New Roman');
set(gca,'FontSize',16)
box on;
x=-1:0.01:5;
Nt=size(x,2);
y=sin(2*x) cos(x) exp(-x);
ezplot('y=sin(2*x) cos(x) exp(-x)');
%绘图主程序
for i=1:Nt
cla;
hold on;
plot(x,y,'LineWidth',1.5)
plot(x(i),y(i),'o','LineWidth',1.5);
frame=getframe(gcf);%获得当前帧
imind=frame2im(frame);%将当前帧转换为图片
[imind,cm] = rgb2ind(imind,256);
if i==1
imwrite(imind,cm,'function.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);
else
imwrite(imind,cm,'function.gif','gif','WriteMode','append','DelayTime',1e-4);
end
end
下图是函数演化过程的GIF:
4
总结
本文介绍了制作GIF动图的两种情况,给出了相应的MATLAB代码。用程序控制工作流程,是我们懒人的“笨方法”,学会笨办法,节省时间成本。