代码之家  ›  专栏  ›  技术社区  ›  Fitri

在matlab中写入GIF文件的延迟时间

  •  0
  • Fitri  · 技术社区  · 10 年前

    我想以与原始文件相同的延迟时间重新写入GIF文件。这是示例图像:

    input

    这是我的代码,但输出的延迟比原始代码慢。有办法让它相等吗?

    [I map]=imread('a.gif');
    delay=0.1;
    frame=size(I,4);
    loops=65535;
    for i = 1:frame
        if i==1
            imwrite(I(:,:,:,i),map,'b.gif','gif','LoopCount',loops, 'DelayTime', delay); %save file output
        else
            imwrite(I(:,:,:,i),'b.gif','gif','WriteMode', 'append'); %save file output
        end
    end 
    

    结果是: enter image description here

    2 回复  |  直到 10 年前
        1
  •  1
  •   Rijul Sudhir    10 年前

    使用此代码

    [I map]=imread('a.gif');
    delay=0.03;
    frame=size(I,4);
    for i = 1:frame
        if i==1
            imwrite(I(:,:,:,i),map,'b.gif','gif', 'DelayTime', delay,'LoopCount',inf); %save file output
        else
            imwrite(I(:,:,:,i),'b.gif','gif','WriteMode', 'append', 'DelayTime', delay); %save file output
        end
    end
    
        2
  •  0
  •   אורי orihpt    3 年前

    对于更新版本的Matlab, imread 还输入帧索引:

    filename = 'a.gif';
    output = 'b.gif';
    delay= 0.03;
    
    frames = numel(imfinfo(filename));
    for i = 1:frames
        disp("Working on frame " + i + " out of " + frames)
    
        [I, map] = imread(filename, i);
    
        if i==1
            imwrite(I,map, output, 'gif', 'DelayTime', delay,'LoopCount',inf); %save file output
        else
            imwrite(I, output, 'gif','WriteMode', 'append', 'DelayTime', delay); %save file output
        end
    end