文章目录

  • 1 前言
  • 2 Demo
    • Demo 1 – 不使用函数
    • Demo 2 – 使用函数

1 前言

在PPT展示或者博客创作中,有时需要插入动态图如GIF,来演示算法效果或者结果。在MATLAB中,可以通过一些代码,将绘图plot转化为动态的GIF。

其大致方法为,写一个循环,每个循环为一个帧,绘制该帧的内容,将此时figure的内容转化为一帧图像,定义两帧的间隔,然后添加到GIF中(第一帧和其他帧的处理方式不一样,详见代码)。

如果想将GIF插入到CSDN博客中,只需要点击工具栏中的图片,然后添加即可。

效果如下:

2 Demo

这里提供两个demo。

Demo 1 – 不使用函数

需要一个文件,create_gif_demo_1.m
需要修改的只有两处:

  • 文件名。这里文件名为animation.gif,注意不要漏了后缀。这样会在当前目录下,生成GIF文件。
  • 帧间隔。这里设置的时间间隔为0.1s,可以根据需要修改。
clear allclc% Define the time steps for your animationtimeSteps = 0:0.1:2*pi;% Create a figure handlefigure;% Loop through each time stepfor i = 1:length(timeSteps)% Generate your plot for each time stepx = linspace(0, 2*pi, 100);y = sin(x + timeSteps(i));% Plot customizationplot(x, y, 'LineWidth', 2);title('Sinusoidal Wave Animation');xlabel('X-axis');ylabel('Y-axis');% Capture the current frameframe = getframe(gcf);% Convert the frame to an image matriximg = frame2im(frame);[A,map] = rgb2ind(img,256);% Save the image as a GIF (adjust filename as needed)if i == 1imwrite(A,map, 'animation.gif', 'gif', 'Loopcount', inf, 'DelayTime', 0.1);elseimwrite(A,map, 'animation.gif', 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);end% Pause to create a smooth animationpause(0.1);% For real-time viewing only, can be removedend% Display a message indicating successful GIF creationdisp('GIF animation created successfully.');

Demo 2 – 使用函数

需要两个文件(放在同一目录下):create_gif.mcreate_gif_demo_2.m
不同于demo 1的地方在于,这里把和GIF相关的代码封装进一个函数里。
这样只需要传入参数:是否为第一帧的flag,帧与帧的时间间隔,GIF文件名称。

function [] = create_gif(flag,delay_time,name_of_the_file)% % Capture the current frameframe = getframe(gcf);% Convert the frame to an image matriximg = frame2im(frame);[A,map] = rgb2ind(img,256);% Save the image as a GIF (adjust filename as needed)if flag == 1 % flag == 1 means it's the first frameimwrite(A,map, name_of_the_file, 'gif', 'Loopcount', inf, 'DelayTime', delay_time);elseimwrite(A,map, name_of_the_file, 'gif', 'WriteMode', 'append', 'DelayTime', delay_time);endend
clear allclcdelay = 0.1; % delay between frames, 0.1sfile_name = 'gif_demo_2.gif'; % file name, careful about the .gif suffix% Define the time steps for your animationtimeSteps = 0:0.1:2*pi;% Create a figure handlefigure;% Loop through each time stepfor i = 1:length(timeSteps)% Generate your plot for each time stepx = linspace(0, 2*pi, 100);y = sin(x + timeSteps(i));% Plot customizationplot(x, y, 'LineWidth', 2);title('Sinusoidal Wave Animation');xlabel('X-axis');ylabel('Y-axis');% Create GIFflag = i; % flag to indicate whether it's the first framecreate_gif(flag, delay, file_name);% Pause to create a smooth animationpause(0.1);% For real-time viewing only, can be removedend% Display a message indicating successful GIF creationdisp('GIF animation created successfully.');