无需解码所有数据即可获取 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
中的字符串格式
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;
有没有一种方法可以使用 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
中的字符串格式
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;