2017-09-27 4 views
3

In meiner Anwendung gibt es ein Bild hochladen und wenn ein Benutzer GIF-Bild hochladen möchte. Ich muss die Schleife in einem Bild deaktivieren und speichern, in der Ergebnis-GIF-Bild eines Benutzers muss einmal abgespielt werden und danach aufhören. Vielleicht muss ich den Zeiger vom letzten Bild des Gif-Bildes löschen? Irgendwelche Ideen?So deaktivieren Sie eine Schleife für GIF-Bild und speichern Sie es in C#

+0

* "Ich muss Schleifen in einem Bild deaktivieren und speichern" * - bedeutet, dass Sie einen bestimmten Frame speichern möchten? – Sinatr

+0

@Sinatr Nein, gif Bild ist Teil des Werbebanners auf einer anderen Seite und eine der Anforderungen von dieser Seite ist gif ohne Endlosschleife. –

+0

@Sinatr meinst du, er sollte ein einzelnes Bild als ein anderes Bild speichern und es auf einem Client ersetzen, nachdem die Schleife fertig ist? – ASpirin

Antwort

0

Sie müssen den Erweiterungsblock Netscape Application hinzufügen oder ändern. In diesem Block sind 2 Bytes den Looping zu steuern, siehe Details in der folgenden Antwort:

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

ich keine richtige Paket für GIF Manipulation finden konnte, aber ich denke, Sie BumpKit als Inspiration nutzen können als hier erwähnt

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

oder

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

0

Ich habe eine Antwort gefunden, danke an alle, die mir geholfen haben.

Das GIF-Bild hat eine Reihe von Eigenschaften, die Sie erhalten können, wenn Sie die spezifische Adresse eines Bytes jeder Eigenschaft kennen. Zum Beispiel ist 20737 Looping-Eigenschaft. Wenn diese Eigenschaft auf 0 gesetzt wird, wird das Bild endlos geloopt, aber wenn diese Eigenschaft auf 0 gesetzt wird, wird das gif image unendlich wiederholt. Die example habe ich hier platziert.

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

Sie sollten sich dessen auch bewusst sein: - https://bugzilla.mozilla.org/show_bug.cgi?id=1255497#c4 – saurabheights

+0

Ist das korrekt, nicht? Wert 0 in "NETSCAPE2.0" bedeutet Schleife für immer. Fehlender "NETSCAPE2.0" -Block bedeutet 0 Wiederholungen = Schleife einmal. Wert 1 in "NETSCAPE2.0" bedeutet 1 Wiederholung = 2 Schleifen. Wert 2 in "NETSCAPE2.0" bedeutet 2 Wiederholungen = 3 Schleifen. –

+0

Hi Pavel, nur ein Bild überprüft. Es ist wie im Kommentar erwähnt. Führen Sie dies aus: 'gifsicle --no-loopcount < input.gif > output.gif' und es wird Netscape Extension Block entfernen und das Bild nicht Loops sowohl in Chrome & Firefox. Bestätigt mit 'xxd output.gif | grep NETSCAPE' und Netscape-Erweiterungsblock wurde entfernt. Fertig auf ubuntu. Ich hoffe es hilft. Gifsicle Verweis - https://www.lcdf.org/gifsicle/man.html – saurabheights

Verwandte Themen