考虑以下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。
编辑:这是我创建的示例图像:
答案 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
请注意,某些应用程序无法正确显示动画GIF,因此请尝试在网络浏览器中使用Open
-> File
进行检查。尝试使用Chrome,Firefox,Opera,Safari等。
如果您在将GIF传递给同事并获得理解方面确实遇到困难,可以使用以下动画制作卡通条:
magick input.gif -coalesce +append result.gif
或者,您可以像这样在网格上制作蒙太奇:
magick input.gif -coalesce miff:- | magick montage -geometry +10+10 - result.gif