gd メモ
gd は c 言語から GIF ファイルを生成するためのライブラリである. ここに大
体の使い方をまとめた. 引数の確認程度の情報しかないので, 詳しいことはgd1.3 のホームページを参照
のこと. 現在のバージョン (1.3) よりも 1.2 の方がコンパクトな GIF フィル
が作れる. これは内部で使われる圧縮方法のパテントがらみでそうしているとの
ことで, 作者はファイルサイズに関する苦情はいっさい受け付けないそうである.
利用方法 |
データ型 |
関数一覧 |
関数要約 |
定数 |
サンプルプログラム
1998/9/4 by Takahiro Sumiya
1. 利用方法
- libgd の関数を使ったソースを作成する. test.c とする.
- libgd.a があるディレクトリを ~/lib とする.
- gd.h (libgd のヘッダファイル) があるディレクトリを ~/include とする.
- この場合, 以下のようにコンパイルする.
> gcc -o test test.c -I~/include -L~/lib -lgd
2. データ型
gdImage - イメージを格納する構造体
gdlib の基本的な使い方は
- gdImage を作成.
- 作成した gdImage に対して描画命令を発行し, イメージを作成する.
- gdImage の内容を出力する
という三段階を踏むことになる.
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. 関数要約
横 sx, 縦 sy の大きさの gdImage を作成する. メモリ不足の際などイメージ
を作れなかった場合は NULL を戻す. 作った gdImage は gdImageDestroy()
で破棄すること.
↑
既存のイメージファイルを読み込み, それを含んだイメージを作成する. in
には イメージファイルを指すファイルポインタを渡す. メモリ不足の場合や
イメージファイルが不正であるなどでイメージが作れなかった場合は NULL を
戻す. 作った イメージは gdImageDestory で破棄すること.
それぞれのバリエーションを使って, gif ファイル, gd ファイル, xbm ファ
イルから gdImage を作ることができる.
↑
gdImageCreate* で作ったイメージ (im) を破棄する.
↑
イメージ (im) をファイルポインタ (out) に出力する. gdImageGif は GIF
フォーマットで, gdImageGd は GD フォーマットで出力.
↑
イメージ (im) 内の指定座標 (x,y) に指定された色 (color) のピクセルを置
く.
↑
イメージ (im) 内の指定座標 (x1,y1) から指定座標 (x2,y2) へ指定された色
(color) を用いて線分を描く.
↑
破線を描く. これは gd1.0 との互換性のために用意されているものであり,
新版では gdImageSetStyle + gdImageLine を用いること.
↑
多角形を描く. points に多角形の頂点の座標を 3 つ以上指定すること.
pointsTotal には頂点の数を指定する. 最初の頂点と最後の頂点は一致してい
なくともよい. gdImagePolygon は多角形の輪郭を描
く. gdImageFilledPolygon は多角形の内部を塗りつぶす.
↑
長方形を描く. 左上の頂点を (x1, y1)に, 右したの頂点 を(x2,y2) に指定す
る. gdImageRectangle は長方形の輪郭を描く. gdImageFilledRectangle は長
方形の内部を塗りつぶす.
↑
楕円弧を描く. (cx,cy) に楕円の中心の座標を, w と h は楕円の幅と高さを
指定する. s には円弧の開始角を度で指定し, e には終了角を指定する. e>s
でなくてはならない. 360 よりも大きい数を角度として指定した場合は, その
数を 360 で割った余りを使う.
↑
指定した点 (x,y) が含まれる領域を指定した色 (color) で塗りつぶす. 領域
の境界色を border に指定する.
↑
指定した点 (x,y) が含まれる領域を指定した色 (color) で塗りつぶす. この
場合の領域は, 指定した点 (x,y) と同じ色で連続している領域のこと.
↑
以降の線分の描画 (gdImageLine, gdImageRectangle など) で, brush に指定
したイメージをペイントブラシとして使用する.
↑
以降の塗りつぶし (gdImageFill など) で, tile に指定したイメージを塗り
つぶしパターンとして利用する.
↑
破線のパターンを定義する. 以降の線分描画で, 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);
↑
(マクロ) 指定した色の{赤|緑|青}要素を返す.
↑
指定した点の色を(インデックスで)返す.
↑
指定した点がイメージの内部に含まれているかどうかを判定する. 含まれてい
る場合は 1 を含まれていない場合は 0 を返す.
↑
(マクロ)イメージの幅を返す.
↑
(マクロ)イメージの高さを返す.
↑
指定された座標 (x,y) に文字 (c) を一つ描く. 引数 font で, フォントフェー
スを指定する. デフォルトで使えるのは
gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant
それぞれを利用するためには,
gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h, gdfontg.h
をインクルードしておく必要がある.
↑
一文字を 90 度回転させて描く. 他の引数は gdImageChar と同じ.
↑
文字列 (s) を描く. 他の引数は gdImageChar と同じ.
↑
文字列 (s) を 90 度回転させて描く. 他の引数は gdImageChar と同じ.
↑
2バイト文字の文字列を描く.
↑
2バイト文字の文字列を90度回転させて描く.
↑
(r,g,b) で表現される色にインデックスを割り当てて返す. r, g, b 各々は 0
から 255 までの整数値. 返されたインデックスは, 描画関数の color 引数と
して利用できる. gif で利用できる色は 256 色までなので, これを越えて割
り当てようとした場合には -1 が返される.
一番最初に割り当てられた色が, そのイメージの背景色となる.
↑
これまでに割り当てられた色のうち, (r, g, b) にもっとも近いもののインデッ
クスを返す. 割り当てられた色が一つもない場合には, -1 が返される.
↑
これまでに割り当てられた色のうち, (r, g, b) と一致するもののインデッ
クスを返す. 一致する色がない場合には, -1 が返される.
↑
(マクロ) これまでに割り当てられた色の総数を返す.
↑
(マクロ) インデックスカラー (c) の{赤|緑|青}要素を返す.
↑
(マクロ) イメージがインターレースドかどうかを調べる. インターレースド
の場合 1 を, そうでない場合 0 を返す.
↑
(マクロ) 現在透過色に指定されている色のインデックスを返す. 透過色が指
定されていない場合は -1 を返す.
↑
color で指定するインデックスの割当を取り消す.
↑
指定した色 (color) を透過色に指定する.
↑
dst で指定したイメージの中に src で指定するイメージをコピーする. コピー
される領域は
src: (srcX, srcY, srcX+w, srcY+h)
dst: (dstX, dstY, dstX+w, dstY+h)
で定義される長方形. src と dst が同一のイメージでもよいが, 指定された
領域が重なりあって場合には結果は保証されない. src に含まれる色が dst
で割り当てられていない場合は, あたらしく色の割り当てを行なう. 割り当て
が失敗した場合には gdImageColorClosest を使って最も近い色を用いる.
↑
gdImageCopy と同様にイメージのコピーをするが, こちらは領域の大きさを変
えて拡大・縮小できる. コピーされる領域は
src: (srcX, srcY, srcX+srcW, srcY+srcH)
dst: (dstX, dstY, dstX+destW, dstY+destH)
で定義される長方形.
↑
イメージ (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 );
}
戻る