Top > giflib
TITLE:A library for processing GIFs (giflib)

- giflib -- A library for processing GIFs
--  http://sourceforge.net/projects/giflib/
>
giflib is a library for reading and writing gif images. It is API and ABI compatible with libungif which was in wide use while the LZW compression algorithm was patented.

 git clone https://git.code.sf.net/p/giflib/code giflib-code

- [[giflib-code]]

- [[giflib/macOS]]

 # libungif development stopped    2007-11-10

- libungif は開発中止で、API/ABI 互換の giflib が今時。

 cvs -d:pserver:anonymous@giflib.cvs.sourceforge.net:/cvsroot/giflib login
 cvs -z3 -d:pserver:anonymous@giflib.cvs.sourceforge.net:/cvsroot/giflib co -P  giflib

- Introduction to GIFLIB
--  http://giflib.sourceforge.net/doc/
- Utility (sample code)
-- http://giflib.cvs.sourceforge.net/giflib/giflib/util/

* 使い方 [#usage]

- http://giflib.sourceforge.net/doc/gif_lib.html
- http://diary.awm.jp/~yoya/?2008091#200809141 giflib の使い方を6行で説明
 ファイル名かファイルディスクリプタ(int fd) を渡して、GIF ファイル画像を開く。 
   GifFileType *DGifOpenFileName(char *GifFileName) 
   GifFileType *DGifOpenFileHandle(int GifFileHandle) 
 実際に画像を内部表現データ(in-core allocated structures)に取り込むのは、これ。 
   int DGifSlurp(GifFileType *GifFile) 
 後は、GifFileType 構造体のメンバーを辿って欲しい情報を引き出す。
- あ、やっぱり6行じゃ無理だった…追記
 尚、DGifSlurp 内部では逐次的にデータを取得していて、その層の API を
 使う事もできる。(util/rotat.c, gifrsize.c 参考のこと)
   while ((DGifGetRecordType(&GifFile, &RecordType)) &&
          (RecordType != TERMINATE_RECORD_TYPE)) {
       switch(RecordType) {
         case SCREEN_DESC_RECORD_TYPE:
            DGifGetScreenDesc(&GifFile);
            break;
       <略>

- http://diary.awm.jp/~yoya/?2008091#200809151 ファイルでなくデータ配列で GIF データを渡す方法
- http://diary.awm.jp/~yoya/?2008092&to=200809211#200809211 読み込みや書き出しの方法として、大雑把に2つあります
- http://diary.awm.jp/~yoya/?2008092&to=200809231#200809231 Encode/Decode だけするプログラム


* データ構造 [#struct]

 DGifSlurp を呼ぶと GiFileType に以下の構造でデータを格納してくれます。

- gif_lib.h 参照の事
 - GifFileType 
    |- SWitdh, SHeight <= スクリーンサイズ
    |- SColorResolution
    |- SBackGroundColor
    |- SColorMap <= グローバルな色パレット
    |- Image  <= SavedImages のカーソル?
    |- ImageCount <= フレーム数 (GIFアニメ用)
    |- SavedImages  <= 画像イメージデータ(の配列)

 - SavedImages
    |- ExtensionBlockCount
    |- ExtensionBlocks <= 透明色indexはこれに含まれる
    |- ImageDesc
    |    |- Left, Top, Width, Height <= Page geometry
    |    |- ColorMap <= ローカルカラーマップ
    |-RasterBits <= 画像データを(1次元)配列で格納

 - SColorMap, ColorMap
    |- ColorCount
    |- BitsPerPoxel
    |- Colors
        |- Red, Green, Blue

* 利用例 [#j12dd85b]

- http://awm.jp/~yoya/php/image/image_dump.php

* バージョン互換破壊 [#ac0dff2a]

-https://abi-laboratory.pro/?view=headers_diff&l=giflib&v1=5.0.6&v2=5.1.0

 - int EGifCloseFile(GifFileType * GifFile);
 + int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
 + #define E_GIF_SUCCEEDED          0
 
 - int DGifCloseFile(GifFileType * GifFile);
 + int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
 + #define D_GIF_SUCCEEDED          0


* 参考 [#ref]

- libungifとgiflib
--  http://sel.ist.osaka-u.ac.jp/~m-itii/php/d/soliloquy.php?mode=article&id=233
- Imager-0.53でGIFアニメーションのループをさせるためのパッチ
--  http://blog.clouder.jp/archives/000702.html

* 関連 [#rel]

- [[GIF]]
- [[libungif]]

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes