GIF

GIF
Rotating earth (large).gif
Dateiname Erweiterung
.gif
Internet -Medientyp
image/gif
Typschlüssel GIFf
Uniform Typ Identifier (UTI) com.compuserve.gif
magische Zahl Gif87a/Gif89a
Entwickelt von CompuServe
Erstveröffentlichung 15. Juni 1987; vor 35 Jahren[1]
Neueste Erscheinung
89a
1989; Vor 33 Jahren[2]
Art des Formats Verlustlos Bitmap Bildformat
Webseite www.W3.org/Grafik/Gif/spec-gif89a.txt

Das Grafik -Austauschformat (GIF; /ɡɪf/ Ghif oder /ɪf/ Jif , Siehe Aussprache) ist ein Bitmap Bildformat Dies wurde von einem Team des Online -Diensteanbieters entwickelt CompuServe Unter der Leitung des amerikanischen Informatiker Steve Wilhite und am 15. Juni 1987 veröffentlicht.[1] Es ist seitdem weit verbreitet auf dem Gebrauch Weltweites Netz Aufgrund seiner umfassenden Unterstützung und Portabilität zwischen Anwendungen und Betriebssystemen.

Das Format unterstützt bis zu 8 Bit pro Pixel Für jedes Bild, damit ein einzelnes Bild auf seine eigene verweist Palette von bis zu 256 verschiedenen Farben, die aus dem ausgewählt wurden 24-bisschen RGB -Farbraum. Es unterstützt auch Animationen und ermöglicht eine separate Palette von bis zu 256 Farben für jeden Rahmen. Diese Palettenbeschränkungen machen GIF weniger geeignet, um Farbfotos und andere zu reproduzieren Bilder mit Farbgradienten, aber gut geeignet für einfachere Bilder wie Grafiken oder Logos mit soliden Farbbereichen.

GIF -Bilder werden mit dem komprimiert Lempel -Ziv -Welch (LZW) Verlustlose Datenkomprimierung Technik zur Reduzierung der Dateigröße, ohne die visuelle Qualität zu beeinträchtigen. Diese Komprimierungstechnik wurde 1985 patentiert. Kontroverse um die Lizenzvereinbarung zwischen dem Software -Patent Halter, Unisysund CompuServe im Jahr 1994 die Entwicklung der Entwicklung der Tragbare Netzwerkgrafiken (PNG) Standard. Bis 2004 waren alle relevanten Patente abgelaufen.

Geschichte

CompuServe Einführte GIF am 15. Juni 1987, um ein Farbbildformat für ihre Datei -Download -Bereiche bereitzustellen. Dies ersetzte ihre frühere Kodierung der Lauflänge Format, das nur schwarz und weiß war. GIF wurde populär, weil es verwendet wurde Lempel -Ziv -Welch Datenkompression. Da war dies effizienter als die von der Lauflängenkodierung verwendete Kodierung von PCX und Macpaint, ziemlich große Bilder konnten selbst bei langsamen Relativen relativ schnell heruntergeladen werden Modems.

Das Original Die Version von GIF wurde genannt 87a.[1] Diese Version unterstützte bereits mehrere Bilder in einem Stream.

Im Jahr 1989 veröffentlichte CompuServe eine erweitert Version, genannt 89a,[2] Diese Version wurde hinzugefügt:

  • Unterstützung für Animation Verzögerungen,
  • transparent Hintergrundfarben,
  • Speicherung von anwendungsspezifischen Metadaten und
  • Integration von Textbezeichnungen als Text (Einbetten Sie sie nicht in die grafischen Daten ein),
    Da es jedoch nur wenig Kontrolle über Display -Schriftarten gibt, wird diese Funktion nicht weit verbreitet.

Die beiden Versionen können anhand der ersten sechs unterschieden werden Bytes der Datei (die "magische Zahl"oder Unterschrift), die, wenn sie interpretiert als ASCII, lesen Sie "Gif87a" bzw. "GIF89A".

CompuServe ermutigte die Übernahme von GIF, indem er viele Computer herunterladbare Conversion -Dienstprogramme bereitstellte. Bis zum Beispiel bis Dezember 1987 ein Apfel -Iigs Benutzer können Bilder anzeigen, die auf einem erstellt wurden Atari st oder Commodore 64.[3] GIF war eines der ersten beiden Bildformate, die üblicherweise auf Websites verwendet wurden, das andere ist Schwarzweiß Xbm.[4]

Im September 1995 Netscape Navigator 2.0 hinzugefügt Die Fähigkeit, animierte GIFs zu schleifen.

Die Funktion des Speicherns mehrerer Bilder in einer Datei, begleitet von Kontrolldaten, wird im Internet ausgiebig verwendet, um einfach zu produzieren Animationen.

Die Wahl Interlacing Feature, in dem Bildcan -Linien in der Reihenfolge in einer solchen Weise gespeichert sind, dass selbst ein teilweise heruntergeladenes Bild etwas erkennbar war, half auch GIFs Popularität.[5] Als Benutzer konnte der Download abbrechen, wenn es nicht das war, was erforderlich war.

Im Mai 2015 Facebook Unterstützung für GIF hinzugefügt.[6][7] Im Januar 2018 fügte Instagram auch GIF -Aufkleber zum Story -Modus hinzu.[8]

Terminologie

Als ein Substantiv, das Wort GIF wird in den neueren Ausgaben vieler Wörterbücher gefunden. 2012 der amerikanische Flügel der Oxford University Press anerkannt GIF Als ein Verb Das heißt auch, "eine GIF -Datei zu erstellen", wie in "Gifing Sommerolympiade". Die Lexikographen der Presse stimmten dafür zu Wort des Jahresmit der Aussage, dass sich GIFs zu "ein Tool mit ernsthaften Anwendungen wie Forschung und Journalismus" entwickelt haben.[9][10]

Aussprache

Ein humorvolles Bild, das den Start von a ankündigt Tumblr Konto für die Weißes Haus schlägt das Aussprechen vor GIF mit einem hart g.

Die Aussprache des ersten Buchstabens von GIF ist seit den 1990er Jahren umstritten. Die häufigsten Aussprachen in Englisch sind /ɪf/ (Hören) (mit einer Sanft g wie in Gin) und /ɡɪf/ (Hören) (mit einer schwer g wie in Geschenk), unterscheidet sich in der Phonem durch den Brief dargestellt G. Die Schöpfer des Formats haben das Akronym ausgesprochen GIF wie /ɪf/, mit einer Sanft gmit Wilhite, dass er beabsichtigte, die Aussprache absichtlich den Amerikaner zu widerrufen Erdnussbutter Marke Jifund CompuServe -Mitarbeiter zersagten oft "Choosy Developers wählen GIF", eine Parodie von JIFs Fernsehwerbespots.[11] Das Wort ist jedoch weithin ausgesprochen als als /ɡɪf/, mit einer schwer g,[12] und Umfragen haben im Allgemeinen gezeigt, dass so schwer g Aussprache ist häufiger.[13][14]

Dictionary.com[15] zitiert beide Aussprachen, was anzeigt /ɪf/ als primäre Aussprache, während Cambridge Dictionary of American English[16] Bietet nur die Hard-g Aussprache. Merriam-Websters College-Wörterbuch[17] und Oxford -Wörterbücher zitieren beide Aussprachen g Erste: /ɡɪf, ɪf/.[18][19][20][21] Das New Oxford American Dictionary nur gegeben /ɪf/ in seiner zweiten Ausgabe[22] aber aktualisierte es an /ɪf, ɡɪf/ in der dritten Ausgabe.[23]

Die Meinungsverschiedenheit über die Aussprache hat zu einer hitzigen Internetdebatte geführt. Anlässlich des Erhalts eines lebenslangen Achievement Award bei der 2013 Webby Awards Zeremonie, Wilhite lehnte das Hard-g Aussprache;[12][24][25] Seine Rede führte zu mehr als 17.000 Posts auf Twitter und Dutzende von Nachrichtenartikeln.[26] Das Weißes Haus[12] und die TV -Programm Gefahr! Außerdem trat 2013 die Debatte ein.[25] Im Februar 2020,, Die J.M. Smucker Company, Die Eigentümer der JIF -Marke haben sich mit der animierten Bilddatenbank und der Suchmaschine zusammengetan Giphy um eine limitierte Auflage "Jif vs. Gif" (limited-Edition) zu veröffentlichen (Hashtagged als #jifvsgif) Glas von Erdnussbutter, das ein Etikett humorvoll das Weiche erklärte.g Aussprache, um sich ausschließlich auf die Erdnussbutter zu beziehen, und GIF ausschließlich mit dem Hard- ausgesprochen werdeng Aussprache.[27]

Verwendungszweck

GIFs sind für scharfkantige Linienkunst mit einer begrenzten Anzahl von Farben wie Logos geeignet. Dies nutzt die verlustfreie Kompression des Formats, die flache Bereiche der einheitlichen Farbe mit gut definierten Kanten bevorzugt.[28] Sie können auch verwendet werden, um niedrige Farben zu speichern Sprite Daten für Spiele.[29] GIFs können für kleine Animationen und Videoclips mit niedriger Auflösung oder als Reaktionen in Online-Messaging verwendet werden, um Emotionen und Gefühle zu vermitteln, anstatt Wörter zu verwenden. Sie sind auf Social -Media -Plattformen wie Tumblr, Facebook und Twitter beliebt.

Datei Format

Konzeptionell beschreibt eine GIF-Datei einen grafischen Bereich mit fester Größe (der "logische Bildschirm") mit Null oder mehr "Bildern". Viele GIF -Dateien haben ein einzelnes Bild, das den gesamten logischen Bildschirm füllt. Andere teilen den logischen Bildschirm in separate Unterbilder. Die Bilder können auch als Animationsrahmen in einer animierten GIF -Datei fungieren, diese müssen jedoch wiederum nicht den gesamten logischen Bildschirm ausfüllen.

GIF-Dateien beginnen mit einem Header mit fester Länge ("GIF87A" oder "GIF89A"), das die Version angibt, gefolgt von einem logischen Bildschirmdeskriptor mit fester Länge, der die Pixeldimensionen und andere Eigenschaften des logischen Bildschirms enthält. Der Bildschirmdeskriptor kann auch das Vorhandensein und die Größe einer globalen Farbtabelle (GCT) angeben, die als nächstes folgt, falls vorhanden.

Danach ist die Datei in Segmente unterteilt, die jeweils von einem 1-Byte-Sentinel eingeführt werden:

  • Ein Bild (eingeführt von 0x2c, einem ASCII -Komma, ',')
  • Ein Verlängerungsblock (eingeführt von 0x21, einem ASCII -Ausrufespunkt '!')
  • Der Anhänger (ein einzelner Wert des Wertes 0x3b, ein ASCII -Semikolon ';'), was das letzte Byte der Datei sein sollte.

Ein Bild beginnt mit einem Bilddeskriptor mit fester Länge, der das Vorhandensein und die Größe einer lokalen Farbtabelle angeben kann (die als nächstes folgt). Die Bilddaten folgen: Ein Byte, das die Bitbreite der nichtcodierten Symbole (die mindestens 2 Bits breit sein müssen, auch für BIO-Farben), gefolgt von einer verknüpften Liste von Unterblockern, die die LZW-kodierten Daten enthalten.

Erweiterungsblöcke (Blöcke, die die 87A-Definition über einen in der 87A-Spezifikation bereits definierten Mechanismus "erweitern") bestehen aus dem Sentinel, einem zusätzlichen Byte, das die Art der Erweiterung angibt, und eine verknüpfte Liste von Unterblockern mit den Erweiterungsdaten. Erweiterungsblöcke, die ein Bild ändern (wie die Grafiksteuerung, die die optionale Animationsverzögerungszeit und die optionale transparente Hintergrundfarbe angibt), müssen dem Segment sofort mit dem Bild vorausgehen, auf das sie sich beziehen.

Die verlinkten Listen, die von den Bilddaten und den Erweiterungsblöcken verwendet werden, bestehen aus einer Reihe von Unterblockieren, wobei jeder Unterblock mit einem Byte beginnt, die die Anzahl der nachfolgenden Datenbytes im Unterblockieren (1 bis 255) angeben. Die Serie der Unterblocks wird durch einen leeren Unterblock (ein 0-Byte) beendet.

Diese Struktur ermöglicht es, dass die Datei analysiert wird, auch wenn nicht alle Teile verstanden werden. Ein mit 87A gekennzeichnetes GIF kann Erweiterungsblöcke enthalten. Die Absicht ist, dass ein Decoder die Datei ohne die in Erweiterungen behandelten Funktionen lesen und anzeigen kann.

Das vollständige Detail des Dateiformats wird in der GIF -Spezifikation behandelt.[2]

Paletten

Ein Beispiel für ein GIF -Bild, das mit a gespeichert ist Web-Safe Palette und Dithered Verwendung der Floyd -Steinberg Methode. Aufgrund der reduzierten Anzahl von Farben im Bild gibt es Ausstellungsprobleme.

GIF basiert auf Paletten: Die Farben, die in einem Bild (einem Rahmen) in der Datei verwendet werden RGB Werte in a definiert Palettentisch Dies kann bis zu 256 Einträge enthalten, und die Daten für das Bild beziehen sich auf die Farben nach ihren Indizes (0–255) in der Palette -Tabelle. Die Farbdefinitionen in der Palette können aus einem Farbraum von Millionen von Schatten gezogen werden (224 Farbtöne, 8 Bit für jede Primäranlage), aber die maximale Anzahl von Farben, die ein Rahmen verwenden kann, beträgt 256. Diese Einschränkung schien vernünftig zu sein, als GIF entwickelt wurde, da sich nur wenige Menschen die Hardware leisten konnten, um mehr Farben gleichzeitig anzuzeigen. Einfache Grafiken, Linienzeichnungen, Cartoons und graue Fotos benötigen normalerweise weniger als 256 Farben.

Jeder Frame kann einen Index als "transparente Hintergrundfarbe" bezeichnen: Jedes Pixel, der diesen Index zugewiesen hat, nimmt die Farbe des Pixels in derselben Position aus dem Hintergrund an, was möglicherweise durch einen früheren Animationsrahmen bestimmt wurde.

Viele Techniken, die gemeinsam genannt werden DitheringSie wurden entwickelt, um eine breitere Farbpalette mit einer kleinen Farbpalette mit Pixel mit zwei oder mehr Farben zu entsprechen, um zwischen den Farben zu approximieren. Diese Techniken opfern die räumliche Auflösung, um eine tiefere Farbauflösung zu approximieren. Obwohl nicht Teil der GIF -Spezifikation, kann Dithering in Bildern verwendet werden, die anschließend als GIF -Bilder codiert werden. Dies ist oft keine ideale Lösung für GIF -Bilder, sowohl, da der Verlust der räumlichen Auflösung typischerweise ein Bild auf dem Bildschirm verschwommen aussieht, und weil die Dithering -Muster häufig die Kompressibilität der Bilddaten beeinträchtigen und gegen GIFs Hauptzweck arbeiten.

In den frühen Tagen grafischer Webbrowser[wenn?]Grafikkarten mit 8-Bit Webafe Palette.[Nach wem?] Dies sorgte für vorhersehbare Anzeigen, begrenzte jedoch die Auswahl der Farben stark. Wenn die 24-Bit-Farbe zur Norm wurde, konnten die Paletten stattdessen mit den optimalen Farben für einzelne Bilder besiedelt werden.

Ein kleiner Farbtisch kann für kleine Bilder ausreichen, und das Halten der Farbtabelle ermöglicht es, die Datei schneller herunterzuladen. Sowohl die Spezifikationen 87A als auch 89A ermöglichen Farbtabellen von 2n Farben für jeden n Von 1 bis 8. Die meisten Grafikanwendungen lesen und anzeigen GIF -Bilder mit einer dieser Tabellengrößen. Einige unterstützen jedoch nicht alle Größen, wenn Erstellen Bilder. Tabellen von 2, 16 und 256 Farben werden weit verbreitet.

Wahre Farbe

Obwohl GIF fast nie verwendet wird wahre Farbe Bilder, es ist möglich.[30][31] Ein GIF-Bild kann mehrere Bildblöcke enthalten, von denen jede eine eigene 256-Farben-Palette haben kann, und die Blöcke können gefliest werden, um ein vollständiges Bild zu erstellen. Alternativ führte die GIF89A -Spezifikation die Idee einer "transparenten" Farbe ein, bei der jeder Bildblock eine eigene Palette von 255 sichtbaren Farben sowie eine transparente Farbe enthalten kann. Ein vollständiges Bild kann erstellt werden, indem Bildblöcke mit dem sichtbaren Teil jeder Ebene über die transparenten Teile der oben angezeigten Schichten geschichtet werden.

Ein animiertes GIF, das eine Technik zum Anzeigen mehr als das typische Grenze von 256 Farben zeigt

Um ein Vollfarbbild als GIF zu rendern, muss das Originalbild in kleinere Regionen mit nicht mehr als 255 oder 256 verschiedenen Farben unterteilt werden. Jede dieser Regionen wird dann als separater Bildblock mit einer eigenen lokalen Palette gespeichert und wenn die Bildblöcke zusammen angezeigt werden (entweder durch Fliesen oder durch teilweise transparente Bildblöcke), erscheint das vollständige, farbenfrohe Bild. Das Aufbrechen eines Bildes in Fliesen von 16 x 16 Pixel (insgesamt 256 Pixel) stellt sicher, dass keine Fliese mehr als die lokale Palettengrenze von 256 Farben aufweist, obwohl größere Fliesen verwendet werden können und ähnliche Farben zu einem gewissen Farbverlust führen können Information.[30]

Da jeder Bildblock eine eigene lokale Farbtabelle haben kann, kann eine GIF-Datei mit vielen Bildblöcken sehr groß sein, was die Nützlichkeit von GIFs in Vollfarbs begrenzt.[31] Darüber hinaus verarbeiten nicht alle GIF -Rendering -Programme geflieste oder geschichtete Bilder korrekt. Viele Rendering -Programme interpretieren Kacheln oder Ebenen als Animationsrahmen und zeigen sie nacheinander als Animation an[30] Bei den meisten Webbrowsern werden die Frames automatisch mit einer Verzögerungszeit von 0,1 Sekunden oder mehr angezeigt.[32][33]

Beispiel GIF -Datei

Microsoft Paint Speichert ein kleines Schwarz-Weiß-Bild als folgende GIF-Datei (vergrößert).

Beispielbild (vergrößert), tatsächliche Größe 3 Pixel breit um 5 hoch
Bytes dh bis 30ch Definieren Sie im Beispiel eine Palette von 256 Farben.

Farbe nutzt GIF nicht optimal; Aufgrund der unnötig großen Farbtabelle (Speicher von 256 Farben anstelle der verwendeten 2) und der Symbolbreite ist diese GIF-Datei keine effiziente Darstellung des 15-Pixel-Bildes.

Obwohl der Grafikkontrollerweiterungsblock den Farbindex 16 (hexadezimal 10) als transparent erklärt, wird dieser Index im Bild nicht verwendet. Die einzigen Farbindizes, die in den Bilddaten erscheinen, sind Dezimalzahl 40 und 255, die die globale Farbtabelle auf Schwarz und Weiß karten.

Beachten Little-Endian Bytereihenfolge, wie die Formatspezifikation vorschreibt.

Tabelle der Beispiel -GIF -Bildwerte
Byte # (hex) Hexadezimal Text oder Wert Bedeutung
0 47 49 46 38 39 61 Gif89a Header
6 03 00 3 Logische Bildschirmbreite
8 05 00 5 Logische Bildschirmhöhe
A F7 GCT folgt für 256 Farben mit Auflösung 3×8 Bit/Primär, die niedrigsten 3 Bits repräsentieren die Bittiefe minus 1, das höchste wahre Bit bedeutet, dass die GCT vorhanden ist
B 00 0 Hintergrundfarbe: Index #0; #000000 Schwarz
C 00 0 Standardpixel -Seitenverhältnis, 0: 0
D 00 00 00
R (rot) G (grün) B (blau)
0 0 0
Globaler Farbtabelle, Farbe #0: #000000, schwarz
10 80 00 00
R (rot) G (grün) B (blau)
128 0 0
Globale Farbtabelle, Farbe Nr. 1: Transparentes Bit, nicht im Bild verwendet
... ... ... Global Color Table erstreckt sich auf 30a
30a Ff ff ff
R (rot) G (grün) B (blau)
255 255 255
Global Color Table, Farbe #255: #ffffff, weiß
30d 21 F9 Grafikkontrollerweiterung (Kommentarfelder gehen dies in den meisten Dateien voraus)
30f 04 4 Anzahl der GCE -Daten, 4 Bytes
310 01 Transparente Hintergrundfarbe; Dies ist ein Bitfeld, das niedrigste Bit bedeutet Transparenz
311 00 00 Verzögerung für Animation in Hundertstel Sekunden; nicht benutzt
313 10 16 Farbzahl transparenter Pixel in GCT
314 00 Ende des GCE -Blocks
315 2c Bilddeskriptor
316 00 00 00 00 (0, 0) Nordwest-Eckposition des Bildes im logischen Bildschirm
31a 03 00 05 00 (3, 5) Bildbreite und Höhe in Pixel
31e 00 0 Lokales Farbtisch Bit, 0 bedeutet keine
31f 08 8 Bild beginnen, LZW Mindestcodegröße
320 0b 11 Menge an LZW codiertem Bild folgen, 11 Bytes
321 00 51 FC 1B 28 70 A0 C1 83 01 01 11 Bytes von Bilddaten, siehe Feld 320
32c 00 0 Ende des Bilddatenblocks
32d 3b Dateiabschluss

Bildcodierung

Die Bildpixeldaten, die horizontal von oben links gescannt wurden, werden durch konvertiert LZW Codierung Codes, die dann in Bytes zum Speichern in der Datei abgebildet werden. Die Pixelcodes stimmen normalerweise nicht mit der 8-Bit-Größe der Bytes überein, sodass die Codes von einem "Little-Endian" -Schema in Bytes gepackt werden Erstes Byte, höhere Ordnung des Code in höhere Ordnung des Bytes, die nach Bedarf in die Bit des nächsten Bytes in die niedrigen Ordnung übergeben werden. Jeder nachfolgende Code wird gespeichert, um das am wenigsten signifikante nicht bereits verwendetes Bit zu verwenden.

Dieser Byte-Stream wird in der Datei als Reihe von "Sub-Blocks" gespeichert. Jeder Teilblock hat eine maximale Länge von 255 Bytes und wird mit einem Byte vorangestellt, das die Anzahl der Datenbytes im Unterblockieren angibt. Die Serie der Unterblocks wird durch einen leeren Unterblockieren beendet (ein einzelnes 0-Byte, das einen Unterblock mit 0 Datenbytes anzeigt).

Für das Beispielbild über der reversiblen Zuordnung zwischen 9-Bit-Codes und Bytes ist unten gezeigt.

Reversible Mapping
9-Bit-Code Byte
Hexadezimal Binär Binär Hexadezimal
100 1 00000000 00000000 00
028 00 0101000 0101000 1 51
0ff 011 111111 111111 00 Fc
103 1000 00011 00011 011 1b
102 10000 0010 0010 1000 28
103 100000 011 011 10000 70
106 1000001 10 10 100000 A0
107 10000011 1 1 1000001 C1
10000011 83
101 1 00000001 00000001 01
0000000 1 01

Eine leichte Komprimierung ist offensichtlich: Pixelfarben, die ursprünglich von 15 Bytes definiert sind, werden genau durch 12 Code -Bytes einschließlich Kontrollcodes dargestellt. Der Codierungsprozess, der die 9-Bit-Codes erzeugt, ist unten gezeigt. Eine lokale Zeichenfolge sammelt Pixel -Farbnummern aus der Palette, ohne dass die lokale Zeichenfolge in einer Code -Tabelle gefunden werden kann. Es gibt eine besondere Behandlung der ersten beiden Pixel, die vor dem Tisch aus der anfänglichen Größe durch Ergänzungen von Saiten ankommen. Nach jedem Ausgabescode wird die lokale Zeichenfolge in die neueste Pixelfarbe initialisiert (die nicht im Ausgabecode aufgenommen werden konnte).

  Tabelle 9-Bit  String -> Code -Code -Aktion                           #0 | 000H initialisieren Sie die Root-Tabelle der 9-Bit-Codes Palette | : Farben | : #255 | 0ffh clr | 100H Ende | 101H | 100h Clear Pixel Local | Farbpalette String | Schwarz #40 28 | 028H 1. Pixel Immer zum Ausgeben von Weiß #255 ff | Zeichenfolge in Tabelle 28 ff | 102H immer 1. Zeichenfolge zu Tabelle FF | hinzufügen Lokale String White #255 ff ff | Zeichenfolge nicht in Tabelle gefunden | 0ffh - Ausgabecode für vorherige Zeichenfolge ff ff | 103H - Die neueste Zeichenfolge zu Tabelle FF | hinzufügen | - Initialisieren Sie die lokale String White #255 ff ff | Zeichenfolge in Tabelle Black #40 ff ff 28 | Zeichenfolge nicht in Tabelle gefunden | 103H - Ausgabescode für vorherige Zeichenfolge FF FF 28 | 104H - Die neueste Zeichenfolge zu Tabelle 28 | hinzufügen | - Initialisieren Sie die lokale String White #255 28 FF | Zeichenfolge in Tabelle White #255 28 ff ff | Zeichenfolge nicht in Tabelle gefunden | 102H - Ausgabecode für die vorherige Zeichenfolge 28 ff ff | 105H - Die neueste Zeichenfolge zu Tabelle FF | hinzufügen | - Initialisieren Sie die lokale String White #255 ff ff | Zeichenfolge in Tabelle White #255 ff ff ff | Zeichenfolge nicht in Tabelle gefunden | 103H - Ausgabecode für die vorherige Zeichenfolge ff ff ff | 106H - Die neueste Zeichenfolge zu Tabelle FF | hinzufügen | - Initialisieren Sie die lokale String White #255 ff ff | Zeichenfolge in Tabelle White #255 ff ff ff | Zeichenfolge in Tabelle White #255 ff ff ff ff | Zeichenfolge nicht in Tabelle gefunden | 106H - Ausgabecode für die vorherige Zeichenfolge ff ff ff ff | 107H - Die neueste Zeichenfolge zu Tabelle FF | hinzufügen | - Initialisieren Sie die lokale String White #255 ff ff | Zeichenfolge in Tabelle White #255 ff ff ff | Zeichenfolge in Tabelle White #255 ff ff ff ff | Zeichenfolge in Tabelle Nr. More Pixel 107H - Ausgabescode für die letzte Zeichenfolge 101h End

Für die Klarheit wird die Tabelle oben als aus Zunahme der Länge gebaut. Dieses Schema kann funktionieren, aber die Tabelle verbraucht eine unvorhersehbare Menge an Speicher. Der Speicher kann in der Praxis gespeichert werden, indem festgestellt wird, dass jede neue Zeichenfolge aus einer zuvor gespeicherten Zeichenfolge besteht, die durch ein Zeichen erweitert wird. Es ist wirtschaftlich, an jeder Adresse nur zwei Wörter zu speichern: eine vorhandene Adresse und ein Zeichen.

Der LZW -Algorithmus erfordert eine Suche nach der Tabelle für jedes Pixel. Eine lineare Suche durch bis zu 4096 Adressen würde die Codierung verlangsamen. In der Praxis können die Codes in der Reihenfolge des numerischen Wertes gespeichert werden; Dadurch kann jede Suche von einer SAR (aufeinanderfolgende Annäherungsregister, wie in einigen verwendet ADCs) mit nur 12 Größenvergleiche. Für diese Effizienz ist eine zusätzliche Tabelle erforderlich, um zwischen Codes und tatsächlichen Speicheradressen umzuwandeln. Die zusätzliche Aufrechterhaltung der Tabelle ist nur erforderlich, wenn ein neuer Code gespeichert wird, was viel weniger als Pixelrate auftritt.

Bilddecodierung

Das Dekodieren beginnt mit der Zuordnung der gespeicherten Bytes auf 9-Bit-Codes. Diese werden dekodiert, um die Pixelfarben wie unten gezeigt wiederherzustellen. Eine mit der im Encoder verwendete Tabelle wird durch Hinzufügen von Zeichenfolgen durch diese Regel erstellt:

Befindet sich eingehender Code in der Tabelle?
Ja Fügen Sie die Zeichenfolge für den lokalen Code hinzu, gefolgt vom ersten Byte der Zeichenfolge für eingehende Code
Nein Fügen Sie die Zeichenfolge für den lokalen Code hinzu, gefolgt von Kopie seines eigenen ersten Byte
  Wechsel 9-Bit ----> Lokales Tischpixel Codecode Code -> String Palette Farbaktion 100H 000H | #0 Stammtabelle mit 9-Bit-Codes initialisieren: | Palette: | Farben 0ffh | #255 100H | CLR 101H | Ende 028H | #40 SCHWARZ  Dekodieren Sie 1. Pixel 0ffh 028H | Eingehender Code in Tabelle | #255 WEISS   - Ausgangszeichenfolge aus Tabelle 102H | 28 FF - Zu Tabelle 103H 0ffh | Eingehender Code, der in Tabelle 103H nicht gefunden wird | Ff ff - zur Tabelle hinzufügen | - Ausgangszeichenfolge aus der Tabelle | #255 WEISS                          | #255 WEISS 102H 103H | Eingehender Code in Tabelle | - Ausgangszeichenfolge aus der Tabelle | #40 SCHWARZ                          | #255 WEISS                    104H | FF FF 28 - Zu Tabelle 103H 102H | Eingehender Code in Tabelle | - Ausgangszeichenfolge aus der Tabelle | #255 WEISS                          | #255 WEISS                    105H | 28 ff ff - Zu Tabelle 106H 103H | Eingehender Code, der in Tabelle 106H nicht gefunden wird | Ff ff ff - zur Tabelle hinzufügen | - Ausgangszeichenfolge aus der Tabelle | #255 WEISS                          | #255 WEISS                          | #255 WEISS 107H 106H | Eingehender Code, der in Tabelle 107H nicht gefunden wurde | Ff ff ff ff - zur Tabelle hinzufügen | - Ausgangszeichenfolge aus der Tabelle | #255 WEISS                          | #255 WEISS                          | #255 WEISS                          | #255 WEISS 101H | Ende

LZW -Codelängen

Kürzere Codelängen können für Paletten verwendet werden, die kleiner als die 256 Farben im Beispiel sind. Wenn die Palette nur 64 Farben beträgt (so dass die Farbindizes 6 Bit breit sind), können die Symbole zwischen 0 und 63 liegen und die Symbolbreite kann 6 Bit beträgt, wobei Codes mit 7 Bit beginnen. In der Tat muss die Symbolbreite nicht mit der Palettengröße übereinstimmen: Solange die dekodierten Werte immer geringer sind als die Anzahl der Farben in der Palette, können die Symbole eine Breite von 2 bis 8 und die Palettengröße von 2 sein. Von 2 bis 256. Wenn beispielsweise nur die ersten vier Farben (Werte 0 bis 3) der Palette verwendet werden, können die Symbole mit 2 Bits mit Codes mit 3 Bits angenommen werden.

Umgekehrt könnte die Symbolbreite auf 8 eingestellt werden, auch wenn nur die Werte 0 und 1 verwendet werden; Diese Daten würden nur eine zweifarbige Tabelle erfordern. Obwohl es keinen Sinn macht, die Datei auf diese Weise zu codieren, geschieht etwas Ähnliches für Bi-Farben-Bilder typischerweise: Die minimale Symbolbreite beträgt 2, auch wenn nur die Werte 0 und 1 verwendet werden.

Die Code -Tabelle enthält zunächst Codes, die ein Bit länger als die Symbolgröße sind, um die beiden speziellen Codes aufzunehmen CLR und Ende und Codes für Zeichenfolgen, die während des Prozesses hinzugefügt werden. Wenn die Tabelle voll ist, erhöht sich die Codelänge, um mehr Zeichenfolgen zu bieten, bis zu einem maximalen Code 4095 = FFF (Hex). Während der Decoder seine Tabelle erstellt, verfolgt er diese Zunahme der Codelänge und kann eingehende Bytes entsprechend auspacken.

Unkomprimiertes GIF

Ein 46 × 46 unkomprimiertes GIF mit 7-Bit-Symbolen (128 Farben, 8-Bit-Codes). Klicken Sie auf das Bild, um eine Erläuterung des Codes zu erhalten.

Der GIF -Codierungsprozess kann geändert werden, um eine Datei ohne LZW -Komprimierung zu erstellen, die als GIF -Bild weiterhin angezeigt werden kann. Diese Technik wurde ursprünglich eingeführt, um eine Patentverletzung zu vermeiden. Unkomprimiertes GIF kann auch ein nützliches Zwischenformat für einen Grafikprogrammierer sein, da einzelne Pixel für das Lesen oder Malen zugänglich sind. Eine unkomprimierte GIF -Datei kann in eine gewöhnliche GIF -Datei konvertiert werden, indem sie einfach über einen Bildeditor übergeben wird.

Die modifizierte Codierungsmethode ignoriert das Erstellen der LZW -Tabelle und emittiert nur die Wurzelpalettencodes und die Codes für Löschen und Stopp. Dies ergibt eine einfachere Codierung (eine 1-zu-1-Korrespondenz zwischen Codewerten und Palettencodes), opfert jedoch die gesamte Komprimierung: Jedes Pixel im Bild generiert einen Ausgabescode, der seinen Farbindex angibt. Bei der Verarbeitung eines unkomprimierten GIF wird ein Standard -GIF -Decoder nicht daran gehindert, Zeichenfolgen in seine Wörterbuchstabelle zu schreiben, aber die Codebreite muss sich niemals erhöhen, da dies eine andere Packung von Bits in Bytes auslöst.

Wenn die Symbolbreite ist n, die Codes der Breite n+1 fallen natürlich in zwei Blöcke: den unteren Block von 2n Codes für die Codierung einzelner Symbole und den oberen Block von 2n Codes, die vom Decoder für Sequenzen mit einer Länge mehr als eins verwendet werden. Von diesem oberen Block sind bereits die ersten beiden Codes entnommen: 2n für klar und 2n + 1 zum Stopp. Der Decoder muss auch daran gehindert werden, den letzten Code im oberen Block zu verwenden. 2n+1 - 1Wenn der Decoder diesen Steckplatz füllt, erhöht er die Codebreite. So gibt es im oberen Block 2n - 3 Codes, die dem Decoder verfügbar sind, die keine Erhöhung der Codebreite auslösen. Da der Decoder bei der Wartung der Tabelle immer einen Schritt hinter sich hat, generiert er keinen Tabelleneintrag, wenn er den ersten Code aus dem Encoder empfängt, sondern für jeden nachfolgenden Code einen generiert. Somit kann der Encoder erzeugen 2n - 2 Codes, ohne eine Erhöhung der Codebreite auszulösen. Daher muss der Encoder in Intervallen von zusätzlichen klaren Codes aussagen 2n - 2 Codes oder weniger, damit der Decoder das Codierungswörterbuch zurücksetzt. Mit dem GIF -Standard können solche zusätzlichen Codes jederzeit in die Bilddaten eingefügt werden. Der zusammengesetzte Datenstrom wird in Unterblockierungen unterteilt, die jeweils 1 bis 255 Bytes tragen.

Für das Beispiel des Beispiels 3 × 5 oben sind die folgenden 9-Bit-Codes "Clear" (100), gefolgt von Bildpixeln in Scanreihenfolge und "Stop" (101).

100 028 0ff 0ff 0ff 028 0ff 0ff 0ff 0ff 0ff 0ff 0ff 0ff 0ff 0ff 101

Nachdem die obigen Codes Bytes abgebildet sind, unterscheidet sich die unkomprimierte Datei von der komprimierten Datei so:

Byte # (hex) Hexadezimal Text oder Wert Bedeutung
320 14 20 20 Bytes unkomprimierte Bilddaten folgen
321 00 51 fc fb f7 0f c5 bf 7f ff fe fd fb f7 ef df bf 7f 01 01
335 00 0 Ende der Bilddaten

Komprimierungsbeispiel

Das triviale Beispiel für ein großes Bild der durchsenden Farbe zeigt die in GIF-Dateien verwendete LZW-Komprimierung variabler Länge.

Probenkomprimierung einer GIF -Datei
Code Pixel Anmerkungen
Nein.
Ni
Wert
Ni + 256
Länge
(Bits)
Dieser Code
Ni
Akkumuliert
Ni(Ni + 1)/2
Beziehungen mit ni Bewerben Sie sich nur auf gleichfarbige Pixel, bis die Codierungstabelle voll ist.
0 100h 9 Code -Tabelle löschen
1 Ffh 1 1 Oben linke Pixelfarbe als höchster Index einer 256-Farben-Palette ausgewählt
2 102H 2 3
3
255
103H
1ffh
3
255
6
32640
Letzter 9-Bit-Code
256
767
200h
3ffh
10 256
767
32896
294528
Letzter 10-Bit-Code
768
1791
400h
7ffh
11 768
1791
295296
1604736
Letzter 11-Bit-Code
1792
3839
800h
Fffh
12 1792
3839
1606528
7370880
Code -Tabelle voll
Fffh 3839 Der maximale Code kann für mehr Farbpixel wiederholt werden.
Gesamtdatenkomprimierung asymptotisch nähert sich 3839 × 8/12 = 2559+1/3
101H Ende der Bilddaten

Die gezeigten Codewerte sind in Bytes gepackt, die dann in Blöcke von bis zu 255 Bytes gepackt werden. Ein Block der Bilddaten beginnt mit einem Byte, das die Anzahl der folgenden Bytes erklärt. Der letzte Datenblock für ein Bild wird durch ein Blocklänge mit Null-Länge gekennzeichnet.

Interlacing

Die GIF -Spezifikation ermöglicht es jedem Bild im logischen Bildschirm einer GIF -Datei, um festzulegen, dass es miteinander verbunden ist. d.h., dass die Reihenfolge der Rasterzeilen in ihrem Datenblock nicht sequentiell ist. Dies ermöglicht eine teilweise Anzeige des Bildes, das erkennen kann, bevor das vollständige Bild gemalt wird.

Ein Interlaced -Bild wird von oben nach unten in Streifen 8 Pixel hoch unterteilt, und die Bildreihen werden in der folgenden Reihenfolge dargestellt:

  • Pass 1: Zeile 0 (die oberste Linie) von jedem Streifen.
  • Pass 2: Zeile 4 von jedem Streifen.
  • Pass 3: Zeilen 2 und 6 von jedem Streifen.
  • Pass 4: Zeilen 1, 3, 5 und 7 von jedem Streifen.

Die Pixel in jeder Zeile sind nicht miteinander verbunden, sondern werden nacheinander von links nach rechts präsentiert. Wie bei nicht interliegenden Bildern gibt es keine Unterbrechung zwischen den Daten für eine Zeile und den Daten für die nächste. Die Anzeige, dass ein Bild miteinander verbunden ist, ist im entsprechenden Bilddeskriptorblock ein Bit festgelegt.

Animiertes GIF

GIF kann verwendet werden, um Animation anzuzeigen, wie in diesem Bild von Newtons Wiege.
Eine GIF -Animation aus zwei Fotos, einer, eine Morphing in den anderen

Obwohl GIF nicht als Animationsmedium konzipiert wurde, schlug seine Fähigkeit, mehrere Bilder in einer Datei zu speichern Rahmen einer Animationssequenz. Zu erleichtern Anzeige Animationen, die GIF89A -Spezifikation, fügte die Grafiksteuerung (GCE) hinzu, mit der die Bilder (Frames) in der Datei mit zeitlichen Verzögerungen gemalt werden können und a Videoclip. Jeder Frame in einem Animations -GIF wird von seinem eigenen GCE eingeführt, in dem die Zeitverzögerung angibt, um zu warten, nachdem der Rahmen gezogen wurde. Globale Informationen zu Beginn der Datei gilt standardmäßig für alle Frames. Die Daten sind streamorientiert, sodass der Dateiversatz des Beginns jedes GCE von der Länge der vorhergehenden Daten abhängt. In jedem Rahmen sind die LZW-codierten Bilddaten in Unterblockern von bis zu 255 Bytes angeordnet. Die Größe jedes Unterblocks wird durch das Byte deklariert, das ihm vorausgeht.

Standardmäßig zeigt eine Animation die Abfolge von Frames nur einmal an und stoppt, wenn der letzte Frame angezeigt wird. Um eine Animation zu ermöglichen, um Schleifen zu ermöglichen, Netscape In den 1990er Jahren verwendete der Anwendungsweiterungsblock (das Anbieter ermöglicht, die GIF-Datei anwendungsspezifisch hinzuzufügen), um den Netscape Application Block (NAB) zu implementieren.[34] Dieser Block, der unmittelbar vor der Abfolge der Animationsrahmen platziert ist, gibt an, wie oft die Abfolge der Frames gespielt werden soll (1 bis 65535 Mal) oder dass er sich kontinuierlich wiederholen sollte (Null zeigt die Schleife für immer an). Die Unterstützung für diese sich wiederholenden Animationen erschien zuerst in Netscape Navigator Version 2.0 und dann auf andere Browser ausbreiten.[35] Die meisten Browser erkennen und unterstützen jetzt NAB, obwohl es nicht ausschließlich Teil der GIF89A -Spezifikation ist.

Das folgende Beispiel zeigt die Struktur der Animationsdatei Rotierende Erde (groß) .gif gezeigt (als Miniaturansicht) im Infobox des Artikels.

Struktur von GIF
Byte # (hex) Hexadezimal Text oder Wert Bedeutung
0 47 49 46 38 39 61 Gif89a Logischer Bildschirmdeskriptor
6 90 01 400 Breite in Pixeln
8 90 01 400 Höhe in Pixeln
A F7 GCT folgt für 256 Farben mit Auflösung 3×8 Bit/Primär
B 00 0 Hintergrundfarbe: #000000, schwarz
C 00 0 Standardpixel -Seitenverhältnis, 0: 0
D 00 Globaler Farbtabelle
30d 21 ff Anwendungsweiterung
30f 0b 11 Größe des Blocks einschließlich Anwendungsname und Überprüfung Bytes (immer 11)
310 4e 45 54 53 43 41 50 45 32 2e 30 Netscape2.0 8-Byte-Anwendungsname plus 3 Überprüfungsbytes
31b 03 3 Anzahl der Bytes im folgenden Unterblock
31c 01 1 Index des aktuellen Datenunterblocks (Immer 1 für den Netscape -Block)
31d Ff ff 65535 Nicht signierte Nummer von Wiederholungen
31f 00 Ende der Unterblockkette für den Anwendungsverlängerungsblock
320 21 F9 Grafikkontrollerweiterung für Frame Nr. 1
322 04 4 Anzahl der Bytes (4) im aktuellen Unterblockieren
323 04
000 ..... ... 001 .. ...... 0. ....... 0
(In Abschnitte unterteilt, um das Lesen zu lesen)
Reservierte, 5 untere Bits sind Bitfeld
Entsorgungsmethode 1: Entsorgen Sie nicht
Keine Benutzereingabe
Transparente Farbe, 0 bedeutet nicht angegeben
324 09 00 9 Rahmenverzögerung: 0,09 Sekunde Verzögerung vor dem Malen des nächsten Frame
326 Ff Transparenter Farbindex (unbenutzt in diesem Rahmen)
327 00 Ende der Subblock-Kette für Grafiksteuerungsverlängerungsblock
328 2c Bilddeskriptor von Frame Nr. 1
329 00 00 00 00 (0, 0) Nordwest-Eckposition des Bildes im logischen Bildschirm: (0, 0)
32d 90 01 90 01 (400, 400) Rahmenbreite und Höhe: 400×400 Pixel
331 00 0 Lokale Farbtabelle: 0 bedeutet keine und keine Interlacing
332 08 8 Minimum LZW -Codegröße für Bilddaten von Frame Nr. 1
333 Ff 255 Anzahl der Bytes von LZW-Bilddaten in den folgenden Unterblockern: 255 Bytes
334 ... Bilddaten, 255 Bytes
433 Ff 255 Anzahl der Bytes von LZW-Bilddaten in den folgenden Unterblockern, 255 Bytes
434 ... Bilddaten, 255 Bytes
Wiederholen Sie dies für die nächsten Blöcke
92c0 00 Ende der Unterblockkette für diesen Rahmen
92c1 21 F9 Grafikkontrollerweiterung für Frame Nr. 2
Wiederholen Sie dies für die nächsten Frames
Edabd 21 F9 Grafikkontrollerweiterung für Frame Nr. 44
Bildinformationen und Daten für Frame Nr. 44
F48F5 3b Trailer: Letzter Byte in der Datei, signalisiert EOF

Die Animationsverzögerung für jeden Frame ist im GCE in Hundertstel Sekunde angegeben. Eine Datenwirtschaft ist möglich, wenn ein Rahmen nur einen Teil der Pixel des Displays neu schreiben muss, da der Bilddeskriptor ein kleineres Rechteck definieren kann, das anstelle des gesamten Bildes sendet werden soll. Browser oder andere Displays, die animierte GIFs nicht unterstützen, zeigen normalerweise nur den ersten Frame.

Die Größe und Farbqualität von animierten GIF -Dateien kann je nach Anwendung, die zum Erstellen verwendet werden, erheblich variieren. Die Strategien zur Minimierung der Dateigröße umfassen die Verwendung einer gemeinsamen globalen Farbtabelle für alle Frames (anstelle einer vollständigen lokalen Farbtabelle für jeden Frame) und die Minimierung der Anzahl der in aufeinanderfolgenden Frames bedeckten Pixel (so dass nur die Pixel, die von einem Rahmen zum Rahmen wechseln, sich ändern Als nächstes sind im letzteren Rahmen enthalten). Erweiterte Techniken beinhalten die Modifizierung von Farbsequenzen, um dem vorhandenen LZW -Wörterbuch besser zu entsprechen, eine Form von Verlustige Komprimierung. Einfach eine Reihe unabhängiger Rahmenbilder in eine zusammengesetzte Animation zu packen, neigt dazu, große Dateigrößen zu erzeugen. Tools stehen zur Verfügung, um die Dateigröße bei einem vorhandenen GIF zu minimieren.

Metadaten

Metadaten Kann in GIF-Dateien als Kommentarblock, einen Klartextblock oder einen anwendungsspezifischen Anwendungsweiterungsblock gespeichert werden. Mehrere Grafik -Editoren verwenden inoffizielle Anwendungsweiterungsblöcke, um die Daten zu enthalten, die zum Generieren des Bildes verwendet werden, damit es für die weitere Bearbeitung wiederhergestellt werden kann.

Alle diese Methoden erfordern technisch gesehen, dass die Metadaten in Teilblocks unterteilt werden, damit Anwendungen durch den Metadatenblock navigieren können, ohne die interne Struktur zu kennen.

Das Erweiterbare Metadatenplattform (XMP) Metadata -Standard führte einen inoffiziellen, aber jetzt verbreiteten "XMP -Daten" -Anwendungsblock für die Einbeziehung von XMP -Daten in GIF -Dateien ein.[36] Da die XMP -Daten mit Verwendung codiert werden UTF-8 Ohne NUL -Zeichen gibt es keine 0 Bytes in den Daten. Anstatt die Daten in formale Unterblocks zu unterteilen, endet der Erweiterungsblock mit einem "magischen Trailer", der alle Anwendungen weiterleitet, die die Daten als Unterblocks zu einem endgültigen 0-Byte behandelt, der die Unterblock-Kette beendet.

Unisys und LZW Patentdurchsetzung

1977 und 1978,, Jacob Ziv und Abraham Lempel veröffentlichte ein Paar Artikel über eine neue Klasse von verlustfreien Datenkompressionsalgorithmen, die jetzt gemeinsam als als bezeichnet werden LZ77 und LZ78. 1983,, Terry Welch entwickelte eine schnelle Variante von LZ78, die benannt wurde Lempel -Ziv -Welch (LZW).[37][38]

Welch reichte im Juni 1983 eine Patentanmeldung für die LZW -Methode ein. Das resultierende Patent, US4558302,,[39] gewährt im Dezember 1985, wurde zugewiesen Sperry Corporation Wer fusionierte anschließend mit Burroughs Corporation 1986 und gebildet und gebildet Unisys.[37] Weitere Patente wurden in Großbritannien, Frankreich, Deutschland, Italien, Japan und Kanada erhalten.

Zusätzlich zu den oben genannten Patenten enthält Welchs Patent von 1983 auch Zitate zu mehreren anderen Patenten, die es beeinflussten, darunter:

Im Juni 1984 wurde ein Artikel von Welch in der veröffentlicht IEEE Magazin, das die LZW -Technik zum ersten Mal öffentlich beschrieb.[44] LZW wurde zu einer beliebten Datenkomprimierungstechnik, und als das Patent gewährt wurde, schließen Unisys Lizenzvereinbarungen mit über hundert Unternehmen ab.[37][45]

Die Popularität von LZW führte CompuServe Um es als Komprimierungstechnik für ihre 1987 entwickelte Version von GIF zu wählen. Zu dieser Zeit war sich CompuServe des Patents nicht bewusst.[37] UNISYS wurde bewusst, dass die Version von GIF die LZW -Komprimierungstechnik verwendete und im Januar 1993 Lizenzverhandlungen mit CompuServe abgeschlossen hatte. Die anschließende Vereinbarung wurde am 24. Dezember 1994 bekannt gegeben.[38] UNISYS gaben an, dass alle wichtigen kommerziellen Online-Informationsdienstleistungsunternehmen, die das LZW-Patent beschäftigen, um die Technologie von UNISYS zu einem angemessenen Satz zu lizenzieren, jedoch keine Lizenzierung oder Gebühren für nichtkommerzielle, nicht zu bezahlende Gebühren verlangen würden, ohne dass sie nicht kommerziell sind, nicht, nicht zu zahlen, nicht zu bezahlt, ohne dass sie nicht zu bezahlt werden müssen, nicht Profit GIF-basierte Anwendungen, einschließlich solcher für die Nutzung der Online-Dienste.[45]

Nach dieser Ankündigung gab es eine weit verbreitete Verurteilung von CompuServe und Unisys, und viele Softwareentwickler drohten, GIF nicht mehr zu verwenden. Das PNG -Format (Siehe unten) wurde 1995 als beabsichtigter Ersatz entwickelt.[37][38][44] Die Unterstützung der Hersteller von Webbrowsern und anderen Software für das PNG -Format erwies sich jedoch als schwierig, und es war nicht möglich, GIF zu ersetzen, obwohl PNG die Beliebtheit allmählich zugenommen hat.[37] Daher wurden GIF -Variationen ohne LZW -Kompression entwickelt. Zum Beispiel die LiBungif -Bibliothek basierend auf Eric S. RaymondGiflib ermöglicht die Erstellung von GIFs, die dem Datenformat folgten, aber die Komprimierungsfunktionen vermieden und so die Verwendung des Unisys LZW -Patents vermeiden.[46] A 2001 Dr. Dobbs In Artikel wurde ein Weg zur Erzielung von LZW-kompatibler Codierung beschrieben, ohne seine Patente zu verletzen.[47]

Im August 1999 änderte Unisys die Einzelheiten ihrer Lizenzpraxis und kündigte die Option für Eigentümer bestimmter nichtkommerzieller und privater Websites an, Lizenzen für die Zahlung einer einmaligen Lizenzgebühr von 5000 oder 7500 USD zu erhalten.[48] Solche Lizenzen waren für Website -Eigentümer oder andere GIF -Benutzer, die lizenzierte Software verwendet hatten, nicht erforderlich, um GIFs zu generieren. Trotzdem war Unisys Tausenden von Online -Angriffen und missbräuchlichen E -Mails von Benutzern ausgesetzt, die der Ansicht waren, dass ihnen 5000 US -Dollar berechnet oder für die Verwendung von GIFs auf ihren Websites verklagt werden würden.[49] Obwohl Unisys Hunderten von gemeinnützigen Organisationen, Schulen und Regierungen kostenlose Lizenzen erteilte, konnte sie keine gute Werbung generieren und weiterhin von Einzelpersonen und Organisationen wie dem verurteilt wurden Liga für die Programmierfreiheit der 1999 die Kampagne "Burn All GIFs" begann.[50][51]

Das US -amerikanische LZW -Patent lief am 20. Juni 2003 ab.[52] Die Gegenstücke in Großbritannien, Frankreich, Deutschland und Italien sind am 18. Juni 2004 abgelaufen, die japanischen Patente sind am 20. Juni 2004 abgelaufen, und das kanadische Patent lief am 7. Juli 2004 ab.[52] Während Unisys weitere Patente und Patentanwendungen im Zusammenhang mit Verbesserungen der LZW -Technik hat[52] LZW selbst (und folglich GIF) ist seit Juli 2004 frei zu verwenden.[53]

Alternativen

Png

Tragbare Netzwerkgrafiken (PNG) wurde als Ersatz für GIF entwickelt, um eine Verletzung des Patents von Unisys gegen die LZW -Komprimierungstechnik zu vermeiden.[37] PNG bietet eine bessere Komprimierung und mehr Funktionen als GIF,[54] Animation ist die einzige bedeutende Ausnahme. PNG ist besser geeignet als GIF in Fällen, in denen die wahre Farbbildgebung und Alpha -Transparenz sind erforderlich.

Obwohl die Unterstützung für das PNG -Format langsam kam Internetbrowser Unterstützen Sie PNG. Ältere Versionen von Internet Explorer Unterstützen Sie nicht alle Funktionen von PNG. Versionen 6 und früher unterstützen nicht Alpha -Kanal Transparenz ohne Microsoft-spezifische HTML-Erweiterungen.[55] Gamma Die Korrektur von PNG -Bildern wurde vor Version 8 nicht unterstützt, und die Anzeige dieser Bilder in früheren Versionen hat möglicherweise den falschen Farbton.[56]

Für identische 8-Bit-Bilddaten (oder niedrigere) Bilddaten sind PNG-Dateien aufgrund der effizienteren Komprimierungstechniken, die bei der PNG-Codierung verwendet werden, typischerweise kleiner als die äquivalenten GIFs.[57] Die vollständige Unterstützung für GIF wird hauptsächlich durch die komplexe Leinwandstruktur kompliziert, die es zulässt. Dies ermöglicht jedoch die kompakten Animationsfunktionen.

Animationsformate

Videos lösen viele Probleme, die GIFs durch gemeinsame Verwendung im Web präsentieren. Dazu gehören drastisch kleiner Dateigrößen, die Fähigkeit, die zu übertreffen 8-Bit-Farbe Einschränkung und bessere Rahmenhandhabung und Komprimierung durch Codecs. Praktisch universelle Unterstützung für das GIF -Format in Internetbrowser und mangelnde offizielle Unterstützung für Video in der Html Der Standard führte dazu, dass GIF zum Zwecke der Anzeige kurzer Video-ähnlicher Dateien im Web anwächst.

  • Mng ("Multiple-Image-Netzwerkgrafiken") wurde ursprünglich als PNG-basierte Lösung für Animationen entwickelt. MNG erreichte die Version 1.0 im Jahr 2001, aber nur wenige Anwendungen unterstützen dies.
  • APNG ("Animierte tragbare Netzwerkgrafiken") wurde von vorgeschlagen von Mozilla 2006. APNG ist eine Erweiterung des PNG -Formats als Alternative zum MNG -Format. APNG wird ab 2019 von den meisten Browsern unterstützt.[58] APNG bietet die Möglichkeit, PNG -Dateien zu animieren und gleichzeitig die Kompatibilität in Decodern zurückzuhalten, die den Animations -Chunk nicht verstehen können (im Gegensatz zu MNG). Ältere Decoder werden einfach den ersten Rahmen der Animation rendern.
Die PNG -Gruppe lehnte APNG offiziell als offizielle Verlängerung am 20. April 2007 ab.[59]
Es gab mehrere nachfolgende Vorschläge für ein einfaches animiertes Grafikformat basierend auf PNG unter Verwendung mehrerer verschiedener Ansätze.[60] Trotzdem wird APNG noch von Mozilla entwickelt und wird in unterstützt Firefox 3.0[61][62] während die MNG -Unterstützung fallen gelassen wurde.[63][64] APNG wird derzeit von allen großen Webbrowsern, einschließlich Chrome (seit Version 59.0), Opera, Firefox und Edge, unterstützt.
  • Eingebettet Adobe Flash Objekte und
  • MPEG Auf einigen Websites wurden Dateien verwendet, um einfaches Video anzuzeigen, erforderten jedoch die Verwendung eines zusätzlichen Browser -Plugins.
  • Webm und
  • Webp sind in der Entwicklung und werden von einigen Webbrowsern unterstützt.[65]
  • Weitere Optionen für Webanimation sind das Servieren einzelner Frames mit der Verwendung Ajax, oder
  • animieren SVG ("Skalierbare Vektorgrafiken") Bilder mit JavaScript oder Lächer ("Synchronisierte Multimedia -Integrationssprache").
  • Mit der Einführung der weit verbreiteten Unterstützung der HTML5 -Video () Tag In den meisten Webbrowsern verwenden einige Websites eine geschleifende Version des von Video -Tags generierten Video -Tags von JavaScript Funktionen. Dies verleiht dem Aussehen eines GIF, aber mit den Vorteilen von komprimiertem Video.
Bemerkenswerte Beispiele sind Gfycat und Imgur und ihre GIFV MetaFormat, das wirklich ein Video -Tag ist, das eine Looped spielt MP4 oder Webm Komprimiertes Video.[66]
Im Vergleich zum GIF -Format, dem die DCT -Kompression fehlt, ermöglicht Heif eine deutlich effizientere Komprimierung. Heif speichert weitere Informationen und erzeugt hochwertige animierte Bilder mit einem kleinen Bruchteil einer äquivalenten GIF-Größe.[68]
  • Das AV1 Codec kann auch entweder als Video oder als sequenziertes Bild verwendet werden.

Verwendet

Im April 2014, 4chan Unterstützung für Still hinzugefügt Webm Videos, die unter 3 MB groß und 2 Minuten lang sind, Länge,[70][71] und im Oktober 2014, Imgur Begann mit dem Konvertieren von GIF -Dateien, die auf die Website hochgeladen wurden, in ein Video und geben den Link zum HTML -Player das Erscheinungsbild einer tatsächlichen Datei mit a .gifv Verlängerung.[72][73]

Im Januar 2016, Telegramm begann, alle GIFs wieder zu kennzeichnen MPEG-4 Videos, die "bis zu 95% weniger Speicherplatz für die gleiche Bildqualität erfordern".[74]

Siehe auch

Verweise

  1. ^ a b c "Grafik -Austauschformat, Version 87a". W3c. 15. Juni 1987. Archiviert vom Original am 22. Dezember 2018. Abgerufen 13. Oktober 2012.
  2. ^ a b c "Grafik -Austauschformat, Version 89a". W3c. 31. Juli 1990. Archiviert vom Original am 22. Dezember 2018. Abgerufen 6. März 2009.
  3. ^ "Online -Kunst". Apple -Anwendungen von Computes!. Dezember 1987. p. 10. Abgerufen 14. September 2016.
  4. ^ Holdener III, Anthony (2008). AJAX: Der definitive Handbuch: Interaktive Anwendungen für das Web. O'Reilly Media. ISBN 978-0596528386.
  5. ^ Furht, Borko (2008). Enzyklopädie von Multimedia. Springer. ISBN 978-0387747248.
  6. ^ McHugh, Molly (29. Mai 2015). "Sie können endlich, wirklich, wirklich, wirklich GIFs auf Facebook posten". Verdrahtet. Wired.com. Archiviert vom Original am 30. Mai 2015. Abgerufen 29. Mai 2015.
  7. ^ Perez, Sarah (29. Mai 2015). "Facebook bestätigt, dass es offiziell GIFs unterstützen wird". Techcrunch.com. Archiviert vom Original am 30. Mai 2015. Abgerufen 29. Mai 2015.
  8. ^ "GIF -Aufkleber einführen". Instagram. 23. Januar 2018. Archiviert Aus dem Original am 12. Dezember 2019. Abgerufen 19. September 2019.
  9. ^ "Oxford Dictionaries USA Word des Jahres 2012". Oxfordwords Blog. Oxford American Wörterbücher. 13. November 2012. Archiviert Aus dem Original am 3. August 2014. Abgerufen 1. Mai 2013.
  10. ^ Flood, Alison (27. April 2013). "GIF Ist Amerikas Wort des Jahres? Das nenne ich Omnishambles ". Bücher Blog. Der Wächter. London. Archiviert Aus dem Original am 1. Dezember 2016. Abgerufen 1. Mai 2013.
  11. ^ Olsen, Steve. "Die GIF -Ausspracheseite". Archiviert Aus dem Original am 25. Februar 2009. Abgerufen 6. März 2009.
  12. ^ a b c "GIFs Erfinder sagt, Wörterbücher ignorieren und sagen 'Jif'". BBC News. 22. Mai 2013. Archiviert vom Original am 27. Juni 2018. Abgerufen 22. Mai 2013.
  13. ^ Buck, Stephanie (21. Oktober 2014). "70 Prozent der Menschen weltweit aussprechen GIF mit einem hart g". Massig. Archiviert vom Original am 23. Dezember 2021. Abgerufen 24. Dezember 2021.
  14. ^ van der Meulen, Marten (22. Mai 2019). "Obama, Scuba oder Geschenk ?: Autorität und Argumentation in der Online -Diskussion über die Aussprache von GIF". English Today. 36 (1): 45–50.
  15. ^ "GIF". Das American Heritage Abkreviations Dictionary, dritte Ausgabe. Houghton Mifflin Company. 2005. Archiviert Aus dem Original am 3. September 2011. Abgerufen 15. April 2007.
  16. ^ "GIF". Das Cambridge Dictionary of American English. Cambridge University Press. Archiviert Aus dem Original am 27. Februar 2014. Abgerufen 19. Februar 2014.
  17. ^ "GIF - Definition aus dem Merriam -Webster -Wörterbuch". Merriam-Webster Dictionary. Merriam-Webster, integriert. Archiviert Aus dem Original am 22. Oktober 2013. Abgerufen 6. Juni 2013.
  18. ^ "GIF". Oxford Wörterbücher online. Oxford University Press. Archiviert Aus dem Original am 12. Oktober 2014. Abgerufen 7. Oktober 2014.
  19. ^ "GIF -Substantiv - Definition, Bilder, Aussprache und Nutzungsnotizen | Oxford Advanced Learners Dictionary". Die Wörterbücher von Oxford -Lernenden. Archiviert vom Original am 24. November 2020. Abgerufen 6. Februar 2021.
  20. ^ "GIF | Definition von GIF durch Oxford Dictionary". Lexiko. Archiviert vom Original am 13. Februar 2021. Abgerufen 6. Februar 2021.
  21. ^ Stevenson, Angus, hrsg. (2010). Oxford Dictionary of English (3. Aufl.). Oxford University Press. ISBN 9780199571123. OCLC 729551189.
  22. ^ Das neue Oxford American Dictionary (2. Aufl.). Oxford University Press. 2005. p. 711.
  23. ^ Das neue Oxford American Dictionary (3. Aufl.). 2012. (Teil der Macintosh-integrierten Wörterbücher).
  24. ^ O'Leary, Amy (21. Mai 2013). "Eine Ehre für den Schöpfer des GIF". Die New York Times. Archiviert vom Original am 22. Mai 2013. Abgerufen 22. Mai 2013.
  25. ^ a b Rothberg, Daniel (4. Dezember 2013). ""Gefahr" watet in "GIF" Ausspracheschlacht ". Los Angeles Zeiten. Archiviert Aus dem Original am 6. Dezember 2013. Abgerufen 4. Dezember 2013.
  26. ^ O'Leary, Amy (23. Mai 2013). "Battle um 'GIF' Aussprache bricht aus". Die New York Times. Archiviert Aus dem Original am 16. Dezember 2013. Abgerufen 5. Dezember 2013.
  27. ^ Valinsky, Jordanien (25. Februar 2020). "Jif legt die große Debatte mit einem Gif Peanut Butter -Glas ab". CNN. Archiviert vom Original am 25. Februar 2020. Abgerufen 25. Februar, 2020.
  28. ^ Marur, D.R.; Bhaskar, V. (März 2012). "2012 Internationale Konferenz über Geräte, Schaltkreise und Systeme (ICDCs)". Geräte, Schaltkreise und Systeme (ICDCs). Internationale Konferenz über Geräte, Schaltkreise und Systeme (ICDCs). Karunya University; Coimbatore, Indien: IEEE. S. 297–301. doi:10.1109/ICDCSyst.2012.6188724. ISBN 9781457715457. Archiviert Aus dem Original am 2. Juli 2017. Abgerufen 11. März 2015.
  29. ^ S. Chin; D. Iverson; O. Campesato; P. Trani (2011). Pro Android Flash (PDF). New York: Apress. p. 350. ISBN 9781430232315. Archiviert (PDF) Aus dem Original am 2. April 2015. Abgerufen 11. März 2015.
  30. ^ a b c Andreas Kleinert (2007). "GIF 24 -Bit (Truecolor) Erweiterungen". Archiviert von das Original am 16. März 2012. Abgerufen 23. März 2012.
  31. ^ a b Philip Howard. "True-Color GIF-Beispiel". Archiviert von das Original am 22. Februar 2015. Abgerufen 23. März 2012.
  32. ^ "Nullsleep - Jeremiah Johnson - Animated GIF Mindestrahmen -Verzögerungsbrowser -Kompatibilitätsstudie". Archiviert Aus dem Original am 10. Oktober 2014. Abgerufen 26. Mai 2015.
  33. ^ "Sie sind unterschiedlich! Wie man die Animationsrate von GIF -Dateien abgibt [Accons [sic] Browser ". Entwicklerblog. 14. Februar 2012. archiviert von das Original am 1. Februar 2017. Abgerufen 15. Juni 2017.
  34. ^ Royal Frazier. "Alles über GIF89a". Archiviert von das Original am 18. April 1999. Abgerufen 7. Januar 2013.
  35. ^ Scott Walter (1996). Web -Scripting -Geheimwaffen. Que Publishing. ISBN 0-7897-0947-3.
  36. ^ "XMP -Spezifikation Teil 3: Speicher in Dateien" (PDF). Adobe. 2016. S. 11–12. Archiviert (PDF) vom Original am 25. Februar 2018. Abgerufen 16. August 2018.
  37. ^ a b c d e f g Greg Roelofs. "Historie des Portable Network Graphics (PNG) -Format". Archiviert Aus dem Original am 7. März 2012. Abgerufen 23. März 2012.
  38. ^ a b c Stuart Caie. "Trauriger Tag ... Gif Patent tot mit 20". Archiviert Aus dem Original am 10. Februar 2012. Abgerufen 23. März 2012.
  39. ^ US 4558302, Welch, Terry A., veröffentlicht 1985-12-10, zugewiesene Sperry Corp. 
  40. ^ JP Patent S5719857a, Kanatsu, Jiyun, "Data Compression Storage Device", veröffentlicht 1982-02-02, zugewiesene Nippon Electric Corp. 
  41. ^ JP Patent S57101937a, Kanatsu, Jiyun, "Data Storage Device", veröffentlicht 1986-20-24, zugewiesene Nippon Electric Corp. 
  42. ^ De Patent 3118676, Eckhart, Heinz Karl, "Verfahre zur Kompression Redundanter Folgen Serieller DATENELEMENTE [Methode zur Komprimierung redundanter Sequenzen serieller Datenelemente]", veröffentlicht 1982-12-02 
  43. ^ US -Patent 4.558.302
  44. ^ a b "Die GIF -Kontroverse: Die Perspektive eines Softwareentwicklers". Archiviert Aus dem Original am 23. August 2016. Abgerufen 26. Mai 2015.
  45. ^ a b "Unisys klärt die Richtlinien bezüglich der Patentnutzung bei Online-Serviceangeboten". Archiviert von das Original am 7. Februar 2007. - archiviert von Liga für die Programmierfreiheit
  46. ^ "Libungif". Archiviert Aus dem Original am 13. April 2015. Abgerufen 26. Mai 2015.
  47. ^ Cargill, Tom (1. Oktober 2001). "Ersetzen eines Wörterbuchs durch eine quadratische Wurzel". Dr. Dobbs Journal. Archiviert Aus dem Original am 28. Juni 2017. Abgerufen 20. Januar 2017.
  48. ^ "LZW -Software und Patentinformationen". Archiviert von das Original am 8. Juni 2009. Abgerufen 31. Januar 2007. - Klarstellung vom 2. September 1999
  49. ^ Unisys verklagt nicht (die meisten) Webmaster für die Verwendung von GIFs Archiviert 10. Mai 2017 bei der Wayback -MaschineSlashdot Untersuchung der Kontroverse
  50. ^ "Brennen Sie alle GIFS -Tag". Archiviert von das Original am 13. Oktober 1999.
  51. ^ Brennen Sie alle GIFs Archiviert 3. Februar 2007 bei der Wayback -Maschine - Ein Projekt der Liga für die Programmierfreiheit (neueste Version)
  52. ^ a b c "Lizenzinformationen zu GIF und anderen LZW-basierten Technologien". Archiviert von das Original am 2. Juni 2009. Abgerufen 26. April 2005.
  53. ^ "Warum gibt es keine GIF -Dateien auf GNU -Webseiten". Kostenlose Software -Stiftung. Archiviert Aus dem Original am 19. Mai 2012. Abgerufen 19. Mai 2012.
  54. ^ "PNG gegen GIF -Komprimierung". Archiviert Aus dem Original am 15. Juli 2009. Abgerufen 8. Juni 2009.
  55. ^ "Alphaimageloader -Filter". Microsoft. Archiviert Aus dem Original am 3. Oktober 2014. Abgerufen 26. Mai 2015.
  56. ^ "Was ist neu im Internet Explorer 7". Msdn. Archiviert Aus dem Original am 1. März 2009. Abgerufen 6. März 2009.
  57. ^ "PNG Bilddateiformat". Archiviert Aus dem Original am 14. Juni 2009. Abgerufen 8. Juni 2009.
  58. ^ "Kann ich ... Supporttabellen für HTML5, CSS3 usw. verwenden". caniuse.com. Archiviert Aus dem Original am 19. Februar 2018. Abgerufen 10. April 2020.
  59. ^ "Abstimmung fehlgeschlagen: APNG 20070405A". SourceForge Mailingliste. 20. April 2007. Archiviert Aus dem Original am 13. Februar 2013. Abgerufen 14. Juli 2013.
  60. ^ "Diskussion für ein einfaches" animiertes "PNG -Format". Archiviert von das Original am 26. Februar 2009. Abgerufen 12. Juli 2011.
  61. ^ "APNG -Spezifikation". Archiviert Aus dem Original am 5. Juli 2010. Abgerufen 26. Mai 2015.
  62. ^ "Mozilla Labs» Blog -Archiv »Bessere Animationen in Firefox 3". Archiviert Aus dem Original am 7. März 2016. Abgerufen 3. Februar 2016.
  63. ^ "195280 - Entfernung der MNG/JNG -Unterstützung". Archiviert vom Original am 25. Februar 2021. Abgerufen 26. Mai 2015.
  64. ^ "18574 - (MNG) Wiederherstellen Unterstützung für das MNG -Animationsformat und das JNG -Bildformat". Archiviert vom Original am 17. März 2021. Abgerufen 26. Mai 2015.
  65. ^ "Chromium Blog: Chrome 32 Beta: Animierte Webp -Bilder und schnelleres Chrom für Android Touch -Eingabe". Blog.chromium.org. 21. November 2013. Archiviert Aus dem Original am 17. Juli 2018. Abgerufen 1. Februar 2014.
  66. ^ "GIFV - Imgur Blog einführen". imgur.com. 9. Oktober 2014. Archiviert Aus dem Original am 14. Dezember 2014. Abgerufen 14. Dezember 2014.
  67. ^ Thomson, Gavin; Shah, Athar (2017). "Heif und HEVC einführen" (PDF). Apple Inc. Archiviert (PDF) Aus dem Original am 19. Januar 2020. Abgerufen 5. August 2019.
  68. ^ "HEIF -Vergleich - Bilddateiformat mit hoher Effizienz". Nokia Technologies. Archiviert Aus dem Original am 25. Juli 2019. Abgerufen 5. August 2019.
  69. ^ "#3271 (Ermöglichen Sie zusätzliche Pixelformate mit libvpx-vp9)-ffmpeg". Trac.ffmpeg.org. Archiviert vom Original am 16. Juni 2020. Abgerufen 10. April 2020.
  70. ^ Dewey, Caitlin. "Treffen Sie die Technologie, die GIFs veraltet machen könnte". Die Washington Post. Archiviert vom Original am 11. Mai 2015. Abgerufen 4. Februar 2015.
  71. ^ "Webm -Unterstützung auf 4chan". 4chan Blog. Archiviert Aus dem Original am 6. April 2014. Abgerufen 4. Februar 2015.
  72. ^ "GIFV einführen". Imgur. 9. August 2014. Archiviert vom Original am 5. Mai 2020. Abgerufen 21. Juli 2016.
  73. ^ Allan, Patrick (9. Oktober 2014). "Imgur überarbeitet GIFs für schnellere Geschwindigkeiten und höherer Qualität mit GIFV". Lifehacker. Archiviert Aus dem Original am 3. Februar 2015. Abgerufen 4. Februar 2015.
  74. ^ "GIF -Revolution". Offizieller Telegrammblog. 4. Januar 2016. Archiviert Aus dem Original am 10. Januar 2016. Abgerufen 4. Januar 2016.

Externe Links