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]]