获取gif帧数,而无需解码所有数据

时间:2019-05-20 03:27:55

标签: c++ imagemagick

是否有一种方法可以使用ImageMagick获得图像帧的数量,而不必像readImages一样解码所有数据到列表中?<< / image>

3 个答案:

答案 0 :(得分:4)

Magick ++库具有 @Override public void onAttach(Context context) { super.onAttach(context); try { onVariationChanged = (onVariationChanged) context; } catch (ClassCastException e) { throw new ClassCastException(context.toString() + " must implement onVariationChangedListener"); } } 方法来读取标头信息而不是图像数据。

正如GeeMack所指出的,您只需要阅读最后一帧(后缀Magick::Image.ping)并进行调整即可。

[-1]

答案 1 :(得分:3)

从命令行使用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”。

答案 2 :(得分:0)

在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

的字符串格式