MATLAB Answers

0

How can I create a gif that plays only once?

Asked by Robert Sweeney on 19 Dec 2018
Latest activity Answered by Chad Greene
on 19 Dec 2018
when creating an animated gif using imwrite, the result loops continuously no matter what I set LoopCount to be. I'm trying to get it to play only once, so I'm setting LoopCount to "0". Is this a bug?

  1 Comment

Sign in to comment.

Tags

Products


Release

R2016b

3 Answers

Answer by Chad Greene
on 19 Dec 2018

Use my gif function!
Just type
gif('myfile.gif','LoopCount',1)
for the first frame
and then
gif
to write each subsequent frame. That's it.

  0 Comments

Sign in to comment.


Answer by Robert Sweeney on 19 Dec 2018

Here's my function. In the beginning of the routine it is initialized with the first frame and ovwrt = 1. For every subsequent frame, the frame is appended with ovwrt = 0.
function make_gif(fig, ovwrt, filename)
frame = getframe(fig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if ovwrt
imwrite(imind,cm,filename,'gif', 'Loopcount', int8(0), 'DelayTime', 0.1);
else
imwrite(imind,cm,filename,'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
end

  0 Comments

Sign in to comment.


Answer by Mark Sherstan on 19 Dec 2018

Using the code found from here I can confirm that if I use 0 as the 'loopcount' argument it plays once and inf it keeps repeating. Passing the information from your script to the function something is being lost.
h = figure;
axis tight manual % this ensures that getframe() returns a consistent size
filename = 'testAnimated.gif';
for n = 1:0.5:5
% Draw plot for y = x.^n
x = 0:0.01:1;
y = x.^n;
plot(x,y)
drawnow
% Capture the plot as an image
frame = getframe(h);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
% Write to the GIF File
if n == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',0);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
end
So I modified the above and got the following script and function which is very close to yours. Again something must just be getting lost between your function and elsewhere but hopefully this helps:
Script:
h = figure;
axis tight manual
filename = 'testinf.gif';
for n = 1:0.5:5
x = 0:0.01:1;
y = x.^n;
plot(x,y)
drawnow
make_gif(h, n, filename)
end
Function:
function make_gif(fig, ovwrt, filename)
frame = getframe(fig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if ovwrt == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',0);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
Alternatively you can use this function from the file exchange!

  0 Comments

Sign in to comment.