为什么用MatLab编写的.GIF总是在第一个显示循环中跳过第二个图像帧?

时间:2018-09-05 07:58:26

标签: matlab animated-gif

考虑以下MCVE:

intern

每张图像都显示了多维数据集B = 50 - randi(100,100,100,4); % Show each of the 4 layers of A for 0.50 seconds each, and save image frames: fig=figure(); for idx = 1:size(B,3) imagesc( B(:,:,idx) ); title(num2str(idx)); caxis([-50 50]); drawnow; frame = getframe(fig); img{idx} = frame2im(frame); pause(0.50); end % Write a .gif file, show each image 1 second in infinite loop. filename = 'whatsgoingon.gif'; dlyt = 1; for idx=1:length(img) [A,map]=rgb2ind(img{idx},256); if idx==1; imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',dlyt); else; imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',dlyt); end end 的一层。我编写了一些代码来制作一个.gif文件,以便于共享。我的问题是:每次打开.gif文件时,它将在显示的第一个循环中跳过第二帧(即与B(:,:,2)关联的帧)。本质上,.gif按时间顺序显示以下框架:

1、3、4、1、2、3、4、1、2、3、4等

这不是一个大问题,当我与其他人分享一些结果时,只是有些尴尬。我似乎找不到关于类似问题的任何主题(无论是在此处还是在Matlab的网站上),所以我很想知道在使用上述代码制作gif时是否遇到相同的问题,并且是否不知道它的起源。

仅供参考:我正在Windows计算机上使用Matlab R2018a。

编辑:这是我创建的示例图像:

here's a gif I create in this manner:

1 个答案:

答案 0 :(得分:1)

仅是评论摘要,以供将来的读者...

您可以在命令行上使用 ImageMgick 检查动画GIF中的延迟和详细信息,如下所示:

magick identify -format "%f[%s] %T\n" matlab.gif 

示例输出

matlab.gif[0] 100      <--- this frame has a 100 centisecond delay
matlab.gif[1] 100
matlab.gif[2] 100
matlab.gif[3] 100

此命令类似-在Windows上使用FINDSTR代替grep

magick identify -verbose matlab.gif | grep Delay
Delay: 100x100
Delay: 100x100
Delay: 100x100
Delay: 100x100

如果您想调试动画GIF,但观看起来太快,则可以重置所有时间-设置为每帧3秒-

magick input.gif -coalesce -set delay 300 slooooow.gif

enter image description here


请注意,某些应用程序无法正确显示动画GIF,因此请尝试在网络浏览器中使用Open-> File进行检查。尝试使用Chrome,Firefox,Opera,Safari等。


如果您在将GIF传递给同事并获得理解方面确实遇到困难,可以使用以下动画制作卡通条:

magick input.gif -coalesce +append result.gif

enter image description here

或者,您可以像这样在网格上制作蒙太奇:

magick input.gif -coalesce miff:- | magick montage -geometry +10+10 -  result.gif

enter image description here