またはperlやcpanのモジュールで取得する方法ありますでしょうか?
前回の回答 に続いて、
http://www.nekopps.com/article/gif_format/gif_analyzer.lzh
を使います。
「ループ回数」は、GIF89a仕様書抜粋 の
「7.NETSCAPE2.0 アプリケーション拡張 (Netscape Apprication Extension)」で
言及されている「繰り返し拡張データ副ブロック」だと思います。
gif_analyzer では、application_extension.pl が該当するブロックを読みこんでいるクラスですが、データの内容は読み飛ばしているようです。
readData メソッドの読み飛ばし (seek) しているところを、
# count sub blocks while(1){ read IN, $sub_block_size, 1; my $size = hex(unpack("H2", $sub_block_size)); if($size > 0){ $total_number++; seek IN, $size, 1; # ★ここ! }else{ last; } }
以下のように書き換えます。
$loop_count = undef; sub readData { ... # count sub blocks while(1){ read IN, $sub_block_size, 1; my $size = hex(unpack("H2", $sub_block_size)); if($size > 0){ $total_number++; read IN, $packed_fields, 1; my $dec = unpack("C", $packed_fields); my $type = $dec & 0x07; if($type == 1){ read IN, $loop_count, 2; }else{ seek IN, $size - 1, 1; } }else{ last; } } sub printData { ... print OUT ... "Loop count: ".unpack("v",$loop_count), ...
perl は、あまり好きな言語じゃなくて、普段、あまり使わないので、正直、書き換えたコードには自信がありません。
多分、studio2021 さんの方が perl は得意だと思うので、適宜、変更してください m(_ _)m
コメント(1件)
Gmagick::getimageiterations
(http://php.net/manual/en/gmagick.getimageiterations.php)
で取れるのではないかなぁと思います。