It's Fashion Look It Up Gif

Bitmap image file format family unit

GIF
Rotating earth (large).gif

An animated GIF of a rotating globe

Filename extension

.gif

Internet media blazon

image/gif

Type code GIFf
Uniform Type Identifier (UTI) com.compuserve.gif
Magic number GIF87a/GIF89a
Developed past CompuServe
Initial release 15 June 1987; 34 years ago  (1987-06-15) [1]
Latest release

89a
1989; 33 years ago  (1989) [2]

Blazon of format lossless bitmap epitome format
Website www.w3.org/Graphics/GIF/spec-gif89a.txt

The Graphics Interchange Format (GIF; GHIF or JIF , see pronunciation) is a bitmap prototype format that was developed past a team at the online services provider CompuServe led by American calculator scientist Steve Wilhite and released on 15 June 1987.[1] Information technology has since come into widespread usage on the Www due to its wide back up and portability between applications and operating systems.

The format supports upwards to 8 $.25 per pixel for each epitome, allowing a single prototype to reference its own palette of up to 256 different colors chosen from the 24-bit RGB colour infinite. It besides supports animations and allows a carve up palette of upwards to 256 colors for each frame. These palette limitations brand GIF less suitable for reproducing colour photographs and other images with colour gradients, but well-suited for simpler images such as graphics or logos with solid areas of colour.

GIF images are compressed using the Lempel–Ziv–Welch (LZW) lossless information compression technique to reduce the file size without degrading the visual quality. This pinch technique was patented in 1985. Controversy over the licensing agreement betwixt the software patent holder, Unisys, and CompuServe in 1994 spurred the development of the Portable Network Graphics (PNG) standard. By 2004 all the relevant patents had expired.

History [edit]

CompuServe introduced GIF on 15 June 1987 to provide a colour image format for their file downloading areas. This replaced their earlier run-length encoding format, which was black and white only. GIF became popular because it used LZW information compression. Since this was more efficient than the run-length encoding used by PCX and MacPaint, adequately big images could be downloaded reasonably rapidly even with slow modems.

The original version of GIF was called 87a.[1] In 1989, CompuServe released an enhanced version, called 89a,[ii] which added support for animation delays (multiple images in a stream were already supported in 87a), transparent groundwork colors, and storage of awarding-specific metadata. The 89a specification too supports incorporating text labels as text (not embedding them in the graphical information), but as there is little control over display fonts, this feature is non widely used. The two versions tin exist distinguished by looking at the first six bytes of the file (the "magic number" or signature), which, when interpreted as ASCII, read "GIF87a" and "GIF89a", respectively.

CompuServe encouraged the adoption of GIF by providing downloadable conversion utilities for many computers. By Dec 1987, for example, an Apple IIGS user could view pictures created on an Atari ST or Commodore 64.[3] GIF was 1 of the first two image formats ordinarily used on Web sites, the other being the black-and-white XBM.[4]

In September 1995 Netscape Navigator ii.0 added the ability for animated GIFs to loop.

The feature of storing multiple images in one file, accompanied past control information, is used extensively on the Web to produce unproblematic animations.

The optional interlacing feature, which stores prototype scan lines out of social club in such a fashion that fifty-fifty a partially downloaded prototype was somewhat recognizable, too helped GIF's popularity,[five] every bit a user could abort the download if it was not what was required.

In May 2015 Facebook added back up for GIF.[6] [7] In January 2018 Instagram too added GIF stickers to the story mode.[8]

Terminology [edit]

As a noun, the word GIF is found in the newer editions of many dictionaries. In 2012, the American wing of the Oxford University Press recognized GIF as a verb as well, meaning "to create a GIF file", as in "GIFing was the perfect medium for sharing scenes from the Summertime Olympics". The printing'southward lexicographers voted information technology their word of the year, saying that GIFs have evolved into "a tool with serious applications including research and journalism".[9] [ten]

Pronunciation [edit]

A humorous image announcing the launch of a Tumblr account for the White House suggests pronouncing GIF with a hard g.

The creators of the format pronounced the acronym GIF as , with a soft k as in 'gin'. Wilhite stated that the intended pronunciation deliberately echoes the American peanut butter brand Jif, and CompuServe employees would oft quip "choosy developers choose GIF", a spoof of Jif'due south tv set commercials.[11] The word is now likewise widely pronounced , with a hard yard as in 'gift'.[12] In 2017, an informal poll on the programming website Stack Overflow showed some numerical preference for the difficult-thou pronunciation,[xiii] especially among respondents in eastern Europe, though both the soft g and pronouncing each letter of the alphabet individually were plant to exist popular in Asia and parts of Africa.[xiv]

Dictionary.com [15] cites both, indicating every bit the main pronunciation, while Cambridge Dictionary of American English [16] offers only the hard-g pronunciation. Merriam-Webster's Collegiate Dictionary [17] and Oxford Dictionaries cite both pronunciations, but place the hard g first: .[18] [19] [twenty] [21] The New Oxford American Dictionary gave just in its 2nd edition[22] but updated it to in the third edition.[23]

The disagreement over the pronunciation has led to heated Cyberspace debate. On the occasion of receiving a lifetime achievement honour at the 2013 Webby Awards ceremony, Wilhite publicly rejected the hard-g pronunciation;[12] [24] [25] his speech led to more than 17,000 posts on Twitter and dozens of news manufactures.[26] The White House[12] and the Television set program Jeopardy! besides entered the debate in 2013.[25]

In February 2020, The J.M. Smucker Company, the owners of the Jif make, partnered with the animated epitome database and search engine Giphy to release a limited-edition "Jif vs. GIF" (hashtagged as #JIFvsGIF) jar of peanut butter that had a label humorously declaring the soft-g pronunciation to refer exclusively to the peanut butter, and GIF to be exclusively pronounced with the hard-g pronunciation.[27]

Usage [edit]

GIFs are suitable for abrupt-edged line art with a express number of colors, such as logos. This takes advantage of the format's lossless compression, which favors flat areas of uniform colour with well defined edges.[28] They can also exist used to store low-color sprite data for games.[29] GIFs can exist used for small animations and low-resolution video clips, or equally reactions in online messaging used to convey emotion and feelings instead of using words. They are popular on social media platforms such as Tumblr, Facebook and Twitter.[ citation needed ]

File format [edit]

Conceptually, a GIF file describes a fixed-sized graphical area (the "logical screen") populated with zero or more than "images". Many GIF files have a single image that fills the entire logical screen. Others divide the logical screen into divide sub-images. The images may as well function as animation frames in an animated GIF file, just again these need not fill the entire logical screen.

GIF files start with a fixed-length header ("GIF87a" or "GIF89a") giving the version, followed by a fixed-length Logical Screen Descriptor giving the pixel dimensions and other characteristics of the logical screen. The screen descriptor may too specify the presence and size of a Global Color Tabular array (GCT), which follows next if nowadays.

Thereafter, the file is divided into segments, each introduced by a 1-byte sentinel:

  • An image (introduced by 0x2C, an ASCII comma ',')
  • An extension cake (introduced by 0x21, an ASCII assertion point '!')
  • The trailer (a unmarried byte of value 0x3B, an ASCII semicolon ';'), which should be the last byte of the file.

An prototype starts with a fixed-length Image Descriptor, which may specify the presence and size of a Local Color Table (which follows next if nowadays). The prototype data follows: one byte giving the bit width of the unencoded symbols (which must be at to the lowest degree 2 $.25 wide, even for bi-colour images), followed by a linked list of sub-blocks containing the LZW-encoded data.

Extension blocks (blocks that "extend" the 87a definition via a mechanism already defined in the 87a spec) consist of the watch, an additional byte specifying the blazon of extension, and a linked list of sub-blocks with the extension data. Extension blocks that modify an image (like the Graphic Command Extension that specifies the optional animation filibuster time and optional transparent groundwork color) must immediately precede the segment with the image they refer to.

The linked lists used by the image information and the extension blocks consist of series of sub-blocks, each sub-cake get-go with a byte giving the number of subsequent information bytes in the sub-block (1 to 255). The serial of sub-blocks is terminated past an empty sub-block (a 0 byte).

This structure allows the file to exist parsed fifty-fifty if not all parts are understood. A GIF marked 87a may incorporate extension blocks; the intent is that a decoder tin can read and display the file without the features covered in extensions it does not empathize.

The total detail of the file format is covered in the GIF specification.[2]

Palettes [edit]

An example of a GIF image saved with a web-safe palette and dithered using the Floyd–Steinberg method. Due to the reduced number of colors in the image, in that location are brandish bug.

GIF is palette-based: the colors used in an image (a frame) in the file have their RGB values defined in a palette table that tin agree up to 256 entries, and the data for the image refer to the colors by their indices (0–255) in the palette table. The color definitions in the palette can be drawn from a color space of millions of shades (ii24 shades, 8 bits for each master), but the maximum number of colors a frame can use is 256. This limitation seemed reasonable when GIF was developed because few people could afford the hardware to brandish more than colors simultaneously. Simple graphics, line drawings, cartoons, and grey-scale photographs typically demand fewer than 256 colors.

Each frame can designate i index as a "transparent groundwork color": any pixel assigned this index takes on the color of the pixel in the same position from the background, which may have been determined past a previous frame of blitheness.

Many techniques, collectively called dithering, have been adult to guess a wider range of colors with a minor color palette by using pixels of 2 or more colors to approximate in-betwixt colors. These techniques sacrifice spatial resolution to approximate deeper color resolution. While not part of the GIF specification, dithering can be used in images subsequently encoded as GIF images. This is often not an ideal solution for GIF images, both because the loss of spatial resolution typically makes an paradigm await fuzzy on the screen, and considering the dithering patterns oft interfere with the compressibility of the image data, working against GIF'south chief purpose.

In the early days of graphical spider web browsers[ when? ], graphics cards with eight-scrap buffers (allowing only 256 colors) were common and it was adequately common to brand GIF images using the websafe palette.[ according to whom? ] This ensured predictable display, but severely limited the choice of colors. When 24-bit colour became the norm, palettes could instead be populated with the optimum colors for individual images.

A pocket-sized color tabular array may suffice for pocket-sized images, and keeping the color table small allows the file to be downloaded faster. Both the 87a and 89a specifications allow color tables of 2 n colors for any n from ane through eight. Well-nigh graphics applications will read and brandish GIF images with any of these table sizes; but some do non support all sizes when creating images. Tables of ii, 16, and 256 colors are widely supported.

True color [edit]

An animated GIF illustrating a technique for displaying more than the typical limit of 256 colors

Although GIF is almost never used for truthful color images, information technology is possible to do so.[30] [31] A GIF image tin include multiple image blocks, each of which can take its ain 256-color palette, and the blocks tin be tiled to create a complete image. Alternatively, the GIF89a specification introduced the thought of a "transparent" color where each image block can include its own palette of 255 visible colors plus i transparent colour. A complete image can exist created by layering epitome blocks with the visible portion of each layer showing through the transparent portions of the layers to a higher place.

To render a total-color image as a GIF, the original paradigm must exist broken downward into smaller regions having no more than than 255 or 256 different colors. Each of these regions is and then stored equally a separate image block with its ain local palette and when the image blocks are displayed together (either by tiling or past layering partially transparent prototype blocks), the complete, full-colour paradigm appears. For example, breaking an prototype into tiles of 16 by 16 pixels (256 pixels in total) ensures that no tile has more than the local palette limit of 256 colors, although larger tiles may exist used and similar colors merged resulting in some loss of color information.[30]

Since each image block tin can accept its own local color tabular array, a GIF file having many epitome blocks can be very large, limiting the usefulness of full-color GIFs.[31] Additionally, not all GIF rendering programs handle tiled or layered images correctly. Many rendering programs interpret tiles or layers every bit animation frames and brandish them in sequence as an animation[30] with most web browsers automatically displaying the frames with a delay fourth dimension of 0.one seconds or more.[32] [33] [ better source needed ]

Instance GIF file [edit]

Sample paradigm (enlarged), bodily size three pixels wide by five high

Bytes Dh to 30Ch in the example define a palette of 256 colors.

Microsoft Paint saves a modest black-and-white epitome as the post-obit GIF file. Pigment does non brand optimal use of GIF; due to the unnecessarily large color table (storing a full 256 colors instead of the used 2) and symbol width, this GIF file is non an efficient representation of the xv-pixel image (illustrated enlarged to a higher place).

Although the Graphic Control Extension block declares color index 16 (hexadecimal 10) to be transparent, that index is not used in the epitome. The only color indexes appearing in the image information are decimal 40 and 255, which the Global Color Table maps to blackness and white, respectively.

Note that the hex numbers in the following tables are in little-endian byte society, as the format specification prescribes.

Table of case GIF image values
Byte # (hex) Hexadecimal Text or value Meaning
0 47 49 46 38 39 61 GIF89a Header
6 03 00 three Logical screen width
8 05 00 5 Logical screen superlative
A F7 GCT follows for 256 colors with resolution 3 ×eight bits/primary, the lowest 3 bits represent the flake depth minus i, the highest true bit means that the GCT is present
B 00 0 Background colour: #000000, black
C 00 0 Default pixel aspect ratio, 0:0
D 00 00 00
R (ruby-red) G (green) B (blueish)
0 0 0
Global Color Table, color #0: #000000, blackness
ten 80 00 00
R (red) One thousand (green) B (blue)
128 0 0
Global Color Tabular array, color #1: transparent bit, not used in image
... ... ... Global Colour Table extends to 30A
30A FF FF FF
R (crimson) Thousand (green) B (blue)
255 255 255
Global Color Table, color #255: #ffffff, white
30D 21 F9 Graphic Control Extension (comment fields precede this in most files)
30F 04 iv Corporeality of GCE data, four bytes
310 01 Transparent background color; this is a bit field, the lowest bit signifies transparency
311 00 00 Delay for animation in hundredths of a second; non used
313 10 16 Color number of transparent pixel in GCT
314 00 End of GCE block
315 2C Image descriptor
316 00 00 00 00 (0, 0) North-due west corner position of paradigm in logical screen
31A 03 00 05 00 (3, 5) Image width and height in pixels
31E 00 0 Local color table bit, 0 means none
31F 08 eight Start of epitome, LZW minimum code size
320 0B xi Amount of LZW encoded image follow, 11 bytes
321 00 51 FC 1B 28 70 A0 C1 83 01 01 <paradigm information> xi bytes of image data, come across field 320
32C 00 0 Finish of image data block
32D 3B File termination

Image coding [edit]

The image pixel information, scanned horizontally from peak left, are converted past LZW encoding to codes that are and then mapped into bytes for storing in the file. The pixel codes typically don't match the 8-bit size of the bytes, so the codes are packed into bytes by a "little-Endian" scheme: the least significant flake of the first lawmaking is stored in the least pregnant bit of the first byte, higher order bits of the code into higher order bits of the byte, spilling over into the low order bits of the adjacent byte every bit necessary. Each subsequent code is stored starting at the least significant bit not already used.

This byte stream is stored in the file as a series of "sub-blocks". Each sub-block has a maximum length 255 bytes and is prefixed with a byte indicating the number of data bytes in the sub-block. The series of sub-blocks is terminated by an empty sub-cake (a single 0 byte, indicating a sub-block with 0 data bytes).

For the sample image above the reversible mapping betwixt nine-bit codes and bytes is shown below.

Reversible mapping
nine-bit code Binary Bytes (hexadecimal)
100 |00000000| 00
028 |0101000|ane 51
0FF |111111|00 FC
103 |00011|011 1B
102 |0010|k 28
103 |011|10000 70
106 |10|100000 A0
107 |1|1000001 C1
|10000011 83
101 |00000001 01
|0000000|1 01

A slight compression is evident: pixel colors defined initially past 15 bytes are exactly represented by 12 code bytes including control codes. The encoding process that produces the nine-fleck codes is shown below. A local string accumulates pixel color numbers from the palette, with no output activeness equally long as the local cord can be institute in a lawmaking table. There is special treatment of the start two pixels that go far before the table grows from its initial size past additions of strings. After each output lawmaking, the local string is initialized to the latest pixel color (that could not exist included in the output lawmaking).

          Table           9-bit                      string --> code      lawmaking    Action                    #0 | 000h               Initialize root table of 9-chip codes                     palette  |  :                      colors  |  :                         #255 | 0FFh                          clr | 100h                          end | 101h                              |            100h     Articulate Pixel          Local         | color Palette  string        | BLACK  #40     28            |            028h     1st pixel ever to output WHITE  #255    FF            |                     Cord constitute in table                   28 FF      | 102h                Always add 1st string to table                FF            |                     Initialize local string WHITE  #255    FF FF         |                     String not found in table                              |            0FFh     - output code for previous string                   FF FF      | 103h                - add latest string to tabular array                FF            |                     - initialize local cord WHITE  #255    FF FF         |                     String found in table Black  #40     FF FF 28      |                     String not found in table                              |            103h     - output lawmaking for previous cord                   FF FF 28   | 104h                - add latest cord to table                28            |                     - initialize local string WHITE  #255    28 FF         |                     String found in table WHITE  #255    28 FF FF      |                     String non institute in table                              |            102h     - output lawmaking for previous string                   28 FF FF   | 105h                - add latest cord to table                FF            |                     - initialize local string WHITE  #255    FF FF         |                     String found in tabular array WHITE  #255    FF FF FF      |                     String not found in table                              |            103h     - output code for previous string                   FF FF FF   | 106h                - add latest cord to tabular array                FF            |                     - initialize local string WHITE  #255    FF FF         |                     String found in table WHITE  #255    FF FF FF      |                     String found in table WHITE  #255    FF FF FF FF   |                     String not found in table                              |            106h     - output code for previous string                   FF FF FF FF| 107h                - add latest string to table                FF            |                     - initialize local string WHITE  #255    FF FF         |                     String found in table WHITE  #255    FF FF FF      |                     String found in tabular array WHITE  #255    FF FF FF FF   |                     String found in table                                                    No more pixels                                           107h     - output code for terminal string                                           101h     End        

For clarity the tabular array is shown in a higher place as existence built of strings of increasing length. That scheme tin can office simply the table consumes an unpredictable amount of memory. Memory tin be saved in exercise by noting that each new string to be stored consists of a previously stored string augmented by one grapheme. It is economic to shop at each address but 2 words: an existing address and one character.

The LZW algorithm requires a search of the table for each pixel. A linear search through up to 4096 addresses would brand the coding slow. In practise the codes tin can exist stored in order of numerical value; this allows each search to exist done past a SAR (Successive Approximation Register, as used in some ADCs), with only 12 magnitude comparisons. For this efficiency an extra table is needed to convert between codes and bodily memory addresses; the extra table upkeeping is needed but when a new code is stored which happens at much less than pixel charge per unit.

Image decoding [edit]

Decoding begins by mapping the stored bytes dorsum to 9-flake codes. These are decoded to recover the pixel colors as shown below. A table identical to the one used in the encoder is built by adding strings past this rule:

Is incoming code constitute in table?
Yes add cord for local code followed by outset byte of string for incoming code
No add string for local code followed by copy of its ain first byte
          shift          9-bit ----> Local      Table                 Pixel                      code        code   code --> string   Palette color  Action                    100h               000h  | #0                       Initialize root table of 9-bit codes                     :    | palette                     :    | colors                    0FFh  | #255                    100h  | clr                    101h  | end 028h                     |             #40          BLACK          Decode 1st pixel 0FFh        028h         |                           Incoming code found in table                          |             #255          WHITE          - output string from table                    102h  | 28 FF                     - add to table 103h        0FFh         |                           Incoming code not constitute in table                    103h  | FF FF                     - add to table                          |                           - output string from table                          |             #255          WHITE          |             #255          WHITE          102h        103h         |                           Incoming code found in tabular array                          |                           - output cord from table                          |             #40          Blackness          |             #255          WHITE          104h  | FF FF 28                  - add to table 103h        102h         |                           Incoming code found in table                          |                           - output string from tabular array                          |             #255          WHITE          |             #255          WHITE          105h  | 28 FF FF                  - add to table 106h        103h         |                           Incoming code non found in tabular array                    106h  | FF FF FF                  - add to table                          |                           - output string from table                          |             #255          WHITE          |             #255          WHITE          |             #255          WHITE          107h        106h         |                           Incoming code not plant in tabular array                    107h  | FF FF FF FF               - add together to tabular array                          |                           - output cord from table                          |             #255          WHITE          |             #255          WHITE          |             #255          WHITE          |             #255          WHITE          101h                     |                           Cease        

LZW code lengths [edit]

Shorter lawmaking lengths tin exist used for palettes smaller than the 256 colors in the example. If the palette is simply 64 colors (so color indexes are vi bits wide), the symbols can range from 0 to 63, and the symbol width tin can be taken to be 6 $.25, with codes starting at 7 $.25. In fact, the symbol width demand not match the palette size: as long as the values decoded are ever less than the number of colors in the palette, the symbols tin be any width from 2 to 8, and the palette size whatever power of two from 2 to 256. For example, if only the offset four colors (values 0 to iii) of the palette are used, the symbols can be taken to be 2 bits wide with codes starting at 3 bits.

Conversely, the symbol width could be gear up at 8, even if only values 0 and 1 are used; these information would only crave a two-color table. Although there would be no bespeak in encoding the file that way, something like typically happens for bi-color images: the minimum symbol width is ii, even if only values 0 and 1 are used.

The code table initially contains codes that are one chip longer than the symbol size in order to accommodate the two special codes clr and end and codes for strings that are added during the process. When the table is full the lawmaking length increases to give infinite for more than strings, up to a maximum lawmaking 4095 = FFF(hex). As the decoder builds its table information technology tracks these increases in code length and it is able to unpack incoming bytes accordingly.

Uncompressed GIF [edit]

A 46×46 uncompressed GIF with 7-bit symbols (128 colors, 8-bit codes). Click on the image for an explanation of the lawmaking.

The GIF encoding process tin can be modified to create a file without LZW compression that is still viewable as a GIF paradigm. This technique was introduced originally as a way to avoid patent infringement. Uncompressed GIF can likewise be a useful intermediate format for a graphics developer because individual pixels are accessible for reading or painting. An uncompressed GIF file can exist converted to an ordinary GIF file merely by passing information technology through an image editor.

The modified encoding method ignores building the LZW table and emits merely the root palette codes and the codes for Clear and Finish. This yields a simpler encoding (a ane-to-ane correspondence betwixt code values and palette codes) but sacrifices all of the pinch: each pixel in the paradigm generates an output code indicating its color alphabetize. When processing an uncompressed GIF, a standard GIF decoder will not exist prevented from writing strings to its dictionary table, but the code width must never increase since that triggers a different packing of bits to bytes.

If the symbol width is n, the codes of width north+1 fall naturally into two blocks: the lower block of ii n codes for coding unmarried symbols, and the upper block of ii n codes that will be used by the decoder for sequences of length greater than one. Of that upper block, the offset two codes are already taken: 2 northward for CLEAR and ii n + 1 for STOP. The decoder must also exist prevented from using the last code in the upper cake, 2 n+1 − one, because when the decoder fills that slot, it will increase the code width. Thus in the upper block there are 2 n − iii codes available to the decoder that won't trigger an increase in code width. Because the decoder is e'er one pace behind in maintaining the table, information technology does not generate a table entry upon receiving the first lawmaking from the encoder, just will generate one for each succeeding code. Thus the encoder can generate 2 n − ii codes without triggering an increase in code width. Therefore, the encoder must emit extra CLEAR codes at intervals of 2 n − 2 codes or less to make the decoder reset the coding dictionary. The GIF standard allows such extra Clear codes to be inserted in the image data at whatsoever time. The composite information stream is partitioned into sub-blocks that each carry from 1 to 255 bytes.

For the sample 3×five image in a higher place, the post-obit 9-chip codes represent "clear" (100) followed by prototype pixels in scan gild and "stop" (101).

100 028 0FF 0FF 0FF 028 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 101        

Afterwards the above codes are mapped to bytes, the uncompressed file differs from the compressed file thus:

Byte # (hex) Hexadecimal Text or value Meaning
320 14 20 twenty bytes uncompressed paradigm data follow
321 00 51 FC FB F7 0F C5 BF 7F FF FE FD FB F7 EF DF BF 7F 01 01
335 00 0 Terminate of image data

Compression instance [edit]

The trivial example of a large image of solid color demonstrates the variable-length LZW compression used in GIF files.

Sample compression of a GIF file
Code Pixels Notes
No.Due northi ValueNi + 256 Length($.25) This codeNi Accumulated Ni(Ni + 1) / 2 Relations using Ni merely utilise to same-color pixels until coding table is total.
0 100h 9 Clear code tabular array
one FFh i ane Top left pixel color chosen as the highest alphabetize of a 256-color palette
ii 102h 2 3
3⋮255 103h⋮1FFh 3⋮255 six⋮32640 Last 9-bit code
256⋮767 200h⋮3FFh ten 256⋮767 32896⋮294528 Last ten-bit code
768⋮1791 400h⋮7FFh eleven 768⋮1791 295296⋮1604736 Final eleven-bit code
1792⋮3839 800h⋮FFFh 12 1792⋮3839 1606528⋮7370880 Code table total
FFFh 3839 The maximum lawmaking may repeat for more same-color pixels.Overall data compression asymptotically approaches 3839 × 8 / 12 = 2559+ 1 / iii
101h Cease of image data

The code values shown are packed into bytes which are then packed into blocks of up to 255 bytes. A block of epitome information begins with a byte that declares the number of bytes to follow. The concluding block of data for an image is marked by a naught block-length byte.

Interlacing [edit]

The GIF Specification allows each paradigm within the logical screen of a GIF file to specify that it is interlaced; i.e., that the order of the raster lines in its data cake is not sequential. This allows a fractional display of the image that tin be recognized before the full image is painted.

An interlaced image is divided from peak to bottom into strips 8 pixels loftier, and the rows of the image are presented in the following order:

  • Pass 1: Line 0 (the top-most line) from each strip.
  • Pass two: Line four from each strip.
  • Laissez passer iii: Lines 2 and six from each strip.
  • Pass four: Lines one, 3, 5, and 7 from each strip.

The pixels within each line are not interlaced, merely presented consecutively from left to right. Equally with non-interlaced images, in that location is no interruption between the information for ane line and the data for the next. The indicator that an image is interlaced is a bit set in the respective Paradigm Descriptor block.

Blithe GIF [edit]

A GIF animation made of two photos, i morphing into the other

A elementary gif with three pictures of Pigeons that are repeated indefinitely.

Although GIF was not designed every bit an blitheness medium, its power to store multiple images in one file naturally suggested using the format to store the frames of an animation sequence. To facilitate displaying animations, the GIF89a spec added the Graphic Control Extension (GCE), which allows the images (frames) in the file to be painted with time delays, forming a video clip. Each frame in an animation GIF is introduced by its own GCE specifying the time filibuster to wait subsequently the frame is drawn. Global information at the start of the file applies by default to all frames. The data is stream-oriented, and so the file beginning of the start of each GCE depends on the length of preceding information. Within each frame the LZW-coded image data is arranged in sub-blocks of up to 255 bytes; the size of each sub-block is declared by the byte that precedes information technology.

By default, an animation displays the sequence of frames only one time, stopping when the last frame is displayed. To enable an animation to loop, Netscape in the 1990s used the Application Extension cake (intended to let vendors to add application-specific data to the GIF file) to implement the Netscape Awarding Block (NAB).[34] This block, placed immediately earlier the sequence of blitheness frames, specifies the number of times the sequence of frames should be played (one to 65535 times) or that it should repeat continuously (zero indicates loop forever). Back up for these repeating animations first appeared in Netscape Navigator version ii.0, and and then spread to other browsers.[35] Most browsers now recognize and support NAB, though information technology is not strictly part of the GIF89a specification.

The post-obit example shows the structure of the animation file Rotating earth (large).gif shown (as a thumbnail) in the article'due south infobox.

Structure of GIF
Byte # (hex) Hexadecimal Text or value Meaning
0 47 49 46 38 39 61 GIF89a Logical Screen Descriptor
6 xc 01 400 Width in pixels
8 xc 01 400 Meridian in pixels
A F7 GCT follows for 256 colors with resolution three ×eight bits/principal
B 00 0 Background colour: #000000, blackness
C 00 0 Default pixel aspect ratio, 0:0
D 00 Global Color Table
30D 21 FF Application Extension
30F 0B 11 Size of cake including awarding proper noun and verification bytes (always eleven)
310 4E 45 54 53 43 41 l 45 32 2E xxx NETSCAPE2.0 8-byte application name plus 3 verification bytes
31B 03 iii Number of bytes in the following sub-cake
31C 01 one Alphabetize of the current data sub-block (always 1 for the NETSCAPE block)
31D FF FF 65535 Unsigned number of repetitions
31F 00 End of the sub-block concatenation for the Application Extension cake
320 21 F9 Graphic Control Extension for frame #1
322 04 4 Number of bytes (4) in the electric current sub-block
323 04
                    000..... ...001.. ......0. .......0                  
(broken into sections for easier reading)
Reserved, five lower bits are fleck field
Disposal method 1: practise non dispose
No user input
Transparent colour, 0 means not given
324 09 00 9 Frame delay: 0.09 2d delay before painting next frame
326 FF Transparent color index (unused in this frame)
327 00 Stop of sub-block concatenation for Graphic Control Extension block
328 2C Image Descriptor of frame #1
329 00 00 00 00 (0, 0) North-west corner position of prototype in logical screen: (0, 0)
32D 90 01 90 01 (400, 400) Frame width and top: 400 ×400 pixels
331 00 0 Local color table: 0 means none & no interlacing
332 08 8 Minimum LZW code size for Paradigm Data of frame #1
333 FF 255 Number of bytes of LZW epitome information in the following sub-cake: 255 bytes
334 ... <prototype information> Image information, 255 bytes
433 FF 255 Number of bytes of LZW image data in the following sub-cake, 255 bytes
434 ... <image data> Prototype data, 255 bytes
Repeat for adjacent blocks
92C0 00 End of sub-cake chain for this frame
92C1 21 F9 Graphic Control Extension for frame #ii
Repeat for adjacent frames
EDABD 21 F9 Graphic Control Extension for frame #44
Prototype information and data for frame #44
F48F5 3B Trailer: Last byte in the file, signaling EOF

The blitheness delay for each frame is specified in the GCE in hundredths of a second. Some economy of information is possible where a frame need only rewrite a portion of the pixels of the brandish, because the Image Descriptor can define a smaller rectangle to be rescanned instead of the whole image. Browsers or other displays that do non support blithe GIFs typically evidence only the first frame.

The size and color quality of animated GIF files can vary significantly depending on the application used to create them. Strategies for minimizing file size include using a mutual global color table for all frames (rather than a complete local color tabular array for each frame) and minimizing the number of pixels covered in successive frames (so that only the pixels that modify from one frame to the next are included in the latter frame). More than advanced techniques involve modifying color sequences to better match the existing LZW dictionary, a form of lossy pinch. Simply packing a series of independent frame images into a composite blitheness tends to yield large file sizes. Tools are available to minimize the file size given an existing GIF.

Metadata [edit]

Metadata can exist stored in GIF files every bit a comment block, a plain text block, or an application-specific awarding extension block. Several graphics editors use unofficial application extension blocks to include the data used to generate the image, and so that it can be recovered for farther editing.

All of these methods technically require the metadata to exist cleaved into sub-blocks so that applications can navigate the metadata block without knowing its internal structure.

The Extensible Metadata Platform (XMP) metadata standard introduced an unofficial simply now widespread "XMP Data" application extension block for including XMP information in GIF files.[36] Since the XMP data is encoded using UTF-8 without NUL characters, at that place are no 0 bytes in the data. Rather than suspension the information into formal sub-blocks, the extension cake terminates with a "magic trailer" that routes any application treating the data as sub-blocks to a final 0 byte that terminates the sub-cake concatenation.

Unisys and LZW patent enforcement [edit]

In 1977 and 1978, Jacob Ziv and Abraham Lempel published a pair of papers on a new class of lossless data-compression algorithms, now collectively referred to every bit LZ77 and LZ78. In 1983, Terry Welch developed a fast variant of LZ78 which was named Lempel–Ziv–Welch (LZW).[37] [38]

Welch filed a patent application for the LZW method in June 1983. The resulting patent, US4558302,[39] granted in December 1985, was assigned to Sperry Corporation who after merged with Burroughs Corporation in 1986 and formed Unisys.[37] Farther patents were obtained in the Uk, France, Germany, Italian republic, Japan and Canada.

In add-on to the to a higher place patents, Welch's 1983 patent also includes citations to several other patents that influenced it, including two 1980 Japanese patents from NEC'southward Jun Kanatsu,[forty] [41] U.Due south. Patent 4,021,782 (1974) from John S. Hoerning, U.South. Patent 4,366,551 (1977) from Klaus E. Holtz, and a 1981 High german patent from Karl Eckhart Heinz[42] .[43]

In June 1984, an commodity by Welch was published in the IEEE magazine which publicly described the LZW technique for the first time.[44] LZW became a popular data pinch technique and, when the patent was granted, Unisys entered into licensing agreements with over a hundred companies.[37] [45]

The popularity of LZW led CompuServe to choose information technology as the pinch technique for their version of GIF, adult in 1987. At the time, CompuServe was not aware of the patent.[37] Unisys became aware that the version of GIF used the LZW compression technique and entered into licensing negotiations with CompuServe in January 1993. The subsequent agreement was appear on 24 Dec 1994.[38] Unisys stated that they expected all major commercial on-line information services companies employing the LZW patent to license the technology from Unisys at a reasonable charge per unit, simply that they would not require licensing, or fees to be paid, for not-commercial, non-turn a profit GIF-based applications, including those for use on the on-line services.[45]

Following this annunciation, in that location was widespread condemnation of CompuServe and Unisys, and many software developers threatened to finish using GIF. The PNG format (run into below) was adult in 1995 as an intended replacement.[37] [38] [44] Still, obtaining back up from the makers of Web browsers and other software for the PNG format proved difficult and it was not possible to replace GIF, although PNG has gradually increased in popularity.[37] Therefore, GIF variations without LZW pinch were developed. For instance the libungif library, based on Eric S. Raymond's giflib, allows creation of GIFs that followed the data format but avoided the compression features, thus fugitive use of the Unisys LZW patent.[46] A 2001 Dr. Dobb'south article described some other alternative to LZW compression, based on foursquare roots.[47]

In August 1999, Unisys changed the details of their licensing practice, announcing the selection for owners of certain not-commercial and private websites to obtain licenses on payment of a ane-time license fee of $5000 or $7500.[48] Such licenses were not required for website owners or other GIF users who had used licensed software to generate GIFs. All the same, Unisys was subjected to thousands of online attacks and calumniating emails from users believing that they were going to be charged $5000 or sued for using GIFs on their websites.[49] Despite giving free licenses to hundreds of not-turn a profit organizations, schools and governments, Unisys was completely unable to generate any good publicity and continued to be condemned past individuals and organizations such as the League for Programming Freedom who started the "Burn down All GIFs" entrada in 1999.[fifty] [51]

The U.s. LZW patent expired on xx June 2003.[52] The analogue patents in the United kingdom, France, Germany and Italia expired on 18 June 2004, the Japanese patents expired on 20 June 2004, and the Canadian patent expired on seven July 2004.[52] Consequently, while Unisys has further patents and patent applications relating to improvements to the LZW technique,[52] LZW itself (and consequently GIF) accept been costless to employ since July 2004.[53]

Alternatives [edit]

PNG [edit]

Portable Network Graphics (PNG) was designed every bit a replacement for GIF in order to avoid infringement of Unisys' patent on the LZW compression technique.[37] PNG offers better compression and more than features than GIF,[54] animation being the but significant exception. PNG is more suitable than GIF in instances where true-color imaging and alpha transparency are required.

Although support for PNG format came slowly, new web browsers support PNG. Older versions of Internet Explorer do not back up all features of PNG. Versions 6 and earlier do non back up alpha channel transparency without using Microsoft-specific HTML extensions.[55] Gamma correction of PNG images was not supported before version eight, and the brandish of these images in earlier versions may have the wrong tint.[56]

For identical 8-bit (or lower) prototype data, PNG files are typically smaller than the equivalent GIFs, due to the more efficient compression techniques used in PNG encoding.[57] Complete support for GIF is complicated chiefly by the complex canvas structure it allows, though this is what enables the compact animation features.

Animation formats [edit]

Videos resolve many issues that GIFs present through common usage on the web. They include drastically smaller file sizes, the power to surpass the eight-chip color restriction, and amend frame-handling and compression through codecs. Virtually universal support for the GIF format in web browsers and a lack of official support for video in the HTML standard caused GIF to rise to prominence for the purpose of displaying curt video-like files on the web.

MNG ("Multiple-image Network Graphics") was originally developed as a PNG-based solution for animations. MNG reached version ane.0 in 2001, only few applications support it.

In 2006, an extension to the PNG format called APNG ("Animated Portable Network Graphics") was proposed as alternative to the MNG format past Mozilla. APNG is supported by nearly browsers as of 2019.[58] APNG provide the power to breathing PNG files, while retaining backwards compatibility in decoders that cannot empathize the blitheness chunk (dissimilar MNG). Older decoders will simply render the first frame of the blitheness. The PNG group officially rejected APNG as an official extension on 20 April 2007.[59] In that location accept been several subsequent proposals for a simple blithe graphics format based on PNG using several different approaches.[60] Nevertheless, Blithe Portable Network Graphics is still nether development by Mozilla and is supported in Firefox iii[61] [62] while MNG support was dropped.[63] [64] APNG is currently supported by all major web browsers including Chrome since version 59.0 and Opera and Firefox and Edge.

Embedded Adobe Flash objects and MPEG files were used on some websites to brandish simple video, but required the use of an boosted browser plugin. WebM and WebP are in development and are supported by some web browsers.[65] Other options for web blitheness include serving individual frames using AJAX, or animating SVG images using JavaScript or SMIL ("Synchronized Multimedia Integration Language").[ citation needed ]

With the introduction of widespread support of the HTML5 video (<video>) tag in most web browsers, some websites apply a looped version of the video tag generated by JavaScript functions. This gives the advent of a GIF, only with the size and speed advantages of compressed video. Notable examples are Gfycat and Imgur and their GIFV metaformat, which is actually a video tag playing a looped MP4 or WebM compressed video.[66]

Loftier Efficiency Image File Format (HEIF) is an epitome file format, finalized in 2015, which uses a discrete cosine transform (DCT) lossy compression algorithm based on the HEVC video format, and related to the JPEG image format. In dissimilarity to JPEG, HEIF supports animation.[67] Compared to the GIF format, which lacks DCT compression, HEIF allows significantly more efficient pinch. HEIF stores more than information and produces higher-quality animated images at a small fraction of an equivalent GIF'due south size.[68]

VP9 simply supports alpha compositing with 4:ii:0 chroma subsampling[69] in the YUVA420 pixel format, which may be unsuitable for GIFs that combine transparency with rasterised vector graphics with fine color details.

The AV1 codec can also be used either as a video or a sequenced image.

Uses [edit]

In April 2014, 4chan added support for silent WebM videos that are under 3 MB in size and 2 min in length,[lxx] [71] and in Oct 2014, Imgur started converting any GIF files uploaded to the site to video and giving the link to the HTML histrion the appearance of an bodily file with a .gifv extension.[72] [73]

In January 2016, Telegram started re-encoding all GIFs to MPEG-4 videos that "require up to 95% less disk space for the same image quality."[74]

See also [edit]

  • AVIF
  • Cinemagraph, a partially animated photograph often in GIF
  • Comparison of graphics file formats
  • Comparison of layout engines (graphics)
  • GIF fine art, a form of digital art associated with GIF
  • GIFBuilder, early animated GIF cosmos programme
  • GNU plotutils (supports pseudo-GIF, which uses run-length encoding rather than LZW)
  • Microsoft GIF Animator, historic program to create simple animated GIFs
  • Software patent

References [edit]

  1. ^ a b c "Graphics Interchange Format, Version 87a". W3C. 15 June 1987. Retrieved thirteen October 2012.
  2. ^ a b c "Graphics Interchange Format, Version 89a". W3C. 31 July 1990. Retrieved 6 March 2009.
  3. ^ "Online Art". Compute!'s Apple tree Applications. December 1987. p. 10. Retrieved 14 September 2016.
  4. ^ Holdener III, Anthony (2008). Ajax: The Definitive Guide: Interactive Applications for the Web. O'Reilly Media. ISBN978-0596528386.
  5. ^ Furht, Borko (2008). Encyclopedia of Multimedia. Springer. ISBN978-0387747248.
  6. ^ McHugh, Molly (29 May 2015). "You Tin can Finally, Actually, Actually, Truly Post GIFs on Facebook". Wired. wired.com. Retrieved 29 May 2015.
  7. ^ Perez, Sarah (29 May 2015). "Facebook Confirms It Will Officially Support GIFs". techcrunch.com. Retrieved 29 May 2015.
  8. ^ "Introducing GIF Stickers". Instagram. 23 January 2018. Retrieved 19 September 2019.
  9. ^ "Oxford Dictionaries U.s.a. Discussion of the Year 2012". OxfordWords blog. Oxford American Dictionaries. 13 November 2012. Retrieved one May 2013.
  10. ^ Flood, Alison (27 April 2013). "Gif is America's word of the year? Now that's what I call an omnishambles". Books blog. The Guardian. London. Retrieved 1 May 2013.
  11. ^ Olsen, Steve. "The GIF Pronunciation Page". Retrieved 6 March 2009.
  12. ^ a b c "Gif's inventor says ignore dictionaries and say 'Jif'". BBC News. 22 May 2013. Retrieved 22 May 2013.
  13. ^ "Stack Overflow Programmer Survey 2017". 2017. Retrieved 19 August 2018.
  14. ^ "How do yous pronounce "GIF"?". The Economist . Retrieved 4 Jan 2018.
  15. ^ "GIF". The American Heritage Abbreviations Dictionary, Third Edition. Houghton Mifflin Visitor. 2005. Retrieved 15 April 2007.
  16. ^ "GIF". The Cambridge Dictionary of American English. Cambridge Academy Press. Retrieved xix February 2014.
  17. ^ "Gif - Definition from the Merriam-Webster Lexicon". Merriam-Webster Dictionary. Merriam-Webster, Incorporated. Retrieved 6 June 2013.
  18. ^ "GIF". Oxford Dictionaries Online. Oxford University Press. Retrieved 7 October 2014.
  19. ^ "gif noun - Definition, pictures, pronunciation and usage notes | Oxford Advanced Learner'southward Dictionary". Oxford Learner's Dictionaries . Retrieved vi February 2021. {{cite spider web}}: CS1 maint: url-condition (link)
  20. ^ "GIF | Definition of GIF by Oxford Dictionary". Lexico . Retrieved vi February 2021. {{cite spider web}}: CS1 maint: url-status (link)
  21. ^ Stevenson, Angus, ed. (2010). Oxford Dictionary of English language (tertiary ed.). Oxford University Press. ISBN9780199571123. OCLC 729551189.
  22. ^ The New Oxford American Lexicon (2nd ed.). Oxford University Printing. 2005. p. 711.
  23. ^ The New Oxford American Dictionary (3rd ed.). 2012. (role of the Macintosh built-in dictionaries).
  24. ^ O'Leary, Amy (21 May 2013). "An Award for the Creator of the GIF". The New York Times . Retrieved 22 May 2013.
  25. ^ a b Rothberg, Daniel (4 December 2013). "'Jeopardy' wades into 'GIF' pronunciation battle". Los Angeles Times . Retrieved 4 December 2013.
  26. ^ O'Leary, Amy (23 May 2013). "Battle Over 'GIF' Pronunciation Erupts". The New York Times.
  27. ^ Valinsky, Jordan (February 25, 2020). "Jif settles the cracking debate with a GIF peanut butter jar". CNN . Retrieved February 25, 2020.
  28. ^ Marur, D.R.; Bhaskar, V. (March 2012). "Comparing of platform contained electronic document distribution techniques". Devices, Circuits and Systems (ICDCS). International Conference on Devices, Circuits and Systems (ICDCS). Karunya University; Coimbatore, Bharat: IEEE. pp. 297–301. doi:10.1109/ICDCSyst.2012.6188724. ISBN9781457715457.
  29. ^ S. Chin; D. Iverson; O. Campesato; P. Trani (2011). Pro Android Wink (PDF). New York: Apress. p. 350. ISBN9781430232315 . Retrieved xi March 2015.
  30. ^ a b c Andreas Kleinert (2007). "GIF 24 Chip (truecolor) extensions". Archived from the original on 16 March 2012. Retrieved 23 March 2012.
  31. ^ a b Philip Howard. "True-Color GIF Case". Archived from the original on 22 February 2015. Retrieved 23 March 2012.
  32. ^ "Nullsleep - Jeremiah Johnson - Animated GIF Minimum Frame Filibuster Browser Compatibility Study". Retrieved 26 May 2015.
  33. ^ "They're different! How to match the animation rate of gif files accross [sic] browsers". Programmer'due south Blog. xiv Feb 2012. Archived from the original on one February 2017. Retrieved xv June 2017.
  34. ^ Royal Frazier. "All About GIF89a". Archived from the original on 18 Apr 1999. Retrieved 7 January 2013.
  35. ^ Scott Walter (1996). Spider web Scripting Secret Weapons. Que Publishing. ISBN0-7897-0947-iii.
  36. ^ "XMP Specification Part three: Storage in Files" (PDF). Adobe. 2016. pp. 11–12. Retrieved sixteen August 2018.
  37. ^ a b c d e f thou Greg Roelofs. "History of the Portable Network Graphics (PNG) Format". Retrieved 23 March 2012.
  38. ^ a b c Stuart Caie. "Distressing day... GIF patent dead at 20". Retrieved 23 March 2012.
  39. ^ US 4558302, Welch, Terry A., published 1985-12-10, assigned to Sperry Corp.
  40. ^ JP patent S5719857A, Kanatsu, Jiyun, "Data compression storage device", published 1982-02-02, assigned to Nippon Electrical Corp.
  41. ^ JP patent S57101937A, Kanatsu, Jiyun, "Data storage device", published 1986-20-24, assigned to Nippon Electrical Corp.
  42. ^ DE patent 3118676, Eckhart, Heinz Karl, "Verfahren zur Kompression redundanter Folgen serieller Datenelemente [Method for compressing redundant sequences of serial information elements]", published 1982-12-02
  43. ^ U.South. Patent iv,558,302
  44. ^ a b "The GIF Controversy: A Software Developer'southward Perspective". Retrieved 26 May 2015.
  45. ^ a b "Unisys Clarifies Policy Regarding Patent Employ in On-Line Service Offerings". Archived from the original on 7 Feb 2007. – archived past League for Programming Liberty
  46. ^ "Libungif". Retrieved 26 May 2015.
  47. ^ Cargill, Tom (1 October 2001). "Replacing a Dictionary with a Square Root". Dr. Dobb's Journal . Retrieved 20 January 2017.
  48. ^ "LZW Software and Patent Information". Archived from the original on viii June 2009. Retrieved 31 January 2007. – clarification of ii September 1999
  49. ^ Unisys Not Suing (most) Webmasters for Using GIFs – Slashdot investigation into the controversy
  50. ^ "Fire All GIFs Day". Archived from the original on 13 Oct 1999.
  51. ^ Burn All GIFs – A projection of the League for Programming Freedom (latest version)
  52. ^ a b c "License Information on GIF and Other LZW-based Technologies". Archived from the original on 2 June 2009. Retrieved 26 April 2005.
  53. ^ "Why At that place Are No GIF Files on GNU Web Pages". Free Software Foundation. Retrieved nineteen May 2012.
  54. ^ "PNG versus GIF Compression". Retrieved 8 June 2009.
  55. ^ "AlphaImageLoader Filter". Microsoft. Retrieved 26 May 2015.
  56. ^ "What'south New in Cyberspace Explorer 7". MSDN . Retrieved 6 March 2009.
  57. ^ "PNG Image File Format". Retrieved 8 June 2009.
  58. ^ "Can I apply... Back up tables for HTML5, CSS3, etc". caniuse.com.
  59. ^ "VOTE FAILED: APNG 20070405a". SourceForge mailing list. 20 April 2007.
  60. ^ "Discussion for a simple "animated" PNG format". Archived from the original on 26 February 2009. Retrieved 12 July 2011.
  61. ^ "APNG Specification". Retrieved 26 May 2015.
  62. ^ Mozilla Labs » Blog Annal » Better animations in Firefox three
  63. ^ "195280 – Removal of MNG/JNG support". Retrieved 26 May 2015.
  64. ^ "18574 – (mng) restore support for MNG animation format and JNG prototype format". Retrieved 26 May 2015.
  65. ^ "Chromium Weblog: Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch on input". Blog.chromium.org. 21 November 2013. Retrieved i February 2014.
  66. ^ "Introducing GIFV - Imgur Web log". imgur.com. 9 Oct 2014. Retrieved 14 December 2014.
  67. ^ Thomson, Gavin; Shah, Athar (2017). "Introducing HEIF and HEVC" (PDF). Apple Inc. Retrieved 5 Baronial 2019.
  68. ^ "HEIF Comparison - High Efficiency Paradigm File Format". Nokia Technologies. Retrieved 5 August 2019.
  69. ^ "#3271 (Allow using additional pixel formats with libvpx-vp9) – FFmpeg". trac.ffmpeg.org.
  70. ^ Dewey, Caitlin. "See the technology that could make GIFs obsolete". The Washington Post . Retrieved 4 Feb 2015.
  71. ^ "WebM support on 4chan". 4chan Blog. Retrieved 4 Feb 2015.
  72. ^ "Introducing GIFV". Imgur. 9 August 2014. Retrieved 21 July 2016.
  73. ^ Allan, Patrick. "Imgur Revamps GIFs for Faster Speeds and Higher Quality with GIFV". Lifehacker. Retrieved 4 February 2015.
  74. ^ "GIF Revolution". Official Telegram Web log. four January 2016. Retrieved four January 2016.

External links [edit]

  • The GIFLIB project
  • spec-gif89a.txt GIF 89a specification on w3.org
  • GIF 89a specification reformatted into HTML
  • LZW and GIF explained
  • Blithe GIFs: a 6-infinitesimal documentary produced by Off Book (spider web serial)
  • GifCities (The GeoCities Animated GIF Search Engine)

0 Response to "It's Fashion Look It Up Gif"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel