gd メモ

gd は c 言語から GIF ファイルを生成するためのライブラリである. ここに大 体の使い方をまとめた. 引数の確認程度の情報しかないので, 詳しいことはgd1.3 のホームページを参照 のこと. 現在のバージョン (1.3) よりも 1.2 の方がコンパクトな GIF フィル が作れる. これは内部で使われる圧縮方法のパテントがらみでそうしているとの ことで, 作者はファイルサイズに関する苦情はいっさい受け付けないそうである.

利用方法 | データ型 | 関数一覧 | 関数要約 | 定数 | サンプルプログラム

1998/9/4 by Takahiro Sumiya


1. 利用方法


2. データ型

gdImage - イメージを格納する構造体

gdlib の基本的な使い方は という三段階を踏むことになる.
	typedef struct {
	        unsigned char ** pixels;
	        int sx;
	        int sy;
	        int colorsTotal;
	        int red[gdMaxColors];
	        int green[gdMaxColors];
	        int blue[gdMaxColors];
	        int open[gdMaxColors];
	        int transparent;
	} gdImage, *gdImagePtr;

gdFont - フォントを格納する構造体

	typedef struct {
	        /* # of characters in font */
	        int nchars; 
	        /* First character is numbered... (usually 32 = space) */
	        int offset;
	        /* Character width and height */
	        int w;
	        int h;
	        /* Font data; array of characters, one row after another.
	                Easily included in code, also easily loaded from
	                data files. */
	        char *data;
	} gdFont, *gdFontPtr;

gdPoint - 座標を表現する構造体

	typedef struct {
	        int x, y;
	} gdPoint, *gdPointPtr;

3. 関数一覧

中にはマクロも含まれている. 関数の名前で大体の機能はわかる.

イメージの作成と破棄, 読み込みと保存

gdImageCreate | gdImageCreateFromGif | gdImageCreateFromGd | gdImageCreateFromXbm | gdImageDestroy | gdImageGif | gdImageGd

描画関数

gdImageSetPixel | gdImageLine | gdImageDashedLine | gdImagePolygon | gdImageFilledPolygon | gdImageRectangle | gdImageFilledRectangle | gdImageArc | gdImageFillToBorder | gdImageFill | gdImageSetBrush | gdImageSetTile | gdImageSetStyle

問い合わせをする関数

gdImageRed | gdImageGreen | gdImageBlue | gdImageGetPixel | gdImageBoundsSafe | gdImageSX | gdImageSY

フォントと文字を取り扱う関数

gdImageChar | gdImageCharUp | gdImageString | gdImageStringUp | gdImageString16 | gdImageStringUp16

色を取り扱う関数

gdImageColorAllocate | gdImageColorClosest | gdImageColorExact | gdImageColorsTotal | gdImageColorRed | gdImageColorGreen | gdImageColorBlue | gdImageGetInterlaced | gdImageGetTransparent | gdImageColorDeallocate | gdImageColorTransparent | gdImageInterlace

イメージをコピーする関数

gdImageCopy | gdImageCopyResized

4. 関数要約

gdImagePtr gdImageCreate(int sx, int sy)

横 sx, 縦 sy の大きさの gdImage を作成する. メモリ不足の際などイメージ を作れなかった場合は NULL を戻す. 作った gdImage は gdImageDestroy() で破棄すること.

gdImagePtr gdImageCreateFromGif(FILE *in)

gdImagePtr gdImageCreateFromGd(FILE *in)

gdImagePtr gdImageCreateFromXbm(FILE *in)

既存のイメージファイルを読み込み, それを含んだイメージを作成する. in には イメージファイルを指すファイルポインタを渡す. メモリ不足の場合や イメージファイルが不正であるなどでイメージが作れなかった場合は NULL を 戻す. 作った イメージは gdImageDestory で破棄すること.

それぞれのバリエーションを使って, gif ファイル, gd ファイル, xbm ファ イルから gdImage を作ることができる.

void gdImageDestroy(gdImagePtr im)

gdImageCreate* で作ったイメージ (im) を破棄する.

void gdImageGif(gdImagePtr im, FILE *out);

void gdImageGd(gdImagePtr im, FILE *out);

イメージ (im) をファイルポインタ (out) に出力する. gdImageGif は GIF フォーマットで, gdImageGd は GD フォーマットで出力.

void gdImageSetPixel(gdImagePtr im, int x, int y, int color);

イメージ (im) 内の指定座標 (x,y) に指定された色 (color) のピクセルを置 く.

void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)

イメージ (im) 内の指定座標 (x1,y1) から指定座標 (x2,y2) へ指定された色 (color) を用いて線分を描く.

void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)

破線を描く. これは gd1.0 との互換性のために用意されているものであり, 新版では gdImageSetStyle + gdImageLine を用いること.

void gdImagePolygon(gdImagePtr im, gdPointPtr points, int pointsTotal,int color)

void gdImageFilledPolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color)

多角形を描く. points に多角形の頂点の座標を 3 つ以上指定すること. pointsTotal には頂点の数を指定する. 最初の頂点と最後の頂点は一致してい なくともよい. gdImagePolygon は多角形の輪郭を描 く. gdImageFilledPolygon は多角形の内部を塗りつぶす.

void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)

void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)

長方形を描く. 左上の頂点を (x1, y1)に, 右したの頂点 を(x2,y2) に指定す る. gdImageRectangle は長方形の輪郭を描く. gdImageFilledRectangle は長 方形の内部を塗りつぶす.

void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)

楕円弧を描く. (cx,cy) に楕円の中心の座標を, w と h は楕円の幅と高さを 指定する. s には円弧の開始角を度で指定し, e には終了角を指定する. e>s でなくてはならない. 360 よりも大きい数を角度として指定した場合は, その 数を 360 で割った余りを使う.

void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color)

指定した点 (x,y) が含まれる領域を指定した色 (color) で塗りつぶす. 領域 の境界色を border に指定する.

void gdImageFill(gdImagePtr im, int x, int y, int color)

指定した点 (x,y) が含まれる領域を指定した色 (color) で塗りつぶす. この 場合の領域は, 指定した点 (x,y) と同じ色で連続している領域のこと.

void gdImageSetBrush(gdImagePtr im, gdImagePtr brush)

以降の線分の描画 (gdImageLine, gdImageRectangle など) で, brush に指定 したイメージをペイントブラシとして使用する.

void gdImageSetTile(gdImagePtr im, gdImagePtr tile)

以降の塗りつぶし (gdImageFill など) で, tile に指定したイメージを塗り つぶしパターンとして利用する.

void gdImageSetStyle(gdImagePtr im, int *style, int styleLength)

破線のパターンを定義する. 以降の線分描画で, color のパラメータに gdStyled を指定すると, ここで定義した破線が描画される. style は gdColor の配列. 破線の線がない部分には gdTransparent を指定す ればよい. styleLength には style の要素数を指定する.
例)
	red = gdImageColorAllocate(im, 255, 0, 0);
	/* Set up dashed style. Three on, three off. */
	styleDashed[0] = red;
	styleDashed[1] = red;
	styleDashed[2] = red;
	styleDashed[3] = gdTransparent;
	styleDashed[4] = gdTransparent;
	styleDashed[5] = gdTransparent;
	gdImageLine(im, 0, 99, 0, 99, gdStyled);

int gdImageRed(gdImagePtr im, int color)

int gdImageGreen(gdImagePtr im, int color)

int gdImageBlue(gdImagePtr im, int color)

(マクロ) 指定した色の{赤|緑|青}要素を返す.

int gdImageGetPixel(gdImagePtr im, int x, int y)

指定した点の色を(インデックスで)返す.

int gdImageBoundsSafe(gdImagePtr im, int x, int y)

指定した点がイメージの内部に含まれているかどうかを判定する. 含まれてい る場合は 1 を含まれていない場合は 0 を返す.

int gdImageSX(gdImagePtr im)

(マクロ)イメージの幅を返す.

int gdImageSY(gdImagePtr im)

(マクロ)イメージの高さを返す.

void gdImageChar(gdImagePtr im, gdFontPtr font, int x, int y, int c, int color);

指定された座標 (x,y) に文字 (c) を一つ描く. 引数 font で, フォントフェー スを指定する. デフォルトで使えるのは
gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant
それぞれを利用するためには,
gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h, gdfontg.h
をインクルードしておく必要がある.

void gdImageCharUp(gdImagePtr im, gdFontPtr font, int x, int y, int c, int color)

一文字を 90 度回転させて描く. 他の引数は gdImageChar と同じ.

void gdImageString(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color)

文字列 (s) を描く. 他の引数は gdImageChar と同じ.

void gdImageStringUp(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color)

文字列 (s) を 90 度回転させて描く. 他の引数は gdImageChar と同じ.

void gdImageString16(gdImagePtr im, gdFontPtr font, int x, int y, unsigned short *s, int color)

2バイト文字の文字列を描く.

void gdImageStringUp16(gdImagePtr im, gdFontPtr font, int x, int y, unsigned short *s, int color)

2バイト文字の文字列を90度回転させて描く.

int gdImageColorAllocate(gdImagePtr im, int r, int g, int b)

(r,g,b) で表現される色にインデックスを割り当てて返す. r, g, b 各々は 0 から 255 までの整数値. 返されたインデックスは, 描画関数の color 引数と して利用できる. gif で利用できる色は 256 色までなので, これを越えて割 り当てようとした場合には -1 が返される.

一番最初に割り当てられた色が, そのイメージの背景色となる.

int gdImageColorClosest(gdImagePtr im, int r, int g, int b)

これまでに割り当てられた色のうち, (r, g, b) にもっとも近いもののインデッ クスを返す. 割り当てられた色が一つもない場合には, -1 が返される.

int gdImageColorExact(gdImagePtr im, int r, int g, int b)

これまでに割り当てられた色のうち, (r, g, b) と一致するもののインデッ クスを返す. 一致する色がない場合には, -1 が返される.

int gdImageColorsTotal(gdImagePtr im)

(マクロ) これまでに割り当てられた色の総数を返す.

int gdImageColorRed(gdImagePtr im, int c)

int gdImageColorGreen(gdImagePtr im, int c)

int gdImageColorBlue(gdImagePtr im, int c)

(マクロ) インデックスカラー (c) の{赤|緑|青}要素を返す.

int gdImageGetInterlaced(gdImagePtr im)

(マクロ) イメージがインターレースドかどうかを調べる. インターレースド の場合 1 を, そうでない場合 0 を返す.

int gdImageGetTransparent(gdImagePtr im)

(マクロ) 現在透過色に指定されている色のインデックスを返す. 透過色が指 定されていない場合は -1 を返す.

void gdImageColorDeallocate(gdImagePtr im, int color)

color で指定するインデックスの割当を取り消す.

void gdImageColorTransparent(gdImagePtr im, int color)

指定した色 (color) を透過色に指定する.

void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h)

dst で指定したイメージの中に src で指定するイメージをコピーする. コピー される領域は
 src: (srcX, srcY, srcX+w, srcY+h)
 dst: (dstX, dstY, dstX+w, dstY+h)
で定義される長方形. src と dst が同一のイメージでもよいが, 指定された 領域が重なりあって場合には結果は保証されない. src に含まれる色が dst で割り当てられていない場合は, あたらしく色の割り当てを行なう. 割り当て が失敗した場合には gdImageColorClosest を使って最も近い色を用いる.

void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int destW, int destH, int srcW, int srcH)

gdImageCopy と同様にイメージのコピーをするが, こちらは領域の大きさを変 えて拡大・縮小できる. コピーされる領域は
 src: (srcX, srcY, srcX+srcW, srcY+srcH)
 dst: (dstX, dstY, dstX+destW, dstY+destH)
で定義される長方形.

void gdImageInterlace(gdImagePtr im, int interlace)

イメージ (im) が出力される時, インターレーストイメージとして出力するよ うに指定する. interlace に非零の値を指定する.


5. 定数

gdBrushed, gdMaxColors, gdStyled, gdStyledBrushed, gdDashSize, gdTiled, gdTransparent

6. サンプルプログラム

#include <stdlib.h>
#include <stdio.h>
#include <gd.h>

int main ( int argc, char **argv ) {
  gdImagePtr im;
  int white,black,red;

  /* 100x100 のイメージを作成する */
  im = gdImageCreate ( 100, 100 );

  /* 白色を割り当てる. 最初の割当だから, 白色が背景色になる */
  white = gdImageColorAllocate ( im, 255, 255, 255 );

  /* 黒色と赤色を割り当てる */
  black = gdImageColorAllocate ( im,   0,   0,   0 );
  red   = gdImageColorAllocate ( im, 255,   0,   0 );

  /* (0,0)-(100,100) に斜めの黒い線を描く */
  gdImageLine ( im, 0, 0, 100, 100, black );  

  /* (0,100)-(100,0) に斜めの赤い線を描く */
  gdImageLine ( im, 0, 100, 100, 0, red );  

  /* 標準出力にイメージを gif フォーマットで出力する */
  gdImageGif ( im, stdout );

  /* 作成したイメージを破棄する */
  gdImageDestroy ( im );

  return ( 0 );
}

戻る