无需解码所有数据即可获取 gif 帧数

get number of gif frames without having to decode all data

有没有一种方法可以使用 ImageMagick 获取图像帧的数量,而不必像 readImages 那样将所有数据解码为 list

您可以从命令行使用 ImageMagick 版本 6...

convert input.gif[-1] -format %[scene] info:

那应该只读取最后一帧并输出它的帧数,比总帧数少一。

你可以通过一些小技巧设置和读取像这样的假寻呼信息来让 IM 给那个号码加一...

convert input.gif[-1] -set page +%[scene] -format %[fx:page.x+1] info:

那应该输出GIF中的总帧数。

如果使用 IM 版本 7,请使用 "magick" 而不是 "convert"。

Imagemagick 中的另一种方式,至少在 Unix 系统上,在命令行中,您可以执行以下从 Imagemagick 到 wc 的管道(字数统计,可以使用 wc -l 计算行数):

创建 3 帧 gif

convert logo: logo: logo: logo.gif


获取帧数

convert logo.gif -format "%n\n" info: | wc -l 
       3


请参阅 https://imagemagick.org/script/escape.php

中的字符串格式

Magick++ 库有 Magick::Image.ping 方法来读取 header 信息而不是图像数据。

正如 GeeMack 指出的那样,您只需要读取最后一帧(带有 [-1] 后缀),然后进行调整。

Magick::Image temp;
size_t total_frames = 0;

temp.ping("animation.gif[-1]");
total_frames = temp.scene() + 1;