少し前に書いたGIFエンコーダー/デコーダークラスで同じ問題に直面していました(そして時々改善しています)。昨日、この問題の解決策を見つけました。GIFはまったく問題ありません。問題は最新のインターネット ブラウザ側にあります。影響を受けるブラウザは、Opera、IE、および Chrome です (他はテストしていません)。
(ループ画像と非ループ画像を比較して) この問題を調査した結果、これらのブラウザーのGIFデコーダーがGIFファイルのループ パラメータを無視していることがわかりました。代わりに、 GIFファイルの最初のフレームにある文書化されていないアプリケーション拡張子に依存しています。
解決策は、最初のフレーム画像データの直前にこの拡張コマンドを追加することです。このチャンクを追加します:
0x21,0xFF,0x0B,"NETSCAPE","2.0",0x03,0x01,0x00,0x00,0x00
これにより、ブラウザは無限にループします。
次に例を示します。
追加方法を確認できる 16 進ビュー:
GIFは、画像以外のデータのチャンクの挿入/並べ替えに影響されないため、他の拡張子の間の任意の場所で、最初の画像の前にこれを挿入できます。ヘッダー+パレットの直後に入れています。これは、C++またはその他の言語で実行できます (再エンコードは必要ありません)。詳細については、次を参照してください。
[リードダンクルによる編集]
Hex Editor を使用して手動で行うこともできます。macOS Sierra で「Hex Fiend」を使用しました。
21 F9
16 進数の先頭部分を検索します (これはヘッダーです)。上の写真では、 です21 F9 04 04 00 00 00 00
。あなたのものは少し異なるかもしれませんが2C
、画像ブロックの始まりを示す の前にあることに注意してください。
21 F9
... 部分の前に、上の写真で「アプリケーション拡張子」としてマークされている次の hex を挿入します。
21 FF 0B 4E 45 54 53 43 41 50 45 32 2E 30 03 01 00 00 00
保存してテストします。
Addon by Spektre: 注意:21 F9
オプションの gfx 拡張チャンクをマークするため、すべてまたは一部のフレームに存在しない場合があります (ただし、最近では非常にまれです)。