人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

アニメーションgifのループ回数をimagemagickで取得する方法はありますでしょうか。
またはperlやcpanのモジュールで取得する方法ありますでしょうか?

●質問者: studio2021
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

前回の回答 に続いて、

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ