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

imagemagickやその他プログラム的な方法でアニメーションgifの秒数を取得する方法はありますか?

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

▽最新の回答へ

1 ● a-kuma3
●0ポイント

c++ のプログラムで取得する方法です。


http://d.hatena.ne.jp/yu-hr/20090201/1233494522

で、GDI+ を使った方法がコードで載ってます。

内容を理解するには、以下のページも合わせて見ておく必要がありそうです。

http://d.hatena.ne.jp/yu-hr/20090131/1233349619

http://msdn.microsoft.com/en-us/library/ms533832%28v=vs.85%29.aspx


また、先のページの追記にある

GDI+を使わずにでデコードしてるサンプルを発見した

http://www.cplusplus.com/src/

は、www.cplusplus.com からは無くなってますが、Internet Archive からサルベージすることができます。

http://web.archive.org/web/20101123022922/http://cplusplus.com/src/


「GIF View」でダウンロードできる wingif.zip にある winimage.cpp が参考になります。

// ****************************************************************************
// * LoadGIF *
// * Load a GIF File into the C_ImageSet object *
// * (c) Nov 2000, Juan Soulie <jsoulie@cplusplus.com> *
// ****************************************************************************
int C_ImageSet::LoadGIF (char * szFileName)

  /* 省略 */

 // Fill NextImage Data
 NextImage->xPos = gifid.xPos;
 NextImage->yPos = gifid.yPos;
 if (GraphicExtensionFound)
 {
 NextImage->Transparent=
 (gifgce.PackedFields&0x01) ? gifgce.Transparent : -1;
 NextImage->Transparency=
 (gifgce.PackedFields&0x1c)>1 ? 1 : 0;
 NextImage->Delay = gifgce.Delay*10; /* ★これ! */
 }

http://homepage3.nifty.com/g-dragon/gif/gif_spec.html

このページは、GIF89a のフォーマットの説明ですが、

6.グラフィック制御拡張 (Graphic Control Extension)

(省略)

vii) 遅延時間 (Delay Time)

もし、0でなければ、この欄には、データ・ストリームの処理を続行す

る前に待たなければならない時間が百分の1秒単位で指定されています。

時計は、グラフィック描画後すぐに刻みはじめます。この欄は、利用者入

力フラグ欄と共に用いられ得ます。

を、ひとつずつ読みこんで、その合計がアニメーションGIF の再生時間、ということになります。


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

perlでは可能でしょうか。

http://www.nekopps.com/article/gif_format/

このページでは、書いた人が自作した perl スクリプトを使って、GIF ファイルの中身を見せています。

「GIFストリームの流れ」のブロックにリンクがありますが、ちょっと分かりにくいので、

スクリプトを指している URL を抜きました。

http://www.nekopps.com/article/gif_format/gif_analyzer.lzh


幾つかのサブスクリプトに分かれていますが、graphic_control_extension.pl の

readData サブルーチンで読みこんでいる $delay_time が遅延時間になっているようです。

関連質問

●質問をもっと探す●



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