gif

read/write GIFs
git clone git://bvnf.space/gm.git
Log | Files | Refs | README

gif87a.txt (31426B)


      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    892
    893
    894
    895
    896
    897
    898
    899
    900
    901
    902
    903
    904
    905
    906
    907
    908
    909
    910
    911
    912
    913
    914
    915
    916
    917
    918
    919
    920
    921
    922
    923
    924
    925
    926
    927
    928
    929
    930
    931
    932
    933
    934
    935
    936
    937
    938
    939
    940
    941
    942
    943
    944
    945
    946
    947
    948
    949
    950
    951
    952
    953
    954
    955
    956
    957
    958
    959
    960
    961
    962
    963
    964
    965
    966
    967
    968
    969
    970
    971
    972
    973
    974
    975
    976
    977
    978
    979
    980
    981
    982
    983
    984
    985
    986
    987
    988
    989
    990
    991
    992
    993
    994
    995
    996
    997
    998
    999
   1000
   1001
   1002
   1003
   1004
   1005
   1006
   1007
   1008
   1009
   1010
   1011
   1012
   1013
   1014
   1015
   1016
   1017
   1018
   1019
   1020
   1021
   1022
   1023
   1024
   1025
   1026
   1027
   1028
   1029
   1030
   1031
   1032
   1033
   1034
   1035
   1036
   1037
   1038
   1039
   1040
   1041
   1042
   1043
   1044
   1045
   1046
   1047
   1048
   1049
   1050
   1051



                                G I F (tm)

                     Graphics Interchange Format (tm)

                      A standard defining a mechanism

                     for the storage and transmission

                   of raster-based graphics information

                               June 15, 1987

                     (c) CompuServe Incorporated, 1987

                            All rights reserved

            While this document is copyrighted, the information

          contained within is made available for use in computer

          software without royalties, or licensing restrictions.

          GIF and 'Graphics Interchange Format' are trademarks of

                         CompuServe, Incorporated.

                           an H&R Block Company

                        5000 Arlington Centre Blvd.

                           Columbus, Ohio 43220

                              (614) 457-8600

                                                                     Page 2

              Graphics Interchange Format (GIF) Specification

                             Table of Contents

        INTRODUCTION . . . . . . . . . . . . . . . . . page 3

        GENERAL FILE FORMAT  . . . . . . . . . . . . . page 3

        GIF SIGNATURE  . . . . . . . . . . . . . . . . page 4

        SCREEN DESCRIPTOR  . . . . . . . . . . . . . . page 4

        GLOBAL COLOR MAP . . . . . . . . . . . . . . . page 5

        IMAGE DESCRIPTOR . . . . . . . . . . . . . . . page 6

        LOCAL COLOR MAP  . . . . . . . . . . . . . . . page 7

        RASTER DATA  . . . . . . . . . . . . . . . . . page 7

        GIF TERMINATOR . . . . . . . . . . . . . . . . page 8

        GIF EXTENSION BLOCKS . . . . . . . . . . . . . page 8

        APPENDIX A - GLOSSARY  . . . . . . . . . . . . page 9

        APPENDIX B - INTERACTIVE SEQUENCES . . . . . . page 10

        APPENDIX C - IMAGE PACKAGING & COMPRESSION . . page 12

        APPENDIX D - MULTIPLE IMAGE PROCESSING . . . . page 15

Graphics Interchange Format (GIF)                                    Page 3

Specification

INTRODUCTION

        'GIF' (tm) is CompuServe's standard for defining generalized  color

   raster   images.    This   'Graphics  Interchange  Format'  (tm)  allows

   high-quality, high-resolution graphics to be displayed on a  variety  of

   graphics  hardware  and is intended as an exchange and display mechanism

   for graphics images.  The image format described  in  this  document  is

   designed  to  support  current  and  future image technology and will in

   addition serve as a basis for future CompuServe graphics products.

        The main focus  of  this  document  is  to  provide  the  technical

   information  necessary  for  a  programmer to implement GIF encoders and

   decoders.  As such, some assumptions are made as to terminology relavent

   to graphics and programming in general.

        The first section of this document describes the  GIF  data  format

   and its components and applies to all GIF decoders, either as standalone

   programs or as part of  a  communications  package.   Appendix  B  is  a

   section  relavent to decoders that are part of a communications software

   package and describes the protocol requirements for entering and exiting

   GIF mode, and responding to host interrogations.  A glossary in Appendix

   A defines some of the terminology used in  this  document.   Appendix  C

   gives  a  detailed  explanation  of  how  the  graphics  image itself is

   packaged as a series of data bytes.

                Graphics Interchange Format Data Definition

 GENERAL FILE FORMAT

        +-----------------------+

        | +-------------------+ |

        | |   GIF Signature   | |

        | +-------------------+ |

        | +-------------------+ |

        | | Screen Descriptor | |

        | +-------------------+ |

        | +-------------------+ |

        | | Global Color Map  | |

        | +-------------------+ |

        . . .               . . .

        | +-------------------+ |    ---+   

        | |  Image Descriptor | |       |   

        | +-------------------+ |       |   

        | +-------------------+ |       |  

        | |  Local Color Map  | |       |-   Repeated 1 to n times

        | +-------------------+ |       |   

        | +-------------------+ |       |   

        | |    Raster Data    | |       |   

        | +-------------------+ |    ---+   

        . . .               . . .   

        |-    GIF Terminator   -|   

        +-----------------------+

Graphics Interchange Format (GIF)                                    Page 4

Specification

 GIF SIGNATURE

        The following GIF Signature identifies  the  data  following  as  a

   valid GIF image stream.  It consists of the following six characters:

             G I F 8 7 a

        The last three characters '87a' may be viewed as a  version  number

   for  this  particular  GIF  definition  and will be used in general as a

   reference  in  documents  regarding  GIF  that   address   any   version

   dependencies.

 SCREEN DESCRIPTOR

        The Screen Descriptor describes the overall parameters for all  GIF

   images  following.  It defines the overall dimensions of the image space

   or logical screen required, the existance of color mapping  information,

   background  screen color, and color depth information.  This information

   is stored in a series of 8-bit bytes as described below.

              bits

         7 6 5 4 3 2 1 0  Byte #

        +---------------+

        |               |  1

        +-Screen Width -+      Raster width in pixels (LSB first)

        |               |  2

        +---------------+

        |               |  3

        +-Screen Height-+      Raster height in pixels (LSB first)

        |               |  4

        +-+-----+-+-----+      M = 1, Global color map follows Descriptor

        |M|  cr |0|pixel|  5   cr+1 = # bits of color resolution

        +-+-----+-+-----+      pixel+1 = # bits/pixel in image

        |   background  |  6   background=Color index of screen background

        +---------------+          (color is defined from the Global color

        |0 0 0 0 0 0 0 0|  7        map or default map if none specified)

        +---------------+

        The logical screen width and height can both  be  larger  than  the

   physical  display.   How  images  larger  than  the physical display are

   handled is implementation dependent and can take advantage  of  hardware

   characteristics  (e.g.   Macintosh scrolling windows).  Otherwise images

   can be clipped to the edges of the display.

        The value of 'pixel' also defines  the  maximum  number  of  colors

   within  an  image.   The  range  of  values  for 'pixel' is 0 to 7 which

   represents 1 to 8 bits.  This translates to a range of 2 (B & W) to  256

   colors.   Bit  3 of word 5 is reserved for future definition and must be

   zero.

Graphics Interchange Format (GIF)                                    Page 5

Specification

 GLOBAL COLOR MAP

        The Global Color Map is optional but recommended for  images  where

   accurate color rendition is desired.  The existence of this color map is

   indicated in the 'M' field of byte 5 of the Screen Descriptor.  A  color

   map  can  also  be associated with each image in a GIF file as described

   later.  However this  global  map  will  normally  be  used  because  of

   hardware  restrictions  in equipment available today.  In the individual

   Image Descriptors the 'M' flag will normally be  zero.   If  the  Global

   Color  Map  is  present,  it's definition immediately follows the Screen

   Descriptor.   The  number  of  color  map  entries  following  a  Screen

   Descriptor  is equal to 2**(# bits per pixel), where each entry consists

   of three byte values representing the relative intensities of red, green

   and blue respectively.  The structure of the Color Map block is:

              bits

         7 6 5 4 3 2 1 0  Byte #

        +---------------+

        | red intensity |  1    Red value for color index 0

        +---------------+

        |green intensity|  2    Green value for color index 0

        +---------------+

        | blue intensity|  3    Blue value for color index 0

        +---------------+

        | red intensity |  4    Red value for color index 1

        +---------------+

        |green intensity|  5    Green value for color index 1

        +---------------+

        | blue intensity|  6    Blue value for color index 1

        +---------------+

        :               :       (Continues for remaining colors)

        Each image pixel value received will be displayed according to  its

   closest match with an available color of the display based on this color

   map.  The color components represent a fractional intensity  value  from

   none  (0)  to  full (255).  White would be represented as (255,255,255),

   black as (0,0,0) and medium yellow as (180,180,0).  For display, if  the

   device  supports fewer than 8 bits per color component, the higher order

   bits of each component are used.  In the creation of  a  GIF  color  map

   entry  with  hardware  supporting  fewer  than 8 bits per component, the

   component values for the hardware  should  be  converted  to  the  8-bit

   format with the following calculation:

        <map_value> = <component_value>*255/(2**<nbits> -1)

        This assures accurate translation of colors for all  displays.   In

   the  cases  of  creating  GIF images from hardware without color palette

   capability, a fixed palette should be created  based  on  the  available

   display  colors for that hardware.  If no Global Color Map is indicated,

   a default color map is generated internally  which  maps  each  possible

   incoming  color  index to the same hardware color index modulo <n> where

   <n> is the number of available hardware colors.

Graphics Interchange Format (GIF)                                    Page 6

Specification

 IMAGE DESCRIPTOR

        The Image Descriptor defines the actual placement  and  extents  of

   the  following  image within the space defined in the Screen Descriptor.

   Also defined are flags to indicate the presence of a local color  lookup

   map, and to define the pixel display sequence.  Each Image Descriptor is

   introduced by an image separator  character.   The  role  of  the  Image

   Separator  is simply to provide a synchronization character to introduce

   an Image Descriptor.  This is desirable if a GIF file happens to contain

   more  than  one  image.   This  character  is defined as 0x2C hex or ','

   (comma).  When this character is encountered between images,  the  Image

   Descriptor will follow immediately.

        Any characters encountered between the end of a previous image  and

   the image separator character are to be ignored.  This allows future GIF

   enhancements to be present in newer image formats and yet ignored safely

   by older software decoders.

              bits

         7 6 5 4 3 2 1 0  Byte #

        +---------------+

        |0 0 1 0 1 1 0 0|  1    ',' - Image separator character

        +---------------+

        |               |  2    Start of image in pixels from the

        +-  Image Left -+       left side of the screen (LSB first)

        |               |  3

        +---------------+

        |               |  4

        +-  Image Top  -+       Start of image in pixels from the

        |               |  5    top of the screen (LSB first)

        +---------------+

        |               |  6

        +- Image Width -+       Width of the image in pixels (LSB first)

        |               |  7

        +---------------+

        |               |  8

        +- Image Height-+       Height of the image in pixels (LSB first)

        |               |  9

        +-+-+-+-+-+-----+       M=0 - Use global color map, ignore 'pixel'

        |M|I|0|0|0|pixel| 10    M=1 - Local color map follows, use 'pixel'

        +-+-+-+-+-+-----+       I=0 - Image formatted in Sequential order

                                I=1 - Image formatted in Interlaced order

                                pixel+1 - # bits per pixel for this image

        The specifications for the image position and size must be confined

   to  the  dimensions defined by the Screen Descriptor.  On the other hand

   it is not necessary that the image fill the entire screen defined.

 LOCAL COLOR MAP

Graphics Interchange Format (GIF)                                    Page 7

Specification

        A Local Color Map is optional and defined here for future use.   If

   the  'M' bit of byte 10 of the Image Descriptor is set, then a color map

   follows the Image Descriptor that applies only to the  following  image.

   At the end of the image, the color map will revert to that defined after

   the Screen Descriptor.  Note that the 'pixel' field of byte  10  of  the

   Image  Descriptor  is used only if a Local Color Map is indicated.  This

   defines the parameters not only for the image pixel size, but determines

   the  number  of color map entries that follow.  The bits per pixel value

   will also revert to the value specified in the  Screen  Descriptor  when

   processing of the image is complete.

 RASTER DATA

        The format of the actual image is defined as the  series  of  pixel

   color  index  values that make up the image.  The pixels are stored left

   to right sequentially for an image row.  By default each  image  row  is

   written  sequentially, top to bottom.  In the case that the Interlace or

   'I' bit is set in byte 10 of the Image Descriptor then the row order  of

   the  image  display  follows  a  four-pass process in which the image is

   filled in by widely spaced rows.  The first pass writes every  8th  row,

   starting  with  the top row of the image window.  The second pass writes

   every 8th row starting at the fifth row from the top.   The  third  pass

   writes every 4th row starting at the third row from the top.  The fourth

   pass completes the image, writing  every  other  row,  starting  at  the

   second row from the top.  A graphic description of this process follows:

   Image

   Row  Pass 1  Pass 2  Pass 3  Pass 4          Result

   ---------------------------------------------------

     0  **1a**                                  **1a**

     1                          **4a**          **4a**

     2                  **3a**                  **3a**

     3                          **4b**          **4b**

     4          **2a**                          **2a**

     5                          **4c**          **4c**

     6                  **3b**                  **3b**

     7                          **4d**          **4d**

     8  **1b**                                  **1b**

     9                          **4e**          **4e**

    10                  **3c**                  **3c**

    11                          **4f**          **4f**

    12          **2b**                          **2b**

   . . . 

        The image pixel values are processed as a series of  color  indices

   which  map  into the existing color map.  The resulting color value from

   the map is what is actually displayed.  This series  of  pixel  indices,

   the  number  of  which  is equal to image-width*image-height pixels, are

   passed to the GIF image data stream one value per pixel, compressed  and

   packaged  according  to  a  version  of the LZW compression algorithm as

   defined in Appendix C.

Graphics Interchange Format (GIF)                                    Page 8

Specification

 GIF TERMINATOR

        In order to provide a synchronization for the termination of a  GIF

   image  file,  a  GIF  decoder  will process the end of GIF mode when the

   character 0x3B hex or ';' is found after an image  has  been  processed.

   By  convention  the  decoding software will pause and wait for an action

   indicating that the user is ready to continue.  This may be  a  carriage

   return  entered  at  the  keyboard  or  a  mouse click.  For interactive

   applications this user action must  be  passed  on  to  the  host  as  a

   carriage  return  character  so  that the host application can continue.

   The decoding software will then typically leave graphics mode and resume

   any previous process.

 GIF EXTENSION BLOCKS

        To provide for orderly extension of the GIF definition, a mechanism

   for  defining  the  packaging  of extensions within a GIF data stream is

   necessary.  Specific GIF extensions are to be defined and documented  by

   CompuServe in order to provide a controlled enhancement path.

        GIF Extension Blocks are packaged in a manner similar to that  used

   by the raster data though not compressed.  The basic structure is:

         7 6 5 4 3 2 1 0  Byte #

        +---------------+

        |0 0 1 0 0 0 0 1|  1       '!' - GIF Extension Block Introducer

        +---------------+

        | function code |  2       Extension function code (0 to 255)

        +---------------+    ---+

        |  byte count   |       |

        +---------------+       |

        :               :       +-- Repeated as many times as necessary

        |func data bytes|       |

        :               :       |

        +---------------+    ---+

        . . .       . . .

        +---------------+

        |0 0 0 0 0 0 0 0|       zero byte count (terminates block)

        +---------------+

        A GIF Extension Block may immediately preceed any Image  Descriptor

   or occur before the GIF Terminator.

        All GIF decoders must be able to recognize  the  existence  of  GIF

   Extension  Blocks  and  read past them if unable to process the function

   code.  This ensures that older decoders will be able to process extended

   GIF   image   files   in  the  future,  though  without  the  additional

   functionality.

Graphics Interchange Format (GIF)                                    Page 9

Appendix A - Glossary

                                 GLOSSARY

Pixel - The smallest picture element of a  graphics  image.   This  usually

   corresponds  to  a single dot on a graphics screen.  Image resolution is

   typically given in units of  pixels.   For  example  a  fairly  standard

   graphics  screen  format  is  one 320 pixels across and 200 pixels high.

   Each pixel can  appear  as  one  of  several  colors  depending  on  the

   capabilities of the graphics hardware.

Raster - A horizontal row of pixels representing one line of an  image.   A

   typical method of working with images since most hardware is oriented to

   work most efficiently in this manner.

LSB - Least Significant Byte.  Refers to a convention for two byte  numeric

   values in which the less significant byte of the value preceeds the more

   significant byte.  This convention is typical on many microcomputers.

Color Map - The list of definitions of each color  used  in  a  GIF  image.

   These  desired  colors are converted to available colors through a table

   which is derived by assigning an incoming color index (from  the  image)

   to  an  output  color  index  (of  the  hardware).   While the color map

   definitons are specified in a GIF image, the output  pixel  colors  will

   vary  based  on  the  hardware used and its ability to match the defined

   color.

Interlace - The method of displaying a GIF image in which  multiple  passes

   are  made,  outputting  raster  lines  spaced  apart to provide a way of

   visualizing the general content of an entire image  before  all  of  the

   data has been processed.

B Protocol - A CompuServe-developed error-correcting file transfer protocol

   available  in  the  public  domain  and implemented in CompuServe VIDTEX

   products.  This error checking mechanism will be used  in  transfers  of

   GIF images for interactive applications.

LZW - A sophisticated data compression algorithm  based  on  work  done  by

   Lempel-Ziv  &  Welch  which  has  the feature of very efficient one-pass

   encoding and decoding.  This allows the image  to  be  decompressed  and

   displayed  at  the  same  time.   The  original  article from which this

   technique was adapted is:

          Terry  A.   Welch,  "A  Technique  for  High   Performance   Data

          Compression", IEEE Computer, vol 17 no 6 (June 1984)

        This basic algorithm is also used in the  public  domain  ARC  file

   compression  utilities.   The  CompuServe  adaptation  of LZW for GIF is

   described in Appendix C.

Graphics Interchange Format (GIF)                                   Page 10

Appendix B - Interactive Sequences

           GIF Sequence Exchanges for an Interactive Environment

        The following sequences are defined for use  in  mediating  control

   between a GIF sender and GIF receiver over an interactive communications

   line.  These  sequences  do  not  apply  to  applications  that  involve

   downloading  of  static  GIF  files and are not considered part of a GIF

   file.

 GIF CAPABILITIES ENQUIRY

        The GCE sequence is issued from a host and requests an  interactive

   GIF  decoder  to  return  a  response  message that defines the graphics

   parameters for the decoder.  This involves returning  information  about

   available screen sizes, number of bits/color supported and the amount of

   color detail supported.  The escape sequence for the GCE is defined as:

        ESC [ > 0 g     (g is lower case, spaces inserted for clarity)

                         (0x1B 0x5B 0x3E 0x30 0x67)

 GIF CAPABILITIES RESPONSE

        The GIF Capabilities Response message is returned by an interactive

   GIF  decoder  and  defines  the  decoder's  display capabilities for all

   graphics modes that are supported by the software.  Note that  this  can

   also include graphics printers as well as a monitor screen.  The general

   format of this message is:

     #version;protocol{;dev, width, height, color-bits, color-res}... <CR>

   '#'          - GCR identifier character (Number Sign)

   version      - GIF format version number;  initially '87a'

   protocol='0' - No end-to-end protocol supported by decoder

                  Transfer as direct 8-bit data stream.

   protocol='1' - Can use an error correction protocol to transfer GIF data

               interactively from the host directly to the display.

   dev = '0'    - Screen parameter set follows

   dev = '1'    - Printer parameter set follows

   width        - Maximum supported display width in pixels

   height       - Maximum supported display height in pixels

   color-bits   - Number of  bits  per  pixel  supported.   The  number  of

               supported colors is therefore 2**color-bits.

   color-res    - Number of bits  per  color  component  supported  in  the

               hardware  color  palette.   If  color-res  is  '0'  then  no

               hardware palette table is available.

        Note that all values in the  GCR  are  returned  as  ASCII  decimal

   numbers and the message is terminated by a Carriage Return character.

Graphics Interchange Format (GIF)                                   Page 11

Appendix B - Interactive Sequences

        The  following   GCR   message   describes   three   standard   EGA

   configurations  with  no  printer;  the GIF data stream can be processed

   within an error correcting protocol:

        #87a;1 ;0,320,200,4,0 ;0,640,200,2,2 ;0,640,350,4,2<CR>

 ENTER GIF GRAPHICS MODE

        Two sequences are currently defined to invoke  an  interactive  GIF

   decoder into action.  The only difference between them is that different

   output media are selected.  These sequences are:

     ESC [ > 1 g   Display GIF image on screen

                   (0x1B 0x5B 0x3E 0x31 0x67)

     ESC [ > 2 g   Display image directly to an attached graphics  printer.

                   The  image  may optionally be displayed on the screen as

                   well.

                   (0x1B 0x5B 0x3E 0x32 0x67)

        Note that the 'g' character terminating each sequence is  in  lower

   case.

 INTERACTIVE ENVIRONMENT

        The assumed environment for the transmission of GIF image data from

   an  interactive  application  is  a  full 8-bit data stream from host to

   micro.  All 256 character codes must be transferrable.  The establishing

   of  an 8-bit data path for communications will normally be taken care of

   by the host application programs.  It is however  up  to  the  receiving

   communications programs supporting GIF to be able to receive and pass on

   all 256 8-bit codes to the GIF decoder software.

Graphics Interchange Format (GIF)                                   Page 12

Appendix C - Image Packaging & Compression

        The Raster Data stream that represents the actual output image  can

   be represented as:

         7 6 5 4 3 2 1 0

        +---------------+

        |   code size   | 

        +---------------+     ---+

        |blok byte count|        |

        +---------------+        |

        :               :        +-- Repeated as many times as necessary

        |  data bytes   |        |

        :               :        |

        +---------------+     ---+

        . . .       . . .

        +---------------+

        |0 0 0 0 0 0 0 0|       zero byte count (terminates data stream)

        +---------------+

        The conversion of the image from a series  of  pixel  values  to  a

   transmitted or stored character stream involves several steps.  In brief

   these steps are:

   1.  Establish the Code Size -  Define  the  number  of  bits  needed  to

       represent the actual data.

   2.  Compress the Data - Compress the series of image pixels to a  series

       of compression codes.

   3.  Build a Series of Bytes - Take the  set  of  compression  codes  and

       convert to a string of 8-bit bytes.

   4.  Package the Bytes - Package sets of bytes into blocks  preceeded  by

       character counts and output.

ESTABLISH CODE SIZE

        The first byte of the GIF Raster Data stream is a value  indicating

   the minimum number of bits required to represent the set of actual pixel

   values.  Normally this will be the same as the  number  of  color  bits.

   Because  of  some  algorithmic constraints however, black & white images

   which have one color bit must be indicated as having a code size  of  2.

   This  code size value also implies that the compression codes must start

   out one bit longer.

COMPRESSION

        The LZW algorithm converts a series of data values into a series of

   codes  which may be raw values or a code designating a series of values.

   Using text characters as an analogy,  the  output  code  consists  of  a

   character or a code representing a string of characters.

Graphics Interchange Format (GIF)                                   Page 13

Appendix C - Image Packaging & Compression

        The LZW algorithm used in  GIF  matches  algorithmically  with  the

   standard LZW algorithm with the following differences:

   1.  A   special   Clear   code   is    defined    which    resets    all

       compression/decompression parameters and tables to a start-up state.

       The value of this code is 2**<code size>.  For example if  the  code

       size  indicated  was 4 (image was 4 bits/pixel) the Clear code value

       would be 16 (10000 binary).  The Clear code can appear at any  point

       in the image data stream and therefore requires the LZW algorithm to

       process succeeding codes as if  a  new  data  stream  was  starting.

       Encoders  should output a Clear code as the first code of each image

       data stream.

   2.  An End of Information code is defined that explicitly indicates  the

       end  of  the image data stream.  LZW processing terminates when this

       code is encountered.  It must be the last code output by the encoder

       for an image.  The value of this code is <Clear code>+1.

   3.  The first available compression code value is <Clear code>+2.

   4.  The output codes are of variable length, starting  at  <code size>+1

       bits  per code, up to 12 bits per code.  This defines a maximum code

       value of 4095 (hex FFF).  Whenever the LZW code value  would  exceed

       the  current  code length, the code length is increased by one.  The

       packing/unpacking of these codes must then be altered to reflect the

       new code length.

BUILD 8-BIT BYTES

        Because the LZW compression  used  for  GIF  creates  a  series  of

   variable  length  codes, of between 3 and 12 bits each, these codes must

   be reformed into a series of 8-bit bytes that  will  be  the  characters

   actually stored or transmitted.  This provides additional compression of

   the image.  The codes are formed into a stream of bits as if  they  were

   packed  right to left and then picked off 8 bits at a time to be output.

   Assuming a character array of 8 bits per character and using 5 bit codes

   to be packed, an example layout would be similar to:

         byte n       byte 5   byte 4   byte 3   byte 2   byte 1

        +-.....-----+--------+--------+--------+--------+--------+

        | and so on |hhhhhggg|ggfffffe|eeeedddd|dcccccbb|bbbaaaaa|

        +-.....-----+--------+--------+--------+--------+--------+

        Note that the physical  packing  arrangement  will  change  as  the

   number  of  bits per compression code change but the concept remains the

   same.

PACKAGE THE BYTES

        Once the bytes have been created, they are grouped into blocks  for

   output by preceeding each block of 0 to 255 bytes with a character count

   byte.  A block with a zero byte count terminates the Raster Data  stream

   for  a  given  image.  These blocks are what are actually output for the

Graphics Interchange Format (GIF)                                   Page 14

Appendix C - Image Packaging & Compression

   GIF image.  This block format has the side effect of allowing a decoding

   program  the  ability to read past the actual image data if necessary by

   reading block counts and then skipping over the data.

Graphics Interchange Format (GIF)                                   Page 15

Appendix D - Multiple Image Processing

        Since a  GIF  data  stream  can  contain  multiple  images,  it  is

   necessary  to  describe  processing and display of such a file.  Because

   the image descriptor allows  for  placement  of  the  image  within  the

   logical  screen,  it is possible to define a sequence of images that may

   each be a partial screen, but in total  fill  the  entire  screen.   The

   guidelines for handling the multiple image situation are:

   1.  There is no pause between images.  Each is processed immediately  as

       seen by the decoder.

   2.  Each image explicitly overwrites any image  already  on  the  screen

       inside  of  its window.  The only screen clears are at the beginning

       and end of the  GIF  image  process.   See  discussion  on  the  GIF

       terminator.