gd 1.8.4

高速な画像生成のためのグラフィックスライブラリ

この文書の最新版は このリンク から入手可能です.

おい! これを読めよ! gd 1.8.4 PNG, JPEG 及び WBMP 形式の画像を生成するが GIF 画像を生成しない。 これはいいことである。 PNG はより圧縮率が高い画像形式であり、完全な圧縮が可能である。 JPEG は写真画像の目的に適しており、 PNG よりも主要なWebブラウザと互換性がある。 WBMP は、(通常の web ブラウザではない)無線デバイスのために使用される 目的のための形式である。 古いプログラムは、gdImageGif の代わりにgdImagePng か gdImageJpeg を 呼び出すように修正が必要かも知れない。 我々に、GDの古いGIF版を送ってくれと頼むようなことはしないで下さい。 Unisys は LZW 圧縮アルゴリズムの特許を持っている。 このアルゴリズムは完全に圧縮されたGIF画像において使用される。 最適な解決法は、できるだけ早く、PNG や JPEGのような、法的に自由であり、 圧縮率の高い現代的な画像形式に移行することである。

gd 1.8.4 は以下のライブラリがインストールされていることを要求する

libpng (see the libpng home page)

zlib (see the info-zip home page) zlib

jpeg-6b or later, (もし必要なら) (Independent JPEG Group home pageを見よ。)

もしあなたが、TrueType フォントサポートを使用したいならば、 あなたは, ヘッダファイルをともに、FreeType 2.x ライブラリをインストールしなければ ならない。 Freetype Home Page, かあるいは、SourceForgeを見よ. いや、私はなぜそのサイトが特定の日にダウンしている理由を説明できないし、 あなたにそのサイトのコピーを送ることもできない。

もしあなたが、the Xpm color bitmap loading サポートを使用したのであれば、 あなたは Xウィンドウシステムと Xpm ライブラリーをインストールする 必要がある。(Xpm はしばしば最新のXディストリビューションに含まれている。)

この文書を読んで必要なライブラリーをインストールして下さい。 なぜpng.hが見付からないかと尋ねるメールを送らないで 下さい。 詳しくは 必要な環境を見よ. ありがとう!

目次

Boutell.Com, Inc. Home Page

クレジットとライセンス

In order to resolve any possible confusion regarding the authorship of gd, the following copyright statement covers all of the authors who have required such a statement. If you are aware of any oversights in this copyright notice, please contact Thomas Boutell who will be pleased to correct them.

COPYRIGHT STATEMENT FOLLOWS THIS LINE
Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by the National Institutes of Health.

Portions copyright 1996, 1997, 1998, 1999, 2000 by Boutell.Com, Inc.

Portions relating to GD2 format copyright 1999, 2000 Philip Warner.

Portions relating to PNG copyright 1999, 2000 Greg Roelofs.

Portions relating to libttf copyright 1999, 2000 John Ellson (ellson@lucent.com).

Portions relating to JPEG copyright 2000, Doug Becker and copyright (C) 1994-1998, Thomas G. Lane. This software is based in part on the work of the Independent JPEG Group.

Portions relating to WBMP copyright 2000 Maurice Szmurlo and Johan Van den Brande.

Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation.

This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd. If you have questions, ask. "Derived works" includes all programs that utilize the library. Credit must be given in user-accessible documentation.

This software is provided "AS IS." The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation.

Although their code does not appear in gd 1.8.4, the authors wish to thank David Koblas, David Rowley, and Hutchison Avenue Software Corporation for their prior contributions.

END OF COPYRIGHT STATEMENT

gdとは何か?

gd はグラフィックスライブラリである. gdを使えば, あなたのプログラムから, 線分, 弧, テキスト, 複数色, 他の画像からの切り貼り, フラッド(flood)フィルによって, 速く画像を描くこと ができ, 結果をPNGやJPEGファイルとして書き出すことができる. これは, WWWアプリケーションにおいて特に有用である. ここで, PNGとJPEGはほとんどのブラウザによってインライン画像のために 受け入れたれた2つの画像形式である.

gd は特許プログラムではない. もしあなたがペイントプログラムを捜しているのであれば, あなたは間違ったところを見ている. もしあなたがプログラマーでないのなら, あなたは間違ったところ を見ている.

gd はすべての可能なグラフィックス操作を提供するわけではない. gd にとって必要かつ望ましいことは kitchen-sink グラフィックス パッケージになることである. しかし version 1.7.3 は, 8ビット 2Dパッケージに対して共通に要求されるほとんどの特徴 を具備するに至った. truecolor JPEG と PNG を含む truecolor画像 に対するサポートは version 2.0で計画されている.

別のプログラミング言語を使いたかったとしたらどうか?

Perl

Lincoln Stein の好意によって, gd は Perl からも使用することができる. GD.pm ライブラリは, gd をPerl 5.x クラスの基礎として使用している. 高度に推奨される.

Tcl

John Ellson の動的にロードされる拡張パッケージ Gdtclft を使ってTclからも使用できる. (gd-1.6 に対しては, Gdtclft2.0 以降が必要とされ, PNG 出力 が可能である.)

Pascal

Pascal の熱狂的信者は, Michael Bradburyの gdfp パッケージを 見るべきである.

Haskell

Haskell プログラマたちには, 新しいgdインターフェースは使用可能である.

REXX

REXX 言語に対する gd インターフェース が利用可能である.

任意の言語

現時点では, gd操作を実行する少くとも3つのインタープリタが存在する. あなたは, あなたが使用したい好きなスクリプト言語から実行できる コマンドをテキストファイルを入力して, そのインタープリタを実行すれ ば良い.

GDのバージョン"XYZ"において新しいものは何か?

What's new in version 1.8.3?

What's new in version 1.8.2?

What's new in version 1.8.1?

What's new in version 1.8?

Additional JPEG Information

Support for reading and writing JPEG-format images is courtesy of Doug Becker and the Independent JPEG Group / Thomas G. Lane. You can get the latest version of the IJG JPEG software from ftp://ftp.uu.net/graphics/jpeg/ (e.g., the jpegsrc.v6b.tar.gz file). You must use version 6b or later of the IJG JPEG software. You might also consult the JPEG FAQ at http://www.faqs.org/faqs/jpeg-faq/.

What's new in version 1.7.3?

Another attempt at Makefile fixes to permit linking with all libraries required on platforms with order- dependent linkers. Perhaps it will work this time.

What's new in version 1.7.2?

An uninitialized-pointer bug in gdtestttf.c was corrected. This bug caused crashes at the end of each call to gdImageStringTTF on some platforms. Thanks to Wolfgang Haefelinger.

Documentation fixes. Thanks to Dohn Arms.

Makefile fixes to permit linking with all libraries required on platforms with order- dependent linkers.

What's new in version 1.7.1?

A minor buglet in the Makefile was corrected, as well as an inaccurate error message in gdtestttf.c. Thanks to Masahito Yamaga.

What's new in version 1.7?

Version 1.7 contains the following changes:

What's new in version 1.6.3?

Version 1.6.3 corrects a memory leak in gd_png.c. This leak caused a significant amount of memory to be allocated and not freed when writing a PNG image.

What's new in version 1.6.2?

Version 1.6.2 from John Ellson adds two new functions:

Also in this release the build process has been converted to GNU autoconf/automake/libtool conventions so that both (or either) static and shared libraries can be built.

What's new in version 1.6.1?

Version 1.6.1 incorporates superior PNG reading and writing code from Greg Roelofs, with minor modifications by Tom Boutell. Specifically, I altered his code to read non-palette images (converting them to palette images badly, by dithering them), and to tolerate palette images with types of transparency that gd doesn't actually support (it just ignores the advanced transparency features). Any bugs in this area are therefore my fault, not Greg's.

Unlike gd 1.6, users should have no trouble linking with gd 1.6.1 if they follow the instructions and install all of the pieces. However, If you get undefined symbol errors, be sure to check for older versions of libpng in your library directories!

What's new in version 1.6?

Version 1.6 features the following changes:

Support for 8-bit palette PNG images has been added. Support for GIF has been removed. This step was taken to completely avoid the legal controversy regarding the LZW compression algorithm used in GIF. Unisys holds a patent which is relevant to LZW compression. PNG is a superior image format in any case. Now that PNG is supported by both Microsoft Internet Explorer and Netscape (in their recent releases), we highly recommend that GD users upgrade in order to get well-compressed images in a format which is legally unemcumbered.

What's new in version 1.5?

Version 1.5 featured the following changes:
New GD2 format
An improvement over the GD format, the GD2 format uses the zlib compression library to compress the image in chunks. This results in file sizes comparable to GIFs, with the ability to access parts of large images without having to read the entire image into memory.

This format also supports version numbers and rudimentary validity checks, so it should be more 'supportable' than the previous GD format.

Re-arranged source files
gd.c has been broken into constituant parts: io, gif, gd, gd2 and graphics functions are now in separate files.

Extended I/O capabilities.
The source/sink feature has been extended to support GD2 file formats (which require seek/tell functions), and to allow more general non-file I/O.

Better support for Lincoln Stein's Perl Module
The new gdImage*Ptr function returns the chosen format stored in a block of memory. This can be directly used by the GD perl module.

Added functions
gdImageCreateFromGd2Part - allows retrieval of part of an image (good for huge images, like maps),
gdImagePaletteCopy - Copies a palette from one image to another, doing it's best to match the colors in the target image to the colors in the source palette.
gdImageGd2, gdImageCreateFromGd2 - Support for new format
gdImageCopyMerge - Merges two images (useful to highlight part of an image)
gdImageCopyMergeGray - Similar to gdImageCopyMerge, but tries to preserve source image hue.
gdImagePngPtr, gdImageJpegPtr, gdImageWBMPPtr, gdImageGdPtr, gdImageGd2Ptr - return memory blocks for each type of image.
gdImageCreateFromPngCtx, gdImageCreateFromGdCtx, gdImageCreateFromGd2Ctx, gdImageCreateFromGd2PartCtx - Support for new I/O context.
NOTE: In fairness to Thomas Boutell, any bug/problems with any of the above features should probably be reported to Philip Warner.

What's new in version 1.4?

Version 1.4 features the following changes:
Fixed polygon fill routine (again)
Thanks to Kirsten Schulz, version 1.4 is able to fill numerous types of polygons that caused problems with previous releases, including version 1.3.
Support for alternate data sources
Programmers who wish to load a GIF from something other than a stdio FILE * stream can use the new gdImageCreateFromPngSource function.
Support for alternate data destinations
Programmers who wish to write a GIF to something other than a stdio FILE * stream can use the new gdImagePngToSink function.
More tolerant when reading GIFs
Version 1.4 does not crash when reading certain animated GIFs, although it still only reads the first frame. Version 1.4 also has overflow testing code to prevent crashes when reading damaged GIFs.

What's new in version 1.3?

Version 1.3 features the following changes:
Non-LZW-based GIF compression code
Version 1.3 contained GIF compression code that uses simple Run Length Encoding instead of LZW compression, while still retaining compatibility with normal LZW-based GIF decoders (your browser will still like your GIFs). LZW compression is patented by Unisys. We are currently reevaluating the approach taken by gd 1.3. The current release of gd does not support this approach. We recommend that you use the current release, and generate PNG images. Thanks to Hutchison Avenue Software Corporation for contributing the RLE GIF code.
8-bit fonts, and 8-bit font support
This improves support for European languages. Thanks are due to Honza Pazdziora and also to Jan Pazdziora . Also see the provided bdftogd Perl script if you wish to convert fixed-width X11 fonts to gd fonts.
16-bit font support (no fonts provided)
Although no such fonts are provided in the distribution, fonts containing more than 256 characters should work if the gdImageString16 and gdImageStringUp16 routines are used.
Improvements to the "webpng" example/utility
The "webpng" utility is now a slightly more useful application. Thanks to Brian Dowling for this code.
Corrections to the color resolution field of GIF output
Thanks to Bruno Aureli.
Fixed polygon fills
A one-line patch for the infamous polygon fill bug, courtesy of Jim Mason. I believe this fix is sufficient. However, if you find a situation where polygon fills still fail to behave properly, please send code that demonstrates the problem, and a fix if you have one. Verifying the fix is important.
Row-major, not column-major
Internally, gd now represents the array of pixels as an array of rows of pixels, rather than an array of columns of pixels. This improves the performance of compression and decompression routines slightly, because horizontally adjacent pixels are now next to each other in memory. This should not affect properly written gd applications, but applications that directly manipulate the pixels array will require changes.

gdを使用するために他に必要なものは何か?

gd を使用するためには, あなたは ANSI C コンパイラが必要である. すべてのWindows 95 及び NT C コンパイラは ANSI C準拠である. 任意の完全にANSI標準のCコンパイラが望ましい. SunOS 4.1.3 で リリースされた cc コンパイラは ANSI Cコンパイラではない. まだ gcc を持っていないほとんどのUnixユーザは, それを使用するべきである. gcc は, free でANSI準拠でかつ産業界のデファクトスタンダードである. あなたのISP になぜそれが無いのかを尋ねよ.

Version 1.6 までは, あなたは zlib圧縮ライブラリとlibpngライブラリ も必要であった. version 1.6.2までは, もし libttf がインストールしてあれば, あなたはアンチエイリアストTrueTypeフォントを使用してテキストを 描くことができる. しかしこれらはもはや強制ではなくなった. zlib は様々なプラットフォームに対して, the zlib web site からダウンロードできる. libpng は様々なプラットフォームに対して, the PNG web site からダウンロードできる.

もしあなたが既にあなたのシステム上にそれを持っていないのであれば, あなたはPNGビューワも必要とするかも知れない. これは, あなたのプログラムの結果をチェックするのに良い方法を提供してく れるであろう. Netscape 4.04 以降と Microsoft Internet Explorer 4.0 以降の両方は PNG をサポートしている. 特定の目的のためには, Lview Pro for Windows か, もしくは, xv for X のようなパッケージを使用したほうがあなたは幸せかも知れない. グラフィックスを表示できる現代的なオペレーティングシステム上で 使用可能な様々なPNGビューワが存在するので, あなたのシステム に関係あるニュースグループで尋ねてみよ.

どうやってgdを手に入れたらよいか?

HTTP

FTP

どのように gd をビルドするか?

gd をビルドするためには, あなたはまずダウンロードしたアーカイブ ファイルを展開しなければなりません. もしあなたが, targunzip (Unix) か ZIP (Windows) に慣れていないのであれば, あなたのシステムの経験豊富なユーザに 相談して下さい. 申し訳ありませんが, 我々は, インターネットの基本的なスキルに ついての質問には答えられません.

アーカイブファイルを展開すると,"gd-1.8.4"というディレクトリが作られます.

Unix

まずその 1.8.4 ディレクトリにcd しなさい. Makefile をあなたの好きな テキストエディタを使用して, 特に Xpm か TrueType サポートが 必要ならば, 先頭の設定に必要な変更を加えなさい. 次に"make"を実行しなさい. もしあなたがシステム管理者であって, あなたが, 他のプログラムからも gdライブラリが利用できるようにしたにのであれば, あなたは "make install" を実行すべきである.

もしエラーが出たら, INCLUDEDIRS と LIBDIRS に特に注意して Makefile を再び編集なさい.

もしリンカエラーが出たら, Makefile の -l ディレクティブの順番を上手に処理する ことを試みなさい. あるプラットフォームでは, これらのライブラリが逆順に並んでいる ことが好まれるかも知れません.

For Windows, Mac, Et Cetera

あなたの好きな開発環境を使用してプロジェクトを作れ. そのプロジェクトディレクトリにすべての gdファイルをコピーしなさい. gd.c をあなたのプロジェクトに追加しなさい. 適切に他のソースファイルも追加しなさい. あなたが選んだC開発環境でプロジェクトを生成するスキルは あなたに任されている.

あなたは, gd ライブラリとgs の能力を示すデモプログラムをビルドします. それが動くようすを見るためには, "gddemo"を実行しなさい.

l gddemo は, 無事にファイルdemoout.pngを生成するはずである. (demoin.png という名前のファイルもあることに注意せよ. これは デモの一部分としてパッケージに含まれている.)

demoout.png をあなたのPNGビューワで表示しなさい. その画像は 128x128 ピクセルであるべきであり, その先端に多くのグラフィカル要素が描かれているスペースシャトルの画像が 含まれているはずである.

(もしdemoin.pngファイルが見付からないのであれば, 別のファイルが現れるべきであろう.)

元のスペースシャトルの画像は demoin.png で見ることができる. この画像は, output.png では拡大コピーされている.

gd の基本: gd をあなたのプログラムで使う

gd を使えば, PNG や JPEG 画像を簡単に作ることができる. あなたのプログラムで gd を使うためには, gd.h をインクルードして libgd.a とリンクすればよい. libgda は, Unix 上では, "make libgd.a" で生成されるライブラリであ. 別のオペレーティングシステムでは, あなたは, gd.c をあなた自身のプロジェクトに追加するであろう.

もしあなたが, 提供されるフォントを使用したいのであれば, gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h かつ/または gdfontg.h をインクルードしなさい. より印象的な結果のためには, FreeType 2.x をインストールして, 新しい gdImageStringFT関数を使用しなさい. もしあなたが, 提供されたMakefile を使用していない, かつ/または, ライブラリに基づいたアプローチを使用しないのであれば, あなたのプロジェクトに必要なソースモジュールをインクルードする のを忘れないように. (それらは, 16ビット DOS とWindows のような, 16ビットメモリモデルのコンピュータには大きすぎるであろう.)

ここに, 短いプログラムの例がある. (より発展的な例については, ディストリビューションに含まれている gddemo.cを見よ. gddemo.c はは 同じプログラムではない. それは追加的な機能を示すためのものである!)

/* Bring in gd library functions */
#include "gd.h"

/* Bring in standard I/O so we can output the PNG to a file */
#include <stdio.h>

int main() {
	/* Declare the image */
	gdImagePtr im;
	/* Declare output files */
	FILE *pngout, *jpegout;
	/* Declare color indexes */
	int black;
	int white;

	/* 画像の生成: 幅 64 ピクセル × 高さ 64 ピクセル */
	im = gdImageCreate(64, 64);

	/* 色 black の割当て (赤, 緑, 青の全ては最小値 0 にセットされる).
	        これは, 生成された画像 im に割当てられる初めての色で
		あるため, この色(黒)が背景色となる. */
	black = gdImageColorAllocate(im, 0, 0, 0);	

	/* 色 white の割当て (赤, 緑, 青の全ては最大値 255 にセットされる). */
	white = gdImageColorAllocate(im, 255, 255, 255);	
	
	/* while を使って左上から右下へ線を引く. */
	gdImageLine(im, 0, 0, 63, 63, white);	

	/* 書き込みのためにファイルを開く. 
	 "wb" は "write binary (バイナリで書き込み)" を意味する. 
	   MSDOS では重要, Unix では無害である. */
	pngout = fopen("test.png", "wb");

	/* 上と同じことを JPEG 形式のファイルで行う. */
	jpegout = fopen("test.jpg", "wb");

	/* PNG形式のファイルに画像を出力する. */
	gdImagePng(im, pngout);

	/* 上と同じ画像を JPEG 形式で行う. format, using the default
		JPEG の品質設定はデフォルトのものを使用する. */
	gdImageJpeg(im, jpegout, -1);

	/* ファイルを閉じる. */
	fclose(pngout);
	fclose(jpegout);

	/* メモリの中の画像を廃棄する. */
	gdImageDestroy(im);
}
実行するとこのプログラムは画像を生成し, 2つの色を割当て. (最初に割当てられた色が背景色となる), 対角線を引き(0, 0が左上隅である ことに注意せよ), 画像とPNGとJPEGファイルに出力する. そして, 画像を廃棄する.

上の例題のプログラムのは, あなたにパッケージがどのように動作するか についてのアイディアを与えるはずである. gd はこれら以外にも多くの関数を提供する. これらの関数は, 以下の章でプログラムの断片とともに示されるであろう. さらに, アルファベット順の索引もある.

Webpng: より強力な gd の例

Webpngは, コマンドラインからPNGファイルを操作するための 単純なユーティリティプログラムである. これは, Unixや同様のコマンドラインシステムのために書かれているが, 他の環境にも簡単に適合させることができる. Webpng は, 透過性やインターレースを設定したり 当該のPNGの疑問興味深い情報を出力することを可能にする.

webpng.c はディストリビューションに提供されている. Unix ユーザ は, このプログラムをコンパイルするために, 単に"make webpng" を実行すれば良い. 可能なオプションを見るためには, 引数無しで "webpng" を実行せよ.

関数と型のカテゴリー別リファレンス

gdImage(型)
gdが画像を保存するデータ構造. gdImageCreate は、この型へのポインタを返し、 他の関数はこの型へのポインタを最初の引数をして受け取ることを 要求する。あなたは, この構造体のメンバ sx (X 軸のサイズ), sy (Y 軸のサイズ), colorsTotal (全色), red (色の赤成分; 0から255間の整数型のサイズが 256の配列), green (上と同様の色の緑成分), blue (上と同様の色の青成分), 及び transparent (透過色のインデックス, もし透過色が無いのであれば -1) を読むことができる; これらのメンバを読むときには, 提供されているマクロ関数を使用して下さい. あなたのプログラムから直接にこれらのメンバを設定することはしないで下さい. 提供されている関数を使用せよ.
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 (型)
画像構造体へのポインタ. gdImageCreate はこの型を返し, 他の関数はこの型の変数を第1引数として期待する.
gdFont (型)
フォント構造体. 特定のフォントの特徴を宣言するのに使用される. この構造体の適切な宣言の仕方の例については, ファイル gdfontl.c と gdfontl.h を見よ. あなたは, あなた自身のフォントデータ を, このような構造体と関連するピクセル配列に与えることによって, 提供することができる. あなたは, その構造体の w と h メンバーを 調べることによって, 1つの文字の幅と高さを決定することができる. もしあなたが, あなた自身のフォントを生成しないのであれば, あなたは この構造体の他のメンバについては知る必要はないであろう.
typedef struct {
	/* フォントの中にある文字の数 */
	int nchars;
	/* 最初の文字の番号 (通常は 32 = 空白文字) */
	int offset;
	/* 文字の幅と高さ */
	int w;
	int h;
	/* フォントデータ: 文字の配列, 1つの行の一文字. 
		Easily included in code, also easily loaded from
		data files. */
	char *data;
} gdFont;
gdFontPtr (型)
フォント構造体へのポインタ. テキストを出力する関数はこれらを gdImagePtrに続いて、第2引数として期待する. 2つのそのようなポインタは, 提供されているインクルードファイル gdfonts.h 及び and gdfontl.h で宣言されている.
gdPoint (型)
は, 画像の座標空間の中の点を表現する; この型は, gdImagePolygon及び gdImageFilledPolygonによって 使用される.
typedef struct {
        int x, y;
} gdPoint, *gdPointPtr;
gdPointPtr (型)
gdPoint構造体へのポインタ; gdImagePolygon 及びgdImageFilledPolygon への引数として渡される.
gdSource (型)
typedef struct {
        int (*source) (void *context, char *buffer, int len);
        void *context;
} gdSource, *gdSourcePtr;
それからPNGを読み込むことができるソースを表わす. PNGをファイルから読み込みたいと思わないプログラマは, gdImageCreateFromPngSource 関数を使用することによって, 彼ら自身の代替的な入力メカニズムを提供することができる. この型の適切な使用例については, gdImageCreateFromPngSource 関数の 説明を見よ.
gdSink (型)
typedef struct {
        int (*sink) (void *context, char *buffer, int len);
        void *context;
} gdSink, *gdSinkPtr;
PNG を書き出すことができる "シンク" (行き先) を表わす. PNGをファイル書き出したいと思わないプログラマは, gdImagePngToSink 関数を使用することによって, 彼ら自身の代替的な出力メカニズムを提供することができる. この型の適切な使用例については, gdImagePngToSink 関数の 説明を見よ.

画像の生成, 破棄, 読み込みと書き出し

gdImageCreate(sx, sy) (関数)
gdImageCreate は画像と生成するために呼び出される. 描こうとする 画像の x 軸と y軸の大きさとともに gdImageCreate を呼出せ. gdImageCreate は, 生成された画像へのポインタ gdImagePtr か, あるいは, 画像の生成に失敗した場合には NULL を返す. この画像は, 最終的にgdImageDestroy() を使用して破棄されなければならない.
... inside a function ...
gdImagePtr im;
im = gdImageCreate(64, 64);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromJpeg(FILE *in) (関数)
gdImageCreateFromJpegCtx(FILE *in) (関数)

gdImageCreateFromJpeg は, JPEG形式のファイルから画像を読み込むために 呼び出される. 望む画像を含むファイルへの既に開かれたポインタを与えて, gdImageCreateFromJpegを呼出せ. gdImageCreateFromJpeg は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromJpeg は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
gdImagePtr im;
... inside a function ...
FILE *in;
in = fopen("myjpeg.jpg", "rb");
im = gdImageCreateFromJpeg(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromPng(FILE *in) (関数)
gdImageCreateFromPngCtx(gdIOCtx *in) (関数)

gdImageCreateFromPng は, PNG形式のファイルから画像を読み込むために 呼び出される. 望む画像を含むファイルへの既に開かれたポインタを与えて, gdImageCreateFromPngを呼出せ. gdImageCreateFromPng は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromPng は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
gdImagePtr im;
... inside a function ...
FILE *in;
in = fopen("mypng.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromPngSource(gdSourcePtr in) (関数)
gdImageCreateFromPngSource は, ファイルとは異なるデータソース から PNG を読み込むために呼出される. 使用法は, プログラマが自作のデータソースを用意しなければならない 点を除けば, gdImageCreateFromPng 関数と非常によく似ている.

プログラマは, コンテクストポイント, バッファ, 及び, 読み込まれる バイト数を引数として受け付けるような入力関数を書かなければならない. この関数は, ファイルの終端に達っしない限り, 要求された数のバイト数を読み込 む. この場合はゼロを返し, エラーが起った場合には-1を 返す. プログラマは, 次にgdSource構造体を 生成し, 入力関数へのsourceポインタとプログラムに 有用な任意の値へのコンテクストポインタを設定する.

以下の例は, 自作のデータソースを生成して gdImageCreateFromPngSource を呼出すことによって, gdImageCreateFromPng を実装している.

static int freadWrapper(void *context, char *buf, int len);

gdImagePtr gdImageCreateFromPng(FILE *in)
{
        gdSource s;
        s.source = freadWrapper;
        s.context = in;
        return gdImageCreateFromPngSource(&s);
}

static int freadWrapper(void *context, char *buf, int len)
{
        int got = fread(buf, 1, len, (FILE *) context);
        return got;
}
gdImageCreateFromGd(FILE *in) (関数)
gdImageCreateFromGdCtx(gdIOCtx *in) (関数)

gdImageCreateFromGd は, gd形式のファイルから画像を読み込むために 呼び出される. 望む画像を含むgd ファイル形式の ファイルへの既に開かれたポインタを与えて, gdImageCreateFromGdを呼出せ. gd ファイル形式は, gd 専用であって, 高速な 読み込みを意図している. (これは, 圧縮を意図していない. 圧縮の ためにはPNGかJPEGを使用せよ.) gdImageCreateFromGd は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromGd は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("mygd.gd", "rb");
im = gdImageCreateFromGd(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromGd2(FILE *in) (関数)
gdImageCreateFromGd2Ctx(gdIOCtx *in) (関数)

gdImageCreateFromGd2 は, gd2形式のファイルから画像を読み込むために 呼び出される. 望む画像を含むgd2 ファイル形式の ファイルへの既に開かれたポインタを与えて, gdImageCreateFromGd2を呼出せ. gd2 ファイル形式は, gd2 専用であって, 大きい 画像の一部の高速な読み込みを意図している. (これは, 圧縮形式であるが LZW圧縮ほど優れてはいない.) gdImageCreateFromGd2 は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromGd2 は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("mygd.gd2", "rb");
im = gdImageCreateFromGd2(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromGd2Part(FILE *in, int srcX, int srcY, int w, int h) (関数)
gdImageCreateFromGd2PartCtx(gdIOCtx *in) (関数)

gdImageCreateFromGd2Part は, gd2形式のファイルから画像の一部 を読み込むために呼び出される. gdImageCreateFromGd2 と同じように, 望む画像を含むgd2 ファイル形式の ファイルへの既に開かれたポインタを与えて, gdImageCreateFromGd2Partを呼出せ. ただし, この場合には, 原点 (x,y) 及び 幅/高さを示す追加のパラメータ も一緒に渡せ. gd2 ファイル形式は, gd2 専用であって, 大きい 画像の一部の高速な読み込みを意図している. (これは, 圧縮形式であるが LZW圧縮ほど優れてはいない.) gdImageCreateFromGd2Part は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromGd2Part は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.

gdImageCreateFromXbm(FILE *in) (関数)
gdImageCreateFromXbm は, X bitmap形式のファイルから画像を読み込むために 呼び出される. 望む画像を含むファイルへの既に開かれたポインタを与えて, gdImageCreateFromXbmを呼出せ. gdImageCreateFromXbm は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. gdImageCreateFromXbm は, ファイルを閉じない. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("myxbm.xbm", "rb");
im = gdImageCreateFromXbm(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromXpm(char *filename) (関数)
gdImageCreateFromXpm は, XPM X Window System カラービットマップ形式のファイルから画像を読み込むために 呼び出される. この関数は, Makefile において HAVE_XPM が 選択されていて, Xpmライブラリがそのアプリケーションにリンクされていな ければ使用可能ではない. 他の gd ファイル関数と違って Xpm 関数は, ファイルポインタではなくて ファイル名を要求する. gdImageCreateFromXbm は, 新しい画像へのgdImagePtr を返すか, その画像の読み込みに失敗(しばしば, ファイルが壊れていたり, JPEG画像を含んでいないときに起る)したときには NULL を返す. あなたは, 画像の sx と sy メンバを調べてそのサイズを決定することができる. こうして作られた画像も最終的には gdImageDestroy()で破棄されなければならない.
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("myxpm.xpm", "rb");
im = gdImageCreateFromXpm(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageDestroy(gdImagePtr im) (関数)
gdImageDestroy は, 画像に割当てられたメモリを開放するために 使用される. あなたのプログラムを終了する前に, gdImageDestroy を 呼び出すか, 新しい画像をgdImagePtr変数に 割当てすことは重要である.
... inside a function ...
gdImagePtr im;
im = gdImageCreate(10, 10);
/* ... 画像を使用する ... */
/* それを破棄する */
gdImageDestroy(im);
void gdImageJpeg(gdImagePtr im, FILE *out, int quality) (関数)
void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality) (関数)
gdImageJpeg は指定された画像を指定されたファイルにJPEG形式で出力する. そのファイルは書き出しのために開かれていなければならない. MSDOS と Windows のその他のバージョンでは, 単に "w" をファイルを開く 際のモードとして指定するのではなくて, "wb" を使用することが重要である. Unix においては, "w" を使用しても問題はない. gdImageJpeg は ファイルを閉じない. あなたのプログラムはそれをしなければ ならない.

もしqualityが負のときは, デフォルトで IJG JPEG 品質の値が 採用される. (この品質は, ほとんどの状況で適切で一般的な品質とサイズ のトレードオフを与える.) そうでなければ, 実際的な目的のために, quality は 0-95 の範囲にある値であるべきである. 高品質な 値は, 通常高い品質と大きな画像サイズを意味する.

もしあなたがgdImageInterlaceを用いて 画像インターレースを設定したのであれば, この関数は, あなたがプログレッシブJPEGを出力したいのであるという意味に解釈する. いくつかのプログラム(例えば, Web ブラウザなど)は, 増加的に(incrementally) プログレッシブJPEG を表示することができる. これは, 例えば相対的に遅い通信回線を通じてブラウズするときに有用かも知れない. プログレッシブJPEGは, 連続的(非プログレッシブ)JPEGよりも少し小さい.

... inside a function ...
gdImagePtr im;
int black, white;
FILE *out;
/* 画像を生成する */
im = gdImageCreate(100, 100);
/* 背景を設定する */
white = gdImageColorAllocate(im, 255, 255, 255);
/* 描画色を割当てる */
black = gdImageColorAllocate(im, 0, 0, 0);
/* 四角形を描く */
gdImageRectangle(im, 0, 0, 99, 99, black);
/* 出力ファイルをバイナリモードで開く */
out = fopen("rect.jpg", "wb");
/* デフォルト品質で JPEG を出力する */
gdImageJpeg(im, out, -1);
/* ファイルを閉じる */
fclose(out);
/* 画像の破棄 */
gdImageDestroy(im);
void* gdImageJpegPtr(gdImagePtr im, int *size) (関数)
gdImageJpegと同様であるが, これは JPEG データが存在するメモリ領域への ポインタを返す. このメモリは, もはや必要とされなくなったときには, 呼出し元によって開放されなければならない. ライブラリのビルド時とアプリケーションのビルド時の 両方において, malloc, free などに同じ実装が用いられているという 絶対的な確信が無い限りは, 呼出し元は, free() ではなくて, gdFree() を実行しなければならない. 'size'パラメータは, メモリブロックの全サイズを受け取る.
void gdImagePng(gdImagePtr im, FILE *out) (関数)
gdImagePng は指定された画像を指定されたファイルにPNG形式で出力する. そのファイルは書き出しのために開かれていなければならない. MSDOS と Windows のその他のバージョンでは, 単に "w" をファイルを開く 際のモードとして指定するのではなくて, "wb" を使用することが重要である. Unix においては, "w" を使用しても問題はない. gdImagePng は ファイルを閉じない. あなたのプログラムはそれをしなければ ならない.
... inside a function ...
gdImagePtr im;
int black, white;
FILE *out;
/* 画像を生成する */
im = gdImageCreate(100, 100);
/* 背景色を割当てる */
white = gdImageColorAllocate(im, 255, 255, 255);
/* 描画色を割当てる */
black = gdImageColorAllocate(im, 0, 0, 0);
/* 四角形を描く */
gdImageRectangle(im, 0, 0, 99, 99, black);
/* 出力ファイルをバイナリモードで開く */
out = fopen("rect.png", "wb");
/* PNG を書き出す */
gdImagePng(im, out);
/* ファイルを閉じる */
fclose(out);
/* 画像を破棄する */
gdImageDestroy(im);
void* gdImagePngPtr(gdImagePtr im, int *size) (関数)
gdImagePngと同様であるが, これは PNG データが存在するメモリ領域への ポインタを返す. このメモリは, もはや必要とされなくなったときには, 呼出し元によって開放されなければならない. ライブラリのビルド時とアプリケーションのビルド時の 両方において, malloc, free などに同じ実装が用いられているという 絶対的な確信が無い限りは, 呼出し元は, free() ではなくて, gdFree() を実行しなければならない. 'size'パラメータは, メモリブロックの全サイズを受け取る.
gdImagePngToSink(gdImagePtr im, gdSinkPtr out) (関数)
gdImagePngToSink は, PNG をファイルではなくて, データ "sink" (行き先) へと書き出すために呼出される. 使用法は, プログラマが自作のデータシンクを用意しなければならない 点を除けば, gdImagePng 関数と非常によく似ている.

プログラマは, コンテクストポイント, バッファ, 及び, 書き出される バイト数を引数として受け付けるような出力関数を書かなければならない. この関数は, 要求された数のバイト数を書き出して, エラーが起らなければ その数を返す. エラーが起った場合には-1を 返す. プログラマは, 次にgdSink構造体を 生成し, 出力関数へのsinkポインタをプログラムに 有用な任意の値へのコンテクストポインタを設定する.

以下の例は, 自作のデータシンクを生成してgdImagePngToSink を実行することによって, gdImagePng を実装している.

static int stdioSink(void *context, char *buffer, int len)
{
	return fwrite(buffer, 1, len, (FILE *) context);
}

void gdImagePng(gdImagePtr im, FILE *out)
{
	gdSink mySink;
	mySink.context = (void *) out;
	mySink.sink = stdioSink;
	gdImagePngToSink(im, &mySink);
}
void gdImageWBMP(gdImagePtr im, int fg, FILE *out)
gdImageWBMPCtx(gdIOCtx *out) (関数)(関数)
gdImageWBMP は指定された画像を指定されたファイルにWBMP形式で出力する. そのファイルは書き出しのために開かれていなければならない. MSDOS と Windows のその他のバージョンでは, 単に "w" をファイルを開く 際のモードとして指定するのではなくて, "wb" を使用することが重要である. Unix においては, "w" を使用しても問題はない. gdImageWBMP は ファイルを閉じない. あなたのプログラムはそれをしなければ ならない.

WBMP は白色と黒色のみをサポートしている. fg引数によって指定される色インデックスは, "前景(foreground)" であり, この色の画素だけが, WBMPファイルに設定される. 他のすべての画素は, "背景 (background)"とみなされる.

... inside a function ...
gdImagePtr im;
int black, white;
FILE *out;
/* 画像を生成する */
im = gdImageCreate(100, 100);
/* 背景を設定する */
white = gdImageColorAllocate(im, 255, 255, 255);
/* 描画色を設定する */
black = gdImageColorAllocate(im, 0, 0, 0);
/* 四角形を描く */
gdImageRectangle(im, 0, 0, 99, 99, black);
/* 出力ファイルをバイナリモードで開く */
out = fopen("rect.wbmp", "wb");
/* WBMP を黒を前景色として書き出す */
gdImageWBMP(im, black, out);
/* ファイルを閉じる */
fclose(out);
/* 画像を破棄する */
gdImageDestroy(im);
void* gdImageWBMPPtr(gdImagePtr im, int *size) (関数)
gdImageWBMPと同様であるが, これは WBMP データが存在するメモリ領域への ポインタを返す. このメモリは, もはや必要とされなくなったときには, 呼出し元によって開放されなければならない. ライブラリのビルド時とアプリケーションのビルド時の 両方において, malloc, free などに同じ実装が用いられているという 絶対的な確信が無い限りは, 呼出し元は, free() ではなくて, gdFree() を実行しなければならない. 'size'パラメータは, メモリブロックの全サイズを受け取る.
void gdImageGd(gdImagePtr im, FILE *out) (関数)
gdImageGd は指定された画像を指定されたファイルに gd 画像形式で出力する. そのファイルは書き出しのために開かれていなければならない. MSDOS と Windows のその他のバージョンでは, 単に "w" をファイルを開く 際のモードとして指定するのではなくて, "wb" を使用することが重要である. Unix においては, "w" を使用しても問題はない. gdImageGd は ファイルを閉じない. あなたのプログラムはそれをしなければ ならない.

gd 画像形式は, あなたのプログラムが, 頻繁に他の画像を構成するために, 高速な画像の読み込みと書き出しを意図している. これは, 圧縮を形式ではないし, 一般的な用途に用いられる ように作られてはいない.

... inside a function ...
gdImagePtr im;
int black, white;
FILE *out;
/* 画像を生成する */
im = gdImageCreate(100, 100);
/* 背景色を割当てる */
white = gdImageColorAllocate(im, 255, 255, 255);
/* 描画色を割当てる */
black = gdImageColorAllocate(im, 0, 0, 0);
/* 四角形を描く */
gdImageRectangle(im, 0, 0, 99, 99, black);
/* 出力ファイルをバイナリモードで開く */
out = fopen("rect.gd", "wb");
/* gd 形式ファイルを開く */
gdImageGd(im, out);
/* ファイルを閉じる */
fclose(out);
/* 画像の破棄 */
gdImageDestroy(im);
void* gdImageGdPtr(gdImagePtr im, int *size) (関数)
gdImageGdと同様であるが, これは GD データが存在するメモリ領域への ポインタを返す. このメモリは, もはや必要とされなくなったときには, 呼出し元によって開放されなければならない. ライブラリのビルド時とアプリケーションのビルド時の 両方において, malloc, free などに同じ実装が用いられているという 絶対的な確信が無い限りは, 呼出し元は, free() ではなくて, gdFree() を実行しなければならない. 'size'パラメータは, メモリブロックの全サイズを受け取る.
void gdImageGd2(gdImagePtr im, FILE *out, int chunkSize, int fmt) (関数)
gdImageGd2 は指定された画像を指定されたファイルに gd2 画像形式で出力する. そのファイルは書き出しのために開かれていなければならない. MSDOS と Windows のその他のバージョンでは, 単に "w" をファイルを開く 際のモードとして指定するのではなくて, "wb" を使用することが重要である. Unix においては, "w" を使用しても問題はない. gdImageGd2 は ファイルを閉じない. あなたのプログラムはそれをしなければ ならない.

gd2 画像形式は, 高速な画像一部の読み込みと書き出しを意図している. これは, 圧縮形式であり, 大きな画像の小さな部分を切り取ることに 適している. 第3パラメータと第4パラメータは, それぞれ, 'チャンクサイズ' と 形式である.

ファイルは, 圧縮された部分画像の連続として保存されており, チャンクサイズが部分画像のサイズを決定する. この値がゼロとときは, GD ライブラリはデフォルトを使用する.

GD2ファイルを非圧縮形式で保存することも可能である. この場合には, 第4パラメータをGD2_FMT_RAWに設定すれば良い.

... inside a function ...
gdImagePtr im;
int black, white;
FILE *out;
/* 画像を生成する */
im = gdImageCreate(100, 100);
/* 背景色を割当てる */
white = gdImageColorAllocate(im, 255, 255, 255);
/* 描画色を割当てる */
black = gdImageColorAllocate(im, 0, 0, 0);
/* 四角形を描く */
gdImageRectangle(im, 0, 0, 99, 99, black);
/* 出力ファイルをバイナリモードで開く */
out = fopen("rect.gd", "wb");
/* gd2 形式ファイルを書き出す */
gdImageGd2(im, out, 0, GD2_FMT_COMPRESSED);
/* ファイルを閉じる */
fclose(out);
/* 画像を破棄する */
gdImageDestroy(im);
void* gdImageGd2Ptr(gdImagePtr im, int chunkSize, int fmt, int *size) (関数)
gdImageGd2と同様であるが, これは GD2 データが存在するメモリ領域への ポインタを返す. このメモリは, もはや必要とされなくなったときには, 呼出し元によって開放されなければならない. ライブラリのビルド時とアプリケーションのビルド時の 両方において, malloc, free などに同じ実装が用いられているという 絶対的な確信が無い限りは, 呼出し元は, free() ではなくて, gdFree() を実行しなければならない. 'size'パラメータは, メモリブロックの全サイズを受け取る.

描画, スタイル, ブラシ, タイル, 及び, 塗り潰し関数

void gdImageSetPixel(gdImagePtr im, int x, int y, int color) (関数)
gdImageSetPixelは, 1つの画素に指定された色インデックスを 設定する. 画素にアクセスするには, 常にこの関数か他の描画関数を用いよ. gdImage構造体の画素に直接アクセスしてはいけない.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 中央の近くに画素を設定する. */
gdImageSetPixel(im, 50, 50, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color) (関数)
gdImageLine は, 2つの端点 (x1,y1) と (x2, y2) の間に線分を描く. この線分は, 指定された色インデックスを用いて描かれる. この色インデックスは, gdImageColorAllocateによって返される実際の色, かあるいは, gdStyled, gdBrushed 及びgdStyledBrushedのいずれかであっても良い.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 左上から右下に線分を描く. */
gdImageLine(im, 0, 0, 99, 99, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color) (関数)
gdImageDashedLine は, gd 1.0 との単に後ろ向きの整合性 (backwards compatibility)のために提供される. 新しいプログラムは, 破線を通常のgdImageLine関数と新しい gdImageSetStyle関数を使用するべきである.

gdImageDashedLine は, 2つの端点 (x1,y1) と (x2, y2) の間に破線を描く. この破線は, 指定された色インデックスを用いて描かれる. この破線の描かれていない部分は透明であるため背景が見える.

... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImagePolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color) (関数)
gdImagePolygon は, 指定された色インデックスを使用して, (少くとも3つの)頂点から成る多角形を描く. gdImageFilledPolygonも見よ.
... inside a function ...
gdImagePtr im;
int black;
int white;
/* 多角形の頂点 */
gdPoint points[3];
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 三角形を描く. */
points[0].x = 50;
points[0].y = 0;
points[1].x = 99;
points[1].y = 99;
points[2].x = 0;
points[2].y = 99;
gdImagePolygon(im, points, 3, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color) (関数)
gdImageRectangle は, 2つの角 (左上と右下) が指定されたときに, 指定された色インデックスを使用して, 四角形を描く関数である.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 中心領域を占める四角形を描く. */
gdImageRectangle(im, 25, 25, 74, 74, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageFilledPolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color) (関数)
gdImageFilledPolygon は, 指定された色インデックスを使用して, (少くとも3つの)頂点から成る塗りつぶされた多角形を描く. gdImagePolygonも見よ.
... inside a function ...
gdImagePtr im;
int black;
int white;
int red;
/* 多角形の頂点 */
gdPoint points[3];
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* red に赤を割当てる. */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* 三角形を描く. */
points[0].x = 50;
points[0].y = 0;
points[1].x = 99;
points[1].y = 99;
points[2].x = 0;
points[2].y = 99;
/* それを白く塗りつぶす */
gdImageFilledPolygon(im, points, 3, white);
/* 次に赤く縁取りする */
gdImagePolygon(im, points, 3, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color) (関数)
gdImageFilledRectangle は, 2つの角 (左上と右下) が指定されたときに, 指定された色インデックスを使用して, 塗り潰した四角形を描く関数である.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = int gdImageColorAllocate(im, 255, 255, 255);	
/* 中心領域を占める塗り潰された四角形を描く. */
gdImageFilledRectangle(im, 25, 25, 74, 74, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color) (関数)
gdImageArc は, 与たえられた点を中心とする楕円弧を描くために用いられる. その弧は, sによって指定された角度から始まって, e で指定された角度で終る. この弧は, 最後の引数で指定された色で描かれる. 円は, 幅と高さを等しくして, 0度から始まって360度で終ることによって 描くことができる. e は s より大きくなければならない. 360 より大きい値は, 360 で割った余りと して解釈される.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 50);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* white に白色(red, green と blue は全て最大値 maximum)を割当てる. */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 画像の中に楕円を描く. */
gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color) (関数)
gdImageFillToBorder は, 指定されたcolorで画像の一部を 塗り潰す. 指定された点から始まって指定されたborder色で 止まる. 出発点の色によって指定された領域を塗り潰す方法については, gdImageFillを見よ.

境界の色は, gdTiledのような特別な色で あってはならない. それは, 真のソリッドな色でなければならない. しかし, 塗り潰し色は特別な色であっても良い.

gdImageFillToBorder は再帰的であることに注意せよ. それは, 素朴な実装であるけれども, この実装は改良される予定である. しかしながら, スタックが非常に深くなる退化した場合が常に存在する. これは, MSDOS とMS Windows 3.1 環境の問題である. (もちろん, 適切なスタックを使用するUnix や Windows 95/98/NT 環境では, これは 全く問題ではない.)

... inside a function ...
gdImagePtr im;
int black;
int white;
int red;
im = gdImageCreate(100, 50);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* 色 white の割当て (赤, 緑, 青の全ては最大値 255 にセットされる). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 色 red の割当て. */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* 画像の中に楕円を描く. */
gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
/* 楕円を塗り潰す. 塗り潰し色は赤で境界色は白. */
gdImageFillToBorder(im, 50, 25, white, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageFill(gdImagePtr im, int x, int y, int color) (関数)
gdImageFill は, 指定されたcolorで画像の一部を 塗り潰す. 指定された点から始まって出発点と同じ色の領域を塗り潰す. 止まる. 内部の色ではなくて指定された境界色まで領域を塗り潰す方法については, gdImageFillToBorder を見よ.

塗り潰しの色は, gdTiledであってもよい. その結果は別の画像をタイルとして使用するタイルになる. しかし, タイル画像は透過色にしてはいけない. もし 塗り潰したい画像が透過色のときは, タイル画像に対して gdImageTransparent を呼出して, 透過性をオフにするために透過色インデックスを -1に設定せよ.

gdImageFill は再帰的であることに注意せよ. それは, 素朴な実装であるけれども, この実装は改良される予定である. しかしながら, スタックが非常に深くなる退化した場合が常に存在する. これは, MSDOS とMS Windows 3.1 環境の問題である. (もちろん, 適切なスタックを使用するUnix や Windows 95/98/NT 環境では, これは 全く問題ではない.)

... inside a function ...
gdImagePtr im;
int black;
int white;
int red;
im = gdImageCreate(100, 50);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* 色 white の割当て (赤, 緑, 青の全ては最大値 255 にセットされる). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* 色 red の割当て. */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* 画像の中に楕円を描く. */
gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
/* 楕円を塗り潰す. 塗り潰し色は赤で, 
	楕円の内部の黒を置き換える. */
gdImageFill(im, 50, 50, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageSetBrush(gdImagePtr im, gdImagePtr brush) (関数)
"ブラシ"は, 別の画像の中に広い形のある筆致を描くために使用される画像である. まさしく絵筆が単一の点ではないのように, ブラシ画像は単一の画素である必要はない. 任意のgd 画像はブラシとして使用できる. ブラシ画像の透過色インデックスを gdImageColorTransparentによって 設定することによって, 任意の形のブラシが生成される. gdImageLinegdImagePolygonのようなすべての 線引き関数は, それらを呼び出すときに特別な"色" gdBrushed または gdStyledBrushed を使用することによって, 現在のブラシを使用することができる.

gdImageSetBrush は, 特定の画像に用いられるブラシを特定するために 使用される. あなたは, 任意の画像をブラシとして設定できる. もしブラシ画像が最初の画像と同じ色マップを持たないのであれば, 最初の画像に存在しない任意の色が割当てられるであろう. もし十分な色を割当てることができなければ, 既に使用されている 最も近い色が使用されるであろう. これによって, 任意のPNGがブラシ画像として使用できるようになる. しかしながら, これはあなたは実際にブラシを使用しないのであれば, ブラシを設定すべきではないことを意味する. もしあなたが, 異なるブラシ画像を連続して設定すれば, あなたは, すぐに色マップを使い果して結果は最適なものにはならないであろう.

あなたは, ブラシを使用し終ったときには特別な行動をする必要はない. 他の画像と同様に, もしあなたがその後にそのブラシ画像を使用しないので あれば, あなたは, gdImageDestroy を呼び出すべきである. あなたは, 現在のブラシが破棄されたならば 色gdBrushedを使用してはいけない. あなたはもちろんそれに代る新しいブラシを設定することもできる.

... inside a function ...
gdImagePtr im, brush;
FILE *in;
int black;
im = gdImageCreate(100, 100);
/* ブラシPNG を開く. 最高の結果のために, ブラシの一部は
      透過的(つまりブラシの形ではない部分)であるべきであり, 
      透過色インデックスを持っているべきである. */
in = fopen("star.png", "rb");
brush = gdImageCreateFromPng(in);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
gdImageSetBrush(im, brush);
/* 左上隅から右下隅にブラシを使用して線分を描く. */
gdImageLine(im, 0, 0, 99, 99, gdBrushed);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
/* ブラシ画像を破棄する. */
gdImageDestroy(brush);
void gdImageSetTile(gdImagePtr im, gdImagePtr tile) (関数)
"タイル"は, 領域を繰り返されるパターンで塗り潰すために使用される画像である. 任意の gd 画像はタイルとして使用できる. タイル画像の透過色インデックスを gdImageColorTransparentによって 設定することによって, 下にある領域の一部が見えるようにす るためにタイルが生成される. すべてのgdImageFillgdImageFilledPolygonのように 領域塗り潰し関数は, それらを呼び出すときに特別な"色" gdTiledを使用ることによって, 現在の タイルを使用することができる.

gdImageSetTile は, 特定の画像に用いられるタイルを特定するために 使用される. あなたは, 任意の画像をタイルとして設定できる. もしタイル画像が最初の画像と同じ色マップを持たないのであれば, 最初の画像に存在しない任意の色が割当てられるであろう. もし十分な色を割当てることができなければ, 既に使用されている 最も近い色が使用されるであろう. これによって, 任意のPNGがタイル画像として使用できるようになる. しかしながら, これはあなたは実際にタイルを使用しないのであれば, タイルを設定すべきではないことを意味する. もしあなたが, 異なるタイル画像を連続して設定すれば, あなたは, すぐに色マップを使い果して結果は最適なものにはならないであろう.

あなたは, タイルを使用し終ったときには特別な行動をする必要はない. 他の画像と同様に, もしあなたがその後にそのタイル画像を使用しないので あれば, あなたは, gdImageDestroy を呼び出すべきである. あなたは, 現在のタイルが破棄されたならば 色gdTiledを使用してはいけない. あなたはもちろんそれに代る新しいタイルを設定することもできる.

... inside a function ...
gdImagePtr im, tile;
FILE *in;
int black;
im = gdImageCreate(100, 100);
/* タイルPNG を開く. 最高の結果のために, タイルの一部は
      透過的(つまり背景が見えるように)であるべきであり, 
      透過色インデックスを持っているべきである. */
in = fopen("star.png", "rb");
tile = gdImageCreateFromPng(in);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
gdImageSetTile(im, tile);
/* タイルを使用して領域を塗り潰す */
gdImageFilledRectangle(im, 25, 25, 75, 75, gdTiled);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
/* タイル画像を破棄する */
gdImageDestroy(tile);
void gdImageSetStyle(gdImagePtr im, int *style, int styleLength) (関数)
破線や点線や他の種類の線を描く必要がしばしばある. gdImageSetStyle は, 背景をそのままにする特別な色を含む, 1つの線を描くときに繰り返される 好きな色の連続を設定することができる.

gdImageSetStyle を使用するためには, 整数の配列を生成して それに繰り返される色の値を割当てよ. あなたは, 特定の画素に対しては現在の色をそのままにしておく ことを示す特別な色 gdTransparentも割当てることもできる. (allowing a dashed line to be attractively drawn over an existing image).

次に, スタイルを使用して線を描け, 通用のgdImageLine関数に 特別な色gdStyledを与えて呼出せ.

version 1.1.1以降は, スタイル配列は, あなたがスタイルを設定するときに コピーされた. したがって, あなたは全く配列に関心を持つ 必要はない. This should not break existing code that assumes styles are not copied.

あなたは, スタイルとブラシをブラシ画像を組み合せて, 連続的な筆致の代りに区分的なブラシ画像を描くこともできる. ブラシと一緒に使用するスタイルを生成するときには, スタイルの値は異なるように解釈される. ゼロ (0) はブラシが描かれるべきではない画素を示し, 1 は ブラシが描かれるべき画素を示す. スタイル付きのブラシ線を描くためには, あなたは 特別な色の値 gdStyledBrushedを使用しなければならない. この特徴を示す例としては, (ディストリビューションに含まれる) gddemo.c を見よ.

gdImagePtr im;
int styleDotted[2], styleDashed[6];
FILE *in;
int black;
int red;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
red = gdImageColorAllocate(im, 255, 0, 0);	
/* 点線スタイルを設定する. 1画素ごとに元の画素をそのままにする. */
styleDotted[0] = red;
styleDotted[1] = gdTransparent;
/* ダッシュスタイルを設定する. 3つオンで3つオフ. */
styleDashed[0] = red;
styleDashed[1] = red;
styleDashed[2] = red;
styleDashed[3] = gdTransparent;
styleDashed[4] = gdTransparent;
styleDashed[5] = gdTransparent;
/* 点線スタイルを設定する. 我々はそのスタイルの中に
    何個の画素があるかを特定しなければならない! */
gdImageSetStyle(im, styleDotted, 2);
/* 左上隅から右下隅に線を描く */
gdImageLine(im, 0, 0, 99, 99, gdStyled);
/* 今度はダッシュスタイル. */
gdImageSetStyle(im, styleDashed, 6);
gdImageLine(im, 0, 99, 0, 99, gdStyled);

/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);

問合せ関数

int gdImageBlue(gdImagePtr im, int color) (マクロ)
gdImageBlue は, 指定された色インデックスの青成分を返すマクロである. 構造体メンバに直接アクセスするよりもこのマクロを使用せよ.
int gdImageGetPixel(gdImagePtr im, int x, int y) (関数)
gdImageGetPixel() は, 指定された画素の色インデックスを返すマクロである. 画素を調べるためには常にこの関数を使用せよ. gdImage構造体に直接アクセスするな.
... inside a function ...
FILE *in;
gdImagePtr im;
int c;
in = fopen("mypng.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
c = gdImageGetPixel(im, gdImageSX(im) / 2, gdImageSY(im) / 2);
printf("The value of the center pixel is %d; RGB values are %d,%d,%d\n",
	c, im->red[c], im->green[c], im->blue[c]);
gdImageDestroy(im);
int gdImageBoundsSafe(gdImagePtr im, int x, int y) (関数)
gdImageBoundsSafe は, もし与えられた座標が画像の範囲にあるのであれば true (1) を返し, そうでなければ false (0) を返す. この関数は, 主に gd に関数を追加 したい人が使用するために提供されている. すべての gd描画関数は, 既に 画像の端に安全にclip する.
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
if (gdImageBoundsSafe(im, 50, 50)) {
	printf("50, 50 is within the image bounds\n");
} else {
	printf("50, 50 is outside the image bounds\n");
}
gdImageDestroy(im);
int gdImageGreen(gdImagePtr im, int color) (マクロ)
gdImageGreen は, 指定された色インデックスの緑成分を返すマクロである. 構造体メンバに直接アクセスするよりもこのマクロを使用せよ.
int gdImageRed(gdImagePtr im, int color) (マクロ)
gdImageRed は, 指定された色インデックスの赤成分を返すマクロである. 構造体メンバに直接アクセスするよりもこのマクロを使用せよ.
int gdImageSX(gdImagePtr im) (マクロ)
gdImageSX は, 指定された画像の幅を返すマクロである. 構造体メンバに直接アクセスするよりもこのマクロを使用せよ.
int gdImageSY(gdImagePtr im) (マクロ)
gdImageSY は, 指定された画像の高さを返すマクロである. 構造体メンバに直接アクセスするよりもこのマクロを使用せよ.

フォントとテキストを扱う関数

void gdImageChar(gdImagePtr im, gdFontPtr font, int x, int y, int c, int color) (関数)
gdImageChar は, 画像上に一文字を描くために使用される. (複数の文字を描くためには、 gdImageString もしくは gdImageString16を使用せよ. 高品質なソリューションのためには, gdImageStringFTを見よ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定される文字は, 指定された色で左から右へと描かれる. (垂直なテキストを描く方法はgdImageCharUp を見よ.) 特定の文字を設定されない画素は以前の色を保持する.
#include "gd.h"
#include "gdfontl.h"
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* Background color (first allocated) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* Draw a character. */
gdImageChar(im, gdFontLarge, 0, 0, 'Q', white);
/* ... Do something with the image, such as saving it to a file... */
/* Destroy it */
gdImageDestroy(im);
void gdImageCharUp(gdImagePtr im, gdFontPtr font, int x, int y, int c, int color) (関数)
gdImageCharUpは, 単一の文字を画像上に90度回転して描くために 使用される. (複数の文字を描くためには, gdImageStringUp もしくは gdImageStringUp16を使用せよ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定される文字は, 指定された色で下から上へと描かれる. (水平なテキストを描く方法については, gdImageChar を見よ.) 特定の文字を設定されない画素は以前の色を保持する.
#include "gd.h"
#include "gdfontl.h"
... inside a function ...
gdImagePtr im;
int black;
int white;
im = gdImageCreate(100, 100);
/* Background color (first allocated) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* Draw a character upwards so it rests against the top of the image. */
gdImageCharUp(im, gdFontLarge,
	0, gdFontLarge->h, 'Q', white);
/* ... Do something with the image, such as saving it to a file... */
/* Destroy it */
gdImageDestroy(im);
void gdImageString(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color) (関数)
gdImageString は画像上に複数の文字を描くために使用される. (単一の文字を描くためには, gdImageCharを使用せよ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定されるNULL文字によって終るC言語の文字列は, 指定された色で左から右へと描かれる. (垂直なテキストを描く方法については, gdImageStringUpを見よ. 高品質なソリューションについては, gdImageStringFTも見よ.) 特定の文字を設定されない画素は以前の色を保持する.
#include "gd.h"
#include "gdfontl.h"
#include <string.h>
... inside a function ...
gdImagePtr im;
int black;
int white;
/* String to draw. */
char *s = "Hello.";
im = gdImageCreate(100, 100);
/* Background color (first allocated) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* Draw a centered string. */
gdImageString(im, gdFontLarge,
	im->w / 2 - (strlen(s) * gdFontLarge->w / 2),
	im->h / 2 - gdFontLarge->h / 2,
	s, white);
/* ... Do something with the image, such as saving it to a file... */
/* Destroy it */
gdImageDestroy(im);
void gdImageString16(gdImagePtr im, gdFontPtr font, int x, int y, unsigned short *s, int color) (関数)
gdImageString16は, 画像上に複数の16ビット文字を描くために使用される. (単一の文字を描くためには, gdImageCharを使用せよ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定されるNULL文字によって終るC言語の文字列は, 指定された色で左から右へと描かれる. (垂直なテキストを描く方法については, gdImageStringUp16 を見よ.) 特定の文字を設定されない画素は以前の色を保持する.

この関数は gd 1.3 で, 256文字より多くの文字を持つフォント をレンダーするための手段を提供するために追加された. より頻繁に使用される関数は gdImageStringである.

void gdImageStringUp(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color) (関数)
gdImageStringUp は画像上に, 90度回転した複数の文字を描くために使用される. (単一の文字を描くためには, gdImageCharUpを使用せよ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定されるNULL文字によって終るC言語の文字列は, 指定された色で下から上へと(90度回転して)描かれる. (水平なテキストを描く方法については, gdImageStringを見よ.) 特定の文字を設定されない画素は以前の色を保持する.
#include "gd.h"
#include "gdfontl.h"
#include <string.h>
... inside a function ...
gdImagePtr im;
int black;
int white;
/* String to draw. */
char *s = "Hello.";
im = gdImageCreate(100, 100);
/* Background color (first allocated) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* Allocate the color white (red, green and blue all maximum). */
white = gdImageColorAllocate(im, 255, 255, 255);	
/* Draw a centered string going upwards. Axes are reversed,
	and Y axis is decreasing as the string is drawn. */
gdImageStringUp(im, gdFontLarge,
	im->w / 2 - gdFontLarge->h / 2,
	im->h / 2 + (strlen(s) * gdFontLarge->w / 2),
	s, white);
/* ... Do something with the image, such as saving it to a file... */
/* Destroy it */
gdImageDestroy(im);
void gdImageStringUp16(gdImagePtr im, gdFontPtr font, int x, int y, unsigned short *s, int color) (関数)
は, gdImageStringUp16 は, 画像上に複数の16ビット文字を垂直に 描くために使用される. (単一の文字を描くためには, gdImageCharを使用せよ.) 第2引数はフォント定義構造体へのポインタである. 5つのフォント: gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, 及び gdFontGiant が gd によって提供されている. これらのフォントを使用するためにあなたは, それぞれ, "gdfontt.h", "gdfonts.h", "gdfontmb.h", "gdfontl.h" 及び "gdfontg.h" をインクルードしなければならない. さらに, (もしあなたがライブラリを基本とするアプローチを取ら ないのであれば,) これらの提供されるフォントを使用するために, 対応する .c ファイルとリンクしなければならない. 第5引数によって特定されるNULL文字によって終るC言語の 16ビット符号無しshort整数の列によって表現された文字列は, 指定された色で下から上へと描かれる. (水平なテキストを描く方法については, gdImageString16 を見よ.) 特定の文字を設定されない画素は以前の色を保持する.

この関数は gd 1.3 で, 256文字より多くの文字を持つフォント をレンダーするための手段を提供するために追加された. より頻繁に使用される関数は gdImageStringである.

char *gdImageStringFT(gdImagePtr im, int *brect, int fg, char *fontname, double ptsize, double angle, int x, int y, char *string) (関数)
推奨される. 1.8.4において新たに追加された. FreeType 2.x ライブラリを使用してテキストを描く.

gdImageStringFT は, ユーザーによって供給されるTrueTypeフォントを レンダーするためのFreeTypeライブラリ を使用してアンチエイリアストな文字列を画像上に描く. 我々はTrueTypeフォント (.ttf と .ttc ファイル) を提供しない. これらを取得することは完全にあなたに任されている. 文字列がアンチエイリアストであるとは、 可視的じゃギザギザがより少ないことを意味する。 fontname は TrueType フォントファイルへの完全なパス, あるいは, GDFONTPATH 環境変数が設定されているか FreeTypeのDEFAULT_FONTPATH変数が intelligently に設定されて いるのであれば, フォントフェイス名, である. 文字列は任意に拡大/縮小され(ptsize), 回転することができる (ラジアンで指定された angle).

ユーザが供給するbrect[8]配列は, gdImageStringFT のリターン によって, バウンディング正方領域の4隅を表現する 8つの要素 で値が与えられる.
0 左下隅, X 位置
1 左下隅, Y 位置
2 右下隅, X 位置
3 右下隅, Y 位置
4 右上隅, X 位置
5 右上隅, Y 位置
6 左上隅, X 位置
7 左上隅, Y 位置

これらの点は, 角度に関係なくテキストに相対的である. したがって, "左上" は, テキストを水平に見たときの左上隅を意味する.

レンダーすることなくバウンディング正方領域を得るために, NULL gdImagePtr を使用せよ. これは, 同じ文字列のレンダーが後に続くときには, 比較的安価な操作である. バウンディング正方 領域の計算時に部分的なレンダリングをキャッシュしているためである.

文字列は, gf色インデックスによって示された色でレンダーされる. アンチエイリアシングを無効にしたいときには, 欲っする色インデックスにマイナスを付けたものを使用せよ.

文字列は"&#192;"のようなUTF-8文字列を含むことができる.

gdImageStringFT は成功すると NULL char* を返し, 失敗すると エラー文字列を返す.

#include "gd.h"
#include <string.h>
... inside a function ...
gdImagePtr im;
int black;
int white;
int brect[8];
int x, y;
char *err;

char *s = "Hello."; /* 描く文字列. */
double sz = 40.;
char *f = "/usr/local/share/ttf/Times.ttf";  /* ユーザ供給のフォント */

/* 画像のサイズを与えるために brect を得る */
err = gdImageStringFT(NULL,&brect[0],0,f,sz,0.,0,0,s);
if (err) {fprintf(stderr,err); return 1;}

/* 文字列+ 小さい空白のために十分に大きい画像を生成する */
x = brect[2]-brect[6] + 6;
y = brect[3]-brect[7] + 6;
im = gdImageCreate(x,y);

/* Background color (first allocated) */
white = gdImageColorResolve(im, 255, 255, 255);
black = gdImageColorResolve(im, 0, 0, 0);

/* render the string, offset origin to center string*/
/* note that we use top-left coordinate for adjustment
 * since gd origin is in top-left with y increasing downwards. */
x = 3 - brect[6];
y = 3 - brect[7];
err = gdImageStringFT(im,&brect[0],black,f,sz,0.0,x,y,s);
if (err) {fprintf(stderr,err); return 1;}

/* Write img to stdout */
gdImagePng(im, stdout);

/* Destroy it */
gdImageDestroy(im);
char *gdImageStringTTF(gdImagePtr im, int *brect, int fg, char *fontname, double ptsize, double angle, int x, int y, char *string) (関数)
推奨されない. gdImageStringTTF は, FreeType 1.x ライブラリ を用いてテキストを描く. よりよい結果のためには, gdImageStringFT と FreeType 2.x を使用せよ.

gdImageStringTTF は, ユーザーによって供給されるTrueTypeフォントを レンダーするためのFreeTypeライブラリ を使用してアンチエイリアストな文字列を画像上に描く. 我々はTrueTypeフォント (.ttf と .ttc ファイル) を提供しない. これらを取得することは完全にあなたに任されている. 文字列がアンチエイリアストであるとは、 可視的じゃギザギザがより少ないことを意味する。 fontname は TrueType フォントファイルへの完全なパス, あるいは, GDFONTPATH 環境変数が設定されているか FreeTypeのDEFAULT_FONTPATH変数が intelligently に設定されて いるのであれば, フォントフェイス名, である. 文字列は任意に拡大/縮小され(ptsize), 回転することができる (ラジアンで指定された angle).

ユーザが供給するbrect[8]配列は, gdImageStringTTF のリターン によって, バウンディング正方領域の4隅を表現する 8つの要素 で値が与えられる.
0 左下隅, X 位置
1 左下隅, Y 位置
2 右下隅, X 位置
3 右下隅, Y 位置
4 右上隅, X 位置
5 右上隅, Y 位置
6 左上隅, X 位置
7 左上隅, Y 位置

これらの点は, 角度に関係なくテキストに相対的である. したがって, "左上" は, テキストを水平に見たときの左上隅を意味する.

レンダーすることなくバウンディング正方領域を得るために, NULL gdImagePtr を使用せよ. これは, 同じ文字列のレンダーが後に続くときには, 比較的安価な操作である. バウンディング正方 領域の計算時に部分的なレンダリングをキャッシュしているためである.

文字列は, gf色インデックスによって示された色でレンダーされる. アンチエイリアシングを無効にしたいときには, 欲っする色インデックスにマイナスを付けたものを使用せよ.

文字列は"&#192;"のようなUTF-8文字列を含むことができる.

gdImageStringTTF は成功すると NULL char* を返し, 失敗すると エラー文字列を返す.

#include "gd.h"
#include <string.h>
... inside a function ...
gdImagePtr im;
int black;
int white;
int brect[8];
int x, y;
char *err;

char *s = "Hello."; /* String to draw. */
double sz = 40.;
char *f = "/usr/local/share/ttf/Times.ttf";  /* User supplied font */

/* obtain brect so that we can size the image */
err = gdImageStringTTF(NULL,&brect[0],0,f,sz,0.,0,0,s);
if (err) {fprintf(stderr,err); return 1;}

/* create an image big enough for the string plus a little whitespace */
x = brect[2]-brect[6] + 6;
y = brect[3]-brect[7] + 6;
im = gdImageCreate(x,y);

/* Background color (first allocated) */
white = gdImageColorResolve(im, 255, 255, 255);
black = gdImageColorResolve(im, 0, 0, 0);

/* render the string, offset origin to center string*/
/* note that we use top-left coordinate for adjustment
 * since gd origin is in top-left with y increasing downwards. */
x = 3 - brect[6];
y = 3 - brect[7];
err = gdImageStringTTF(im,&brect[0],black,f,sz,0.0,x,y,s);
if (err) {fprintf(stderr,err); return 1;}

/* Write img to stdout */
gdImagePng(im, stdout);

/* Destroy it */
gdImageDestroy(im);

色を扱う関数

int gdImageColorAllocate(gdImagePtr im, int r, int g, int b) (関数)
gdImageColorAllocate は, 指定された画像で利用可能な最初の色インデックス を見つけて, 要求されたRBG値(それぞれ最大値は 255)を設定し, 新しい色テーブルエントリのインデックスを返す. 新しい画像を生成してから 最初にこの関数を呼び出すと, その画像の背景色が設定される.

gdMaxColors (256) 個の色が割当てられると, gdImageColorAllocate は失敗を示す -1 を返す. (これは, 既に256色が使用されている PNGファイルで作業しているときには 起こり得る.) gdImageColorAllocate は, あなたの要求にマッチする色が既に存在している かどうかはチェックしないことに注意せよ. 新しい色が使用可能でない状況で, 要求されている色を近似する 存在している色を割当てる方法については, gdImageColorExact, gdImageColorClosest 及び gdImageColorClosestHWB を見よ. gd-1.6.2 において新たに追加された gdImageColorResolveも見よ.

... inside a function ...
gdImagePtr im;
int black;
int red;
im = gdImageCreate(100, 100);
/* 背景色 (最初に割当てられる色) */
black = gdImageColorAllocate(im, 0, 0, 0);	
/* red に赤を割当てる. */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
int gdImageColorClosest(gdImagePtr im, int r, int g, int b) (関数)
gdImageColorClosest は, 指定された画像に対してこれまでに定義された 色を検索して, 要求された色にRGB値が最も近い色を返す. (近さは, 3次元色空間における2つの色の間の距離として与えられる ユークリッド距離によって決定される. )

もし, その画像にひとつも色が割当てられていない状態であれば gdImageColorClosest は -1を返す.

この関数は, 画像が既に gdMaxColors (256) 色を含んでいて これ以上の色を割当てることができないときに, 次善の策として描画色を選ぶときに最も便利である. 正確にマッチする色だけを割当てる方法については, gdImageColorExactを見よ.

... inside a function ...
gdImagePtr im;
FILE *in;
int red;
/* photo.png はスキャンされた写真で多くの色を使っているとしよう. 
	 */
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* 赤を直接割当てようと試みる */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* もし赤を割当てることに失敗したならば, ... */
if (red == (-1)) {
	/* 最も赤に近い代りの色. */
	red = gdImageColorClosest(im, 255, 0, 0);
}
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b) (関数)
gdImageColorClosestHWB は, 指定された画像に対してこれまでに定義された 色を検索して, 要求された色に hue, whiteness及びblackness が最も近い色を返す. このスキームは典型的にgdImageColorClosest で使用されるユークリッド距離よりも優れている.

もし, その画像にひとつも色が割当てられていない状態であれば gdImageColorClosestHWB は -1を返す.

この関数は, 画像が既に gdMaxColors (256) 色を含んでいて これ以上の色を割当てることができないときに, 次善の策として描画色を選ぶときに最も便利である. 正確にマッチする色だけを割当てる方法については, gdImageColorExactを見よ.

... inside a function ...
gdImagePtr im;
FILE *in;
int red;
/* photo.png はスキャンされた写真で多くの色を使っているとしよう. 
	 */
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* 赤を直接割当てようと試みる */
red = gdImageColorAllocate(im, 255, 0, 0);	
/* もし赤を割当てることに失敗したならば, ... */
if (red == (-1)) {
	/* Find the closest color instead. */
	red = gdImageColorClosestHWB(im, 255, 0, 0);
}
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
int gdImageColorExact(gdImagePtr im, int r, int g, int b) (関数)
gdImageColorExact は, 指定された画像に対してこれまでに定義された 色を検索して, 要求された色とRGB値完全に一致する最初の色のインデックス を返す. もし, 要求された色に完全に一致する割当てられた色が存在したい ときはgdImageColorExact は -1を返す. 要求された色に最も近い色を探す方法については, gdImageColorClosestを見よ.
... inside a function ...
gdImagePtr im;
int red;
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* この画像は既に赤を含んでいるかも知れない. もしそうであれば, 
その色インデックスを使用することで, 色テーブルのスロットを節約
できるかもしれない. */
/* 赤が存在するかどうか調べる */
red = gdImageColorExact(im, 255, 0, 0);
/* もし赤が存在しないならば, ... */
if (red == (-1)) {
	/* 次善の策: 赤を直接割当てる. */
	red = gdImageColorAllocate(im, 255, 0, 0);	
	/* もし色を使い果たしているのであれば赤に最も近い色を代りに使用する. */
	red = gdImageColorClosest(im, 255, 0, 0);
}
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
int gdImageColorResolve(gdImagePtr im, int r, int g, int b) (関数)
gdImageColorResolve は, 指定された画像に対してこれまでに定義された 色を検索して, 要求された色にRGB値で完全に一致する最初の色のインデックス を返す. もし要求された色に完全に一致する色が見付からないときは gdImageColorResolveは要求されたな色を新たに割当てようと試みる. もし 色テーブルにこれ以上の色を追加する余地がないときは, gdImageColorResolve は, (gdImageColorClosestがそうするように) 要求された色に最も近い既に 割当てられている色を返す. この関数は常に色インデックスを返す.
... inside a function ...
gdImagePtr im;
int red;
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* この画像は既に赤を含んでいるかも知れない. もしそうであれば, 
その色インデックスを使用することで, 色テーブルのスロットを節約
できるかもしれない. */
/*  redのインデックス, かあるいは, red に最も近い色インデックスを得る */
red = gdImageColorResolve(im, 255, 0, 0);
/* 左上から右下に破線を描く. */
gdImageDashedLine(im, 0, 0, 99, 99, red);
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
int gdImageColorsTotal(gdImagePtr im) (マクロ)
gdImageColorsTotal は, 指定された画像に現在割当てられている 色の数を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな.
int gdImageColorRed(gdImagePtr im, int c) (マクロ)
gdImageColorRed は, 指定された画像の赤の量(portion)を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな.
int gdImageColorGreen(gdImagePtr im, int c) (マクロ)
gdImageColorGreen は, 指定された画像の緑の量(portion)を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな.
int gdImageColorBlue(gdImagePtr im, int c) (マクロ)
gdImageColorBlue は, 指定された画像の青の量(portion)を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな.
int gdImageGetInterlaced(gdImagePtr im) (マクロ)
gdImageGetInterlaced は, 指定された画像がインターレースされて いるときには true (1) を返し, そうでないときは false (0) を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな. 画像をインターレースすることの意味については, gdImageInterlace を見よ.
int gdImageGetTransparent(gdImagePtr im) (マクロ)
gdImageGetTransparent は, 指定された画像の 現在のtransparentな色インデックスを返す. もしtransparentな色が存在しないのであれば, gdImageGetTransparent は -1 を返す. この情報を得るためには, この関数を使用せよ. 構造体に直接アクセスするな.
void gdImageColorDeallocate(gdImagePtr im, int color) (関数)
gdImageColorDeallocate は, 特定の色が再利用可能である というマークを付ける. この関数は, 指定された 色インデックスが指定された画像において使用中であるかどうか を決定することはしない. この関数を呼出した後に, 同じ画像に対する gdImageColorAllocate の呼出しは, その色インデックスに対するRGB値を設定する. その結果, その色インデックスを持っていたすべてのピクセル の色を変更することになる. もし連続して gdImageColorDeallocate への複数回の呼出しが行われると, これらの呼出しによって再利用可能というマークが付けられた色 インデックスのうちで最小ものが, 次の gdImageColorAllocate呼出しに おいて再利用される.
... inside a function ...
gdImagePtr im;
int red, blue;
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* 色テーブルの中に赤が存在するかどうか調べる */
red = gdImageColorExact(im, 255, 0, 0);
/* もし赤があれば... */
if (red != (-1)) {
	/* それを再利用する. */
	gdImageColorDeallocate(im, red);
	/* 青を割当てる. 色テーブルのスロットを再利用することで, 
		存在している赤い画素は色の色が変わる. */
	blue = gdImageColorAllocate(im, 0, 0, 255);
}
/* ... ファイルに保存したり画像に対して何かする. */
/* それを破棄する */
gdImageDestroy(im);
void gdImageColorTransparent(gdImagePtr im, int color) (関数)
gdImageColorTransparent は, 透過色を指定された 画像に対して設定する. 透過色が存在しない ことを示すには, 色インデックスとして -1 を与えて gdImageColorTransparent を実行する. JPEG画像は 透過性をサポートしないので, この設定はJPEG画像を 書き出すときに何の効果も持たないことに注意せよ.

使用される色インデックスは, gdImageColorAllocate によって割当てられた色でなければならない. この割当ては, あなたのプログラムによって明示的に実行されるかも知れないし, 画像ファイルの読み込みによって暗に行われるかも知れない. 透過色背景を扱う能力を持たないユーザがあなたの画像 を見たときに(あるいは, あなたが, 透過性をサポートしないJPEG形式ファイルを書き出すときに), まともな見栄えがすることを補償するために, まともな RGB値を あなたが透過色として使用する目的で割当てる色に与えることを忘れないように. PNG 透過性をサポートするシステム上では透明であるけれども.

... inside a function ...
gdImagePtr im;
int black;
FILE *in, *out;
in = fopen("photo.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* 色テーブルの中に黒が存在するかどうか調べて, それを透過色に指定する */
black = gdImageColorExact(im, 0, 0, 0);
/* もし黒があれば, ... */
if (black != (-1)) {
	/* それを透過色にする. */
	gdImageColorTransparent(im, black);
}
/* 新に透明にされた画像をファイルに保存する */
out = fopen("photo.png", "wb");
gdImagePng(im, out);
fclose(out);
/* それを破棄する */
gdImageDestroy(im);

コピーとリサイズ関数

void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h) (関数)
gdImageCopy は, ある画像の一部の正方領域を別の画像にコピーするために使用される. (処理中の画像の拡大と縮小の方法については, gdImageCopyResizedを見よ.)

dst引数は, 指定された範囲がコピーされる行き先の画像で ある. src 引数は, そこから領域がコピーされる元の画像である. dstXdstY 引数は, 領域が コピーされる行き先の画像の点を指定する. srcXsrcY 引数は コピー元画像の左上隅を指定する. wh 引数はその領域の幅と高さを指定する.

あなたが, ある画像の1つの位置から同じ画像の別位置にコピーを行うと, gdImageCopy は, これらの領域が重ならない限り, 期待されたような動作する をする. 領域が重なった場合は結果は予想できない.

画像間でのコピーについての重要な注意: 異なる画像は必ずしも同じ色テーブルを持っているわけではないので, コピー先の画素は単にコピー元と同じ色インデックスに設定されるわけではない. gdImageCopy は, コピーされる領域の各画素に対して, gdImageColorExactを実行することによって, コピー先の画像の中で同一のRGB値を探そうとする. もしそのような色が存在しないならば, gdImageCopy は, gdImageColorAllocateを使用することによって, 必要とされる色を割当てようとする. もし両方の方法が失敗するならば, gdImageCopy はgdImageColorClosest を実行して, コピーされる画素の色に最も近い色をコピー先画像の中から見付ける.

... Inside a function ...
gdImagePtr im_in;
gdImagePtr im_out;
int x, y;
FILE *in;
FILE *out;
/* Load a small png to tile the larger one with */
in = fopen("small.png", "rb");
im_in = gdImageCreateFromPng(in);
fclose(in);
/* Make the output image four times as large on both axes */
im_out = gdImageCreate(im_in->sx * 4, im_in->sy * 4);
/* Now tile the larger image using the smaller one */
for (y = 0; (y < 4); y++) {
	for (x = 0; (x < 4); x++) {
		gdImageCopy(im_out, im_in,
			x * im_in->sx, y * im_in->sy,
			0, 0,
			im_in->sx, im_in->sy);
	}
}
out = fopen("tiled.png", "wb");
gdImagePng(im_out, out);
fclose(out);
gdImageDestroy(im_in);
gdImageDestroy(im_out);
void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int destW, int destH, int srcW, int srcH) (関数)
gdImageCopyResized は, ある画像の一部の正方領域を別の画像へとコピーする ために使用される. X と Y はコピー元領域のサイズであり, コピー先の サイズはこれとは異なっても良い. その結果, その領域が適切に拡大あるいは 縮小される. (リサイズを行わないこの関数の簡単なバージョンについては, gdImageCopyを見よ.)

dst引数は, その領域がコピーされる先の画像である. src 引数は, 領域がコピーされる元の画像である. dstXdstY引数は, 領域がコピーされるコピー先画像の点を指定する. srcXsrcY引数は, コピー元画像の領域の 左上隅を指定する dstWdstHは, コピー先領域の幅と高さを 指定する. srcWsrcHはコピー元領域の幅と高さを 指定し, コピー先領域のサイズと異なっても良い. したがって, このコピーによって領域の拡大/縮小が可能になる.

同じ画像の中のある位置から別の位置に領域をコピーするとき, dImageCopy は, 2つの領域が重ならない限りは期待するような動作をする. 重なるときは, その結果は予想できない. もしこれが問題ならば, 途中結果を保存するためのスクラッチ画像を 生成せよ.

... Inside a function ...
gdImagePtr im_in;
gdImagePtr im_out;
int x, y;
FILE *in;
FILE *out;
/* Load a small png to expand in the larger one */
in = fopen("small.png", "rb");
im_in = gdImageCreateFromPng(in);
fclose(in);
/* Make the output image four times as large on both axes */
im_out = gdImageCreate(im_in->sx * 4, im_in->sy * 4);
/* Now copy the smaller image, but four times larger */
gdImageCopyResized(im_out, im_in, 0, 0, 0, 0,
	im_out->sx, im_out->sy,
	im_in->sx, im_in->sy);	
out = fopen("large.png", "wb");
gdImagePng(im_out, out);
fclose(out);
gdImageDestroy(im_in);
gdImageDestroy(im_out);
void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) (関数)
gdImageCopyMerge は, この関数が最後のパラメータで特定される量によって, 2つの画像を"マージ"するという点を除けば, gdImageCopyとほとんど同じである. もし最後のパラメータが100であれば, この関数は gdImageCopy と同一の動作をする - コピー先の画素はコピー元の画像で置き換えられる.

しかしもし, pctパラメータが100より小さいならば, 2つの画像はマージされる. pct = 0 のときには何も実行されない.

This feature is most useful to 'highlight' sections of an image by merging a solid color with pct = 50:

... Inside a function ...
gdImageCopyMerge(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) (関数)
gdImageCopyMergeGrayは, マージするときにコピー操作が行われる前にコピー先の画素を グレースケールに変換することによって, コピー元の hue 値を保存するというとを除けば, gdImageCopyMergeとほとんど同じである.
... Inside a function ...
gdImageCopyMergeGray(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src) (関数)
1つの画像から別の画像へパレットをコピーする. その際に コピー元の色にコピー先の色をマッチさせるように試みる.

その他の関数

int gdImageCompare(gdImagePtr im1, gdImagePtr im2) (関数)
gdImageCompare は2つの画像が異なるときに, それを示すビットマップを返す. ビットマップのメンバは gd.h において定義されているが, GD_CMP_IMAGE が最も重要である. これは, これらの画像が表示されたときに異なって見えることを示している. 透過色に関する任意の違いは, 透過色な使用されなくても, 画像を異なるように表示させると仮定される.
... Inside a function ...
cmpMask = gdImageCompare(im1, im2);
gdImageInterlace(gdImagePtr im, int interlace) (関数)
gdImageInterlace は, 画像が, 線形に保存されるかインターレースで 保存されるかを決定するために使用される. 線形では, 線は最初から最後までディスプレイに現れる. その一方で, インターレースでは, 画像はいくつかのパス上でフェードインする. デフォルトでは, 画像はインターレースされない. (JPEG画像を書き出すときにインターレースはプログレッシブJPEGを生成する. これは, 品質が徐々に増加するスキャンの連続で表現される.) インターレースされないgd画像は 通常の[連続的な]JPEGデータストリームを 吐き出す.)

インターレース引数に対する非ゼロ値は, インターレースをオンにする. ゼロ値はそれをオフにする. インターレースは他の関数に何の効果も持たず, PNGやJPEG 形式で画像を保存しない限りは何の意味も持たないことに注意せよ. gd と xbm形式はインターレースをサポートしない.

PNG が gdImageCreateFromPng で読み込まれるか JPEG が gdImageCreateFromJpegで読み込まれる とき, インターレースはPNGファイルかJPEGファイルの設定にしたがって 設定される.

多くのPNGとJPEGビューワとwebブラウザは, インターレースを JPEGのインクリメンタルな表示をサポートしない. しかし, インターレース PNG やプログレッシブJPEG は は, 表示されるべきである. それは単に他の画像と同様に一度に表示される.

gdImagePtr im;
FILE *out;
/* ... Create or load the image... */

/* Now turn on interlace */
gdImageInterlace(im, 1);
/* And open an output file */
out = fopen("test.png", "wb");
/* And save the image  -- could also use gdImageJpeg */
gdImagePng(im, out);
fclose(out);
gdImageDestroy(im);
gdFree(void *ptr) (関数)
gdFree は, メモリブロックを返す gdImagePngPtrのような関数によって 割当てられたメモリを開放するための信頼性のある方法を提供する. 最終的に呼び出されるfree()のバージョンが, ブロックを最初に割当てたmalloc()のバージョンと 整合的であることを保証するために, この関数を使用せよ.

定数

gdBrushed (定数)
gdImageLinegdImageRectangle のような線引き関数を実行するときに, 色として使用することができる. gdBrushedが色として用いられるとき, gdImageSetBrush で設定される ブラシ画像はその線の各画素を描く. (ブラシは通常は1画素より大き いので, 広い絵筆のような効果を出せる.) 1つの画像の異なるコピーの連続からなる 破線を描く方法については, gdStyledBrushedも見よ.
gdMaxColors(定数)
定数 256. これは, PNGの標準に従った PNGファイルの中の最大の色数であり, gd 画像の中の最大の色数である.
gdStyled (定数)
gdImageLinegdImageRectangle を実行する ときに, 色として使用される. gdStyledが色として用いられるときは, gdImageSetStyleによって設定された スタイルから連続して画素の色が描かれる. もし画素の色が gdTransparent に等しいならば, その画素の色は変更されない. (このメカニズムはその画像自身の"透過色"とは全く関係がない. そのメカニズムについては, gdImageColorTransparent を見よ.) gdStyledBrushedも見よ.
gdStyledBrushed (定数)
gdImageLinegdImageRectangle のような線引き関数を実行するときに, 色として使用することができる. gdStyleBrushedが色として用いられるとき, gdImageSetStyle (あるいは, gdTransparent. これはゼロと等しくはないが整合性のためにサポートされている) で設定されたスタイルが非ゼロの値を含んでいるならば, gdImageSetBrush で設定される ブラシ画像によって線の各画素が描かれる. (その線が描かれるときに, スタイルから画素が連続して取り出されて, スタイルを使い果したときには最初に戻る.) これは, gdStyledの動きとは異なることに注意せよ. このときは, gdTransparent を除いてはスタイルの中の値が実際の画素として 使用される.
gdDashSize (定数)
ダッシュ線におけるダッシュの長さ. gdImageDashedLine を使用するプログラムとの後ろ向きの整合性のために 4に設定される. 新しいプログラムは, 特別な色 gdStyledgdStyledBrushedを用いて, gdImageSetStyle を使用して標準の gdImageLine 関数を呼び出すべきである.
gdTiled (定数)
gdImageFilledRectangle, gdImageFilledPolygon, gdImageFill, や gdImageFillToBorderにおける通常の色の代りに使用される. gdTiled は, 塗り潰される領域がタイル画像のコピーの繰り返し によって敷き詰められるように, gdImageSetTileで設定された タイル画像から画素を選ぶ. これらの関数に関する特別な制限については, gdImageFillgdImageFillToBorderにおける 議論を見よ.
gdTransparent (定数)
gdImageSetStyleで設定される 通常の色の代りに使用される. gdTransparent は, 画像の透過的な色では ない. その機能については, gdImageColorTransparentを見よ.

追加的な .gd 画像ファイル形式について

PNG と JPEG 形式を読み書きして Xビットマップ形式を読むことに付け加えて, gd はそれ自身の ".gd"形式を読み書きできる能力を持ちます. この形式は, 一般的な目的のために使用されることを意図していないし, 画像を配布するための目的で使用されるべきではない. その目的は, しばしば出力のために別の画像を構成するために 単にあなたのプログラムへの画像の非常に高速な読み込みを可能にするためである. もしあなたが, 巨大な固定されたPNG画像を読み込むときにパフォーマンスの問題 を経験しているのであれば, あなたは gdImageCreateFromGdgdImageGd関数を試してみたいと思うかも知れない. これらの関数は .gd 形式のファイルを読み書きできる.

プログラム"pngtogd.c"は, .png ファイルを .gd 形式に変換する簡単な方法 として提供されている. 私は, あなたがあなたのプログラムでいくつかの頻繁に 使用される画像の高速な読み込みを必要としていないかぎりは, この形式をあなたが必要とすることはない事を再び強調しておく.

.gd2 画像ファイル形式について

PNG 形式を読み書きして Xビットマップ形式を読むことに付け加えて, gd はそれ自身の ".gd2"形式を読み書きできる能力を持ちます. この形式は, 一般的な目的のために使用されることを意図していないし, 画像を配布するための目的で使用されるべきではない. これは巨大な画像ファイルにアクセスするための擬似乱数を許す圧縮形式 である. その目的は, 巨大なファイルの一部の高速な読み込みである. もしあなたが巨大な固定されたPNGやJPEG画像を読み込むとき, あなたのプログラムが出力画像を作り出す必要があるときにパフォーマンスの問題 を経験しているのであれば, あなたは gdImageCreateFromGd2, gdImageCreateFromGd2Part 及び gdImageGd2 関数を試してみたいと思うかも知れない. これらの関数は .gd2 形式のファイルを読み書きできる.

プログラム"pngtogd2.c"は, .png ファイルを .gd2 形式に変換する簡単な方法 として提供されている.

gdIOCtx 構造体について

Version 1.5 of GD added a new style of I/O based on an IOCtx structure (the most up-to-date version can be found in gd_io.h):
typedef struct gdIOCtx {
        int     (*getC)(struct gdIOCtx*);
        int     (*getBuf)(struct gdIOCtx*, void*, int);

        void     (*putC)(struct gdIOCtx*, int);
        int     (*putBuf)(struct gdIOCtx*, const void*, int);

        int     (*seek)(struct gdIOCtx*, const int);
        long    (*tell)(struct gdIOCtx*);

        void    (*free)(struct gdIOCtx*);

} gdIOCtx;
Most functions that accepted files in previous versions now also have a counterpart that accepts an I/O context. These functions have a 'Ctx' suffix.

The Ctx routines use the function pointers in the I/O context pointed to by gdIOCtx to perform all I/O. Examples of how to implement an I/O context can be found in io_file.c (which provides a wrapper for file routines), and io_dp.c (which implements in-memory storage).

It is not necessary to implement all functions in an I/O context if you know that it will only be used in limited cirsumstances. At the time of writing (Version 1.6.1, July 1999), the known requirements are:

All Must have 'free',
Anything that reads from the contextMust have 'getC' and 'getBuf',
Anything that writes to the contextMust have 'putC' and 'putBuf'.
If gdCreateFromGd2Part is calledMust also have 'seek' and 'tell'.
If gdImageGd2 is calledMust also have 'seek' and 'tell'.

あなたがgdを使用していることを我々に教えて下さい!

あなたが我々にコンタクトをとるときには, あなたが gd を使っていことを 我々に教えて下さい. 我々が gd を保守し改善するのに費す時間を正当化するのに 我々を助けることになります. ですから, 我々に教えて下さい. もしその結果が公にweb上で見ることができるのであれば, そのURLは 受け取るのが楽しみなものです. しかしもしそれが公に見ることができない プロジェクトであるのならば, 簡単なノートでも歓迎です.

もし問題があれば

もし gd についての問題があれば, 作者のThomas Boutell に気軽るにコンタクトをとって下さい. gd2形式に関する問題は, Philip Warner に向けられるべきです.

最初のこのマニュアルを注意深く読むことを忘れないように.

アルファベット順クイック索引

gdBrushed | gdDashSize | gdFont | gdFontPtr | gdFree | gdImage | gdImageArc | gdImageBlue | gdImageBoundsSafe | gdImageChar | gdImageCharUp | gdImageColorAllocate | gdImageColorClosest | gdImageColorDeallocate | gdImageColorExact | gdImageColorResolve | gdImageColorTransparent | gdImageCopy | gdImageCopyResized | gdImageCreate | gdImageCreateFromGd | gdImageCreateFromGd2 | gdImageCreateFromGd2Part | gdImageCreateFromJpeg | gdImageCreateFromPng | gdImageCreateFromPngSource | gdImageCreateFromXbm | gdImageCreateFromXpm | gdImageDashedLine | gdImageDestroy | gdImageFill | gdImageFillToBorder | gdImageFilledRectangle | gdImageGd | gdImageGd2 | gdImageGetInterlaced | gdImageGetPixel | gdImageGetTransparent | gdImageGreen | gdImageInterlace | gdImageJpeg | gdImageLine | gdImageFilledPolygon | gdImagePaletteCopy | gdImagePng | gdImagePngToSink | gdImagePolygon | gdImagePtr | gdImageWBMP | gdImageRectangle | gdImageRed | gdImageSetBrush | gdImageSetPixel | gdImageSetStyle | gdImageSetTile | gdImageString | gdImageString16 | gdImageStringFT | gdImageStringTTF | gdImageStringUp | gdImageStringUp16 | gdImageWBMP | gdMaxColors | gdPoint | gdStyled | gdStyledBrushed | gdTiled | gdTransparent

Boutell.Com, Inc.