2017-09-27 15 views
3

私のアプリケーションでは、イメージのアップロードがあり、gifイメージをアップロードしたい場合に使用します。私は画像のループを無効にして保存する必要があります。その結果、ユーザーのGIF画像を一度再生してから停止する必要があります。たぶん、私はgif画像の最後のフレームからポインタを削除する必要がありますか?何か案は?gifイメージのループを無効にしてcで保存する方法#

+0

*「イメージのループを無効にして保存する必要があります」* - 特定のフレームを保存する必要がありますか? – Sinatr

+0

@Sinatrいいえ、gif画像これは別のサイトの広告バナーの一部です。このサイトの要件の1つは無限ループなしでgifです。 –

+0

@Sinatrあなたは、ループが完了した後、単一のフレームを別のイメージとして保存し、クライアント上で置き換えるべきですか? – ASpirin

答えて

0

Netscape Application拡張ブロックを追加または変更する必要があります。このブロックでは、以下の回答で詳細を確認、ループを制御するために2つのバイトがあります

https://stackoverflow.com/a/28486261/3936440

私はGIF操作のための適切なパッケージを見つけることができませんでしたが、私はあなたのようにインスピレーションとしてBumpKitを使用することができると思いますなお、ここでいう

https://stackoverflow.com/a/32810041/3936440

または

https://github.com/DataDink/Bumpkit/blob/master/BumpKit/BumpKit/GifEncoder.cs

0

私は答えを見つけました。私を助けようとした皆さん、ありがとうございます。

gifイメージには、各プロパティのの特定のアドレスがわかっている場合に取得できる一連のプロパティがあります。 たとえば、20737はループプロパティです。 このプロパティを0のgifイメージに設定すると無限ループになりますが、このプロパティを設定すると0より大きいgifイメージが無限に繰り返されます。こちらはexampleです。

var image = System.Drawing.Image.FromFile(path) 
var IsLooped = BitConverter.ToInt16(image.GetPropertyItem(20737).Value, 0) != 1; 
+0

これにも注意してください。 - https://bugzilla.mozilla.org/show_bug.cgi?id=1255497#c4 – saurabheights

+0

これは正しいですか? "NETSCAPE2.0"の値0は、永遠にループを意味します。 「NETSCAPE2.0」ブロックが見つからないということは、0回の繰り返し= 1回のループを意味します。 "NETSCAPE2.0"の値1は、1回の繰り返し= 2回のループを意味します。 "NETSCAPE2.0"の値2は、2回の繰り返し= 3回のループを意味します。 –

+0

こんにちはパベル、ちょうど画像をチェックしました。それはコメントに記載されているとおりです。 'gifsicle --no-loopcount < input.gif > output.gif'を実行すると、Netscape拡張ブロックが削除され、画像はchromeとfirefoxの両方でループしません。 'xxd output.gif |を使って確認するgrep NETSCAPE'とNetscape拡張ブロックが削除されました。 ubuntuを終了します。それが役に立てば幸い。 Gifsicleのリファレンス - https://www.lcdf.org/gifsicle/man.html – saurabheights

関連する問題