おい! これを読めよ! 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を使えば, あなたのプログラムから, 線分, 弧, テキスト, 複数色, 他の画像からの切り貼り, フラッド(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で計画されている.
#include <gd.h>
corrected to #include "gd.h"
in gd_wbmp.c
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:
autoconf
and configure
have been removed, in favor of a
carefully designed Makefile which produces and properly installs
the library and the binaries. System-dependent variables are
at the top of the Makefile for easy modification. I'm sorry,
folks, but autoconf generated many, many confused email
messages from people who didn't have things where autoconf
expected to find them. I am not an autoconf/automake wizard, and
gd is a simple, very compact library which does not need to
be a shared library. I did make many improvements
over the old gd 1.3 Makefile, which were directly inspired by the
autoconf version found in the 1.6 series (thanks to John Ellson).
-pedantic-errors
flag of gcc. Several pieces of not-quite-ANSI-C code were causing problems
for those with non-gcc compilers.
gdttf.c
patched to allow the use of Windows symbol
fonts, when present (thanks to Joseph Peppin).
extern "C"
wrappers added to gd.h
and the
font header files for the convenience of C++ programmers.
bdftogd
was also modified to automatically insert these
wrappers into future font header files. Thanks to John Lindal.
SEEK_SET
.
Thanks to Robert Bonomi.
gdImageCreateFromXpm
function, if the Xpm library is available. Thanks to Caolan McNamara.
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.
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.
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!
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.
This format also supports version numbers and rudimentary validity
checks, so it should be more 'supportable' than the previous GD format.
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 をビルドするためには, あなたはまずダウンロードしたアーカイブ
ファイルを展開しなければなりません. もしあなたが,
アーカイブファイルを展開すると,"gd-1.8.4"というディレクトリが作られます.
もしエラーが出たら, INCLUDEDIRS と LIBDIRS に特に注意して Makefile を再び編集なさい.
もしリンカエラーが出たら, Makefile の -l ディレクティブの順番を上手に処理する
ことを試みなさい. あるプラットフォームでは, これらのライブラリが逆順に並んでいる
ことが好まれるかも知れません.
あなたは, gd ライブラリとgs の能力を示すデモプログラムをビルドします.
それが動くようすを見るためには,
"gddemo"を実行しなさい.
l
gddemo は, 無事にファイルdemoout.pngを生成するはずである.
(demoin.png という名前のファイルもあることに注意せよ. これは
デモの一部分としてパッケージに含まれている.)
demoout.png をあなたのPNGビューワで表示しなさい. その画像は
128x128 ピクセルであるべきであり,
その先端に多くのグラフィカル要素が描かれているスペースシャトルの画像が
含まれているはずである.
(もしdemoin.pngファイルが見付からないのであれば, 別のファイルが現れるべきであろう.)
元のスペースシャトルの画像は demoin.png で見ることができる.
この画像は, output.png では拡大コピーされている.
もしあなたが, 提供されるフォントを使用したいのであれば,
gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h かつ/または gdfontg.h
をインクルードしなさい.
より印象的な結果のためには, FreeType 2.x をインストールして, 新しい
gdImageStringFT関数を使用しなさい.
もしあなたが, 提供されたMakefile を使用していない, かつ/または,
ライブラリに基づいたアプローチを使用しないのであれば,
あなたのプロジェクトに必要なソースモジュールをインクルードする
のを忘れないように. (それらは, 16ビット DOS とWindows のような,
16ビットメモリモデルのコンピュータには大きすぎるであろう.)
ここに, 短いプログラムの例がある. (より発展的な例については,
ディストリビューションに含まれている gddemo.cを見よ. gddemo.c はは
同じプログラムではない. それは追加的な機能を示すためのものである!)
上の例題のプログラムのは, あなたにパッケージがどのように動作するか
についてのアイディアを与えるはずである.
gd はこれら以外にも多くの関数を提供する.
これらの関数は, 以下の章でプログラムの断片とともに示されるであろう.
さらに, アルファベット順の索引もある.
webpng.c はディストリビューションに提供されている. Unix ユーザ
は, このプログラムをコンパイルするために, 単に"make webpng"
を実行すれば良い.
可能なオプションを見るためには, 引数無しで "webpng" を実行せよ.
プログラマは, コンテクストポイント, バッファ, 及び, 読み込まれる
バイト数を引数として受け付けるような入力関数を書かなければならない.
この関数は, ファイルの終端に達っしない限り, 要求された数のバイト数を読み込
む. この場合はゼロを返し, エラーが起った場合には
以下の例は, 自作のデータソースを生成して gdImageCreateFromPngSource
を呼出すことによって,
gdImageCreateFromPng
を実装している.
もしqualityが負のときは, デフォルトで IJG JPEG 品質の値が
採用される. (この品質は, ほとんどの状況で適切で一般的な品質とサイズ
のトレードオフを与える.) そうでなければ, 実際的な目的のために,
quality は 0-95 の範囲にある値であるべきである. 高品質な
値は, 通常高い品質と大きな画像サイズを意味する.
もしあなたがgdImageInterlaceを用いて
画像インターレースを設定したのであれば, この関数は,
あなたがプログレッシブJPEGを出力したいのであるという意味に解釈する.
いくつかのプログラム(例えば, Web ブラウザなど)は, 増加的に(incrementally)
プログレッシブJPEG を表示することができる. これは,
例えば相対的に遅い通信回線を通じてブラウズするときに有用かも知れない.
プログレッシブJPEGは, 連続的(非プログレッシブ)JPEGよりも少し小さい.
プログラマは, コンテクストポイント, バッファ, 及び, 書き出される
バイト数を引数として受け付けるような出力関数を書かなければならない.
この関数は, 要求された数のバイト数を書き出して, エラーが起らなければ
その数を返す. エラーが起った場合には
以下の例は, 自作のデータシンクを生成してgdImagePngToSink
を実行することによって, gdImagePng
を実装している.
WBMP は白色と黒色のみをサポートしている.
fg引数によって指定される色インデックスは, "前景(foreground)" であり,
この色の画素だけが, WBMPファイルに設定される.
他のすべての画素は, "背景 (background)"とみなされる.
gd 画像形式は,
あなたのプログラムが, 頻繁に他の画像を構成するために,
高速な画像の読み込みと書き出しを意図している.
これは, 圧縮を形式ではないし, 一般的な用途に用いられる
ように作られてはいない.
gd2 画像形式は, 高速な画像一部の読み込みと書き出しを意図している.
これは, 圧縮形式であり, 大きな画像の小さな部分を切り取ることに
適している.
第3パラメータと第4パラメータは, それぞれ, 'チャンクサイズ' と 形式である.
ファイルは, 圧縮された部分画像の連続として保存されており,
チャンクサイズが部分画像のサイズを決定する.
この値がゼロとときは, GD ライブラリはデフォルトを使用する.
GD2ファイルを非圧縮形式で保存することも可能である. この場合には,
第4パラメータをGD2_FMT_RAWに設定すれば良い.
gdImageDashedLine は, 2つの端点 (x1,y1) と (x2, y2) の間に破線を描く.
この破線は, 指定された色インデックスを用いて描かれる.
この破線の描かれていない部分は透明であるため背景が見える.
境界の色は, gdTiledのような特別な色で
あってはならない. それは, 真のソリッドな色でなければならない.
しかし, 塗り潰し色は特別な色であっても良い.
gdImageFillToBorder は再帰的であることに注意せよ. それは,
素朴な実装であるけれども, この実装は改良される予定である.
しかしながら, スタックが非常に深くなる退化した場合が常に存在する.
これは, MSDOS とMS Windows 3.1 環境の問題である. (もちろん,
適切なスタックを使用するUnix や Windows 95/98/NT 環境では, これは
全く問題ではない.)
塗り潰しの色は, gdTiledであってもよい.
その結果は別の画像をタイルとして使用するタイルになる.
しかし, タイル画像は透過色にしてはいけない. もし
塗り潰したい画像が透過色のときは, タイル画像に対して
gdImageTransparent
を呼出して, 透過性をオフにするために透過色インデックスを
-1に設定せよ.
gdImageFill は再帰的であることに注意せよ. それは,
素朴な実装であるけれども, この実装は改良される予定である.
しかしながら, スタックが非常に深くなる退化した場合が常に存在する.
これは, MSDOS とMS Windows 3.1 環境の問題である. (もちろん,
適切なスタックを使用するUnix や Windows 95/98/NT 環境では, これは
全く問題ではない.)
gdImageSetBrush は, 特定の画像に用いられるブラシを特定するために
使用される. あなたは, 任意の画像をブラシとして設定できる.
もしブラシ画像が最初の画像と同じ色マップを持たないのであれば,
最初の画像に存在しない任意の色が割当てられるであろう.
もし十分な色を割当てることができなければ, 既に使用されている
最も近い色が使用されるであろう.
これによって, 任意のPNGがブラシ画像として使用できるようになる.
しかしながら, これはあなたは実際にブラシを使用しないのであれば,
ブラシを設定すべきではないことを意味する.
もしあなたが, 異なるブラシ画像を連続して設定すれば, あなたは,
すぐに色マップを使い果して結果は最適なものにはならないであろう.
あなたは, ブラシを使用し終ったときには特別な行動をする必要はない.
他の画像と同様に, もしあなたがその後にそのブラシ画像を使用しないので
あれば, あなたは, gdImageDestroy
を呼び出すべきである.
あなたは, 現在のブラシが破棄されたならば
色gdBrushedを使用してはいけない.
あなたはもちろんそれに代る新しいブラシを設定することもできる.
gdImageSetTile は, 特定の画像に用いられるタイルを特定するために
使用される. あなたは, 任意の画像をタイルとして設定できる.
もしタイル画像が最初の画像と同じ色マップを持たないのであれば,
最初の画像に存在しない任意の色が割当てられるであろう.
もし十分な色を割当てることができなければ, 既に使用されている
最も近い色が使用されるであろう.
これによって, 任意のPNGがタイル画像として使用できるようになる.
しかしながら, これはあなたは実際にタイルを使用しないのであれば,
タイルを設定すべきではないことを意味する.
もしあなたが, 異なるタイル画像を連続して設定すれば, あなたは,
すぐに色マップを使い果して結果は最適なものにはならないであろう.
あなたは, タイルを使用し終ったときには特別な行動をする必要はない.
他の画像と同様に, もしあなたがその後にそのタイル画像を使用しないので
あれば, あなたは, gdImageDestroy
を呼び出すべきである.
あなたは, 現在のタイルが破棄されたならば
色gdTiledを使用してはいけない.
あなたはもちろんそれに代る新しいタイルを設定することもできる.
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
を見よ.
この関数は gd 1.3 で, 256文字より多くの文字を持つフォント
をレンダーするための手段を提供するために追加された.
より頻繁に使用される関数は
gdImageStringである.
この関数は gd 1.3 で, 256文字より多くの文字を持つフォント
をレンダーするための手段を提供するために追加された.
より頻繁に使用される関数は
gdImageStringである.
gdImageStringFT は, ユーザーによって供給されるTrueTypeフォントを
レンダーするためのFreeTypeライブラリ
を使用してアンチエイリアストな文字列を画像上に描く.
我々はTrueTypeフォント (.ttf と .ttc ファイル) を提供しない.
これらを取得することは完全にあなたに任されている.
文字列がアンチエイリアストであるとは、
可視的じゃギザギザがより少ないことを意味する。
fontname は TrueType フォントファイルへの完全なパス, あるいは,
GDFONTPATH 環境変数が設定されているか
FreeTypeのDEFAULT_FONTPATH変数が intelligently に設定されて
いるのであれば, フォントフェイス名, である.
文字列は任意に拡大/縮小され(ptsize), 回転することができる
(ラジアンで指定された angle).
ユーザが供給するbrect[8]配列は, gdImageStringFT のリターン
によって, バウンディング正方領域の4隅を表現する 8つの要素
で値が与えられる.
これらの点は, 角度に関係なくテキストに相対的である. したがって,
"左上" は, テキストを水平に見たときの左上隅を意味する.
レンダーすることなくバウンディング正方領域を得るために, NULL
gdImagePtr を使用せよ. これは, 同じ文字列のレンダーが後に続くときには,
比較的安価な操作である. バウンディング正方
領域の計算時に部分的なレンダリングをキャッシュしているためである.
文字列は, gf色インデックスによって示された色でレンダーされる.
アンチエイリアシングを無効にしたいときには,
欲っする色インデックスにマイナスを付けたものを使用せよ.
文字列は"À"のようなUTF-8文字列を含むことができる.
gdImageStringFT は成功すると NULL char* を返し, 失敗すると
エラー文字列を返す.
gdImageStringTTF は, ユーザーによって供給されるTrueTypeフォントを
レンダーするためのFreeTypeライブラリ
を使用してアンチエイリアストな文字列を画像上に描く.
我々はTrueTypeフォント (.ttf と .ttc ファイル) を提供しない.
これらを取得することは完全にあなたに任されている.
文字列がアンチエイリアストであるとは、
可視的じゃギザギザがより少ないことを意味する。
fontname は TrueType フォントファイルへの完全なパス, あるいは,
GDFONTPATH 環境変数が設定されているか
FreeTypeのDEFAULT_FONTPATH変数が intelligently に設定されて
いるのであれば, フォントフェイス名, である.
文字列は任意に拡大/縮小され(ptsize), 回転することができる
(ラジアンで指定された angle).
ユーザが供給するbrect[8]配列は, gdImageStringTTF のリターン
によって, バウンディング正方領域の4隅を表現する 8つの要素
で値が与えられる.
これらの点は, 角度に関係なくテキストに相対的である. したがって,
"左上" は, テキストを水平に見たときの左上隅を意味する.
レンダーすることなくバウンディング正方領域を得るために, NULL
gdImagePtr を使用せよ. これは, 同じ文字列のレンダーが後に続くときには,
比較的安価な操作である. バウンディング正方
領域の計算時に部分的なレンダリングをキャッシュしているためである.
文字列は, gf色インデックスによって示された色でレンダーされる.
アンチエイリアシングを無効にしたいときには,
欲っする色インデックスにマイナスを付けたものを使用せよ.
文字列は"À"のようなUTF-8文字列を含むことができる.
gdImageStringTTF は成功すると NULL char* を返し, 失敗すると
エラー文字列を返す.
gdMaxColors (256) 個の色が割当てられると,
gdImageColorAllocate は失敗を示す -1 を返す.
(これは, 既に256色が使用されている PNGファイルで作業しているときには
起こり得る.)
gdImageColorAllocate は, あなたの要求にマッチする色が既に存在している
かどうかはチェックしないことに注意せよ.
新しい色が使用可能でない状況で, 要求されている色を近似する
存在している色を割当てる方法については,
gdImageColorExact,
gdImageColorClosest 及び
gdImageColorClosestHWB を見よ.
gd-1.6.2 において新たに追加された
gdImageColorResolveも見よ.
もし, その画像にひとつも色が割当てられていない状態であれば
gdImageColorClosest は -1を返す.
この関数は, 画像が既に
gdMaxColors (256) 色を含んでいて
これ以上の色を割当てることができないときに,
次善の策として描画色を選ぶときに最も便利である.
正確にマッチする色だけを割当てる方法については,
gdImageColorExactを見よ.
もし, その画像にひとつも色が割当てられていない状態であれば
gdImageColorClosestHWB は -1を返す.
この関数は, 画像が既に
gdMaxColors (256) 色を含んでいて
これ以上の色を割当てることができないときに,
次善の策として描画色を選ぶときに最も便利である.
正確にマッチする色だけを割当てる方法については,
gdImageColorExactを見よ.
使用される色インデックスは, gdImageColorAllocate
によって割当てられた色でなければならない. この割当ては,
あなたのプログラムによって明示的に実行されるかも知れないし,
画像ファイルの読み込みによって暗に行われるかも知れない.
透過色背景を扱う能力を持たないユーザがあなたの画像
を見たときに(あるいは, あなたが,
透過性をサポートしないJPEG形式ファイルを書き出すときに),
まともな見栄えがすることを補償するために, まともな RGB値を
あなたが透過色として使用する目的で割当てる色に与えることを忘れないように.
PNG 透過性をサポートするシステム上では透明であるけれども.
あなたが, ある画像の1つの位置から同じ画像の別位置にコピーを行うと,
gdImageCopy は, これらの領域が重ならない限り, 期待されたような動作する
をする. 領域が重なった場合は結果は予想できない.
画像間でのコピーについての重要な注意:
異なる画像は必ずしも同じ色テーブルを持っているわけではないので,
コピー先の画素は単にコピー元と同じ色インデックスに設定されるわけではない.
gdImageCopy は, コピーされる領域の各画素に対して,
gdImageColorExactを実行することによって,
コピー先の画像の中で同一のRGB値を探そうとする.
もしそのような色が存在しないならば, gdImageCopy は,
gdImageColorAllocateを使用することによって,
必要とされる色を割当てようとする. もし両方の方法が失敗するならば,
gdImageCopy はgdImageColorClosest
を実行して, コピーされる画素の色に最も近い色をコピー先画像の中から見付ける.
同じ画像の中のある位置から別の位置に領域をコピーするとき, dImageCopy
は, 2つの領域が重ならない限りは期待するような動作をする.
重なるときは, その結果は予想できない.
もしこれが問題ならば, 途中結果を保存するためのスクラッチ画像を
生成せよ.
しかしもし, pctパラメータが100より小さいならば, 2つの画像はマージされる.
pct = 0 のときには何も実行されない.
This feature is most useful to 'highlight' sections of an image by merging a solid color with
pct = 50:
インターレース引数に対する非ゼロ値は, インターレースをオンにする.
ゼロ値はそれをオフにする. インターレースは他の関数に何の効果も持たず,
PNGやJPEG 形式で画像を保存しない限りは何の意味も持たないことに注意せよ.
gd と xbm形式はインターレースをサポートしない.
PNG が
gdImageCreateFromPng で読み込まれるか
JPEG が
gdImageCreateFromJpegで読み込まれる
とき, インターレースはPNGファイルかJPEGファイルの設定にしたがって
設定される.
多くのPNGとJPEGビューワとwebブラウザは, インターレースを
JPEGのインクリメンタルな表示をサポートしない.
しかし, インターレース PNG やプログレッシブJPEG は
は, 表示されるべきである.
それは単に他の画像と同様に一度に表示される.
プログラム"pngtogd.c"は, .png ファイルを .gd 形式に変換する簡単な方法
として提供されている. 私は, あなたがあなたのプログラムでいくつかの頻繁に
使用される画像の高速な読み込みを必要としていないかぎりは,
この形式をあなたが必要とすることはない事を再び強調しておく.
プログラム"pngtogd2.c"は, .png ファイルを .gd2 形式に変換する簡単な方法
として提供されている.
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:
最初のこのマニュアルを注意深く読むことを忘れないように.
What's new in version 1.6.2?
Version 1.6.2 from John Ellson
if ((color=gdImageColorExact(im,R,G,B)) < 0)
if ((color=gdImageColorAllocate(im,R,G,B)) < 0)
color=gdImageColorClosest(im,R,G,B);
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.
What's new in version 1.6?
Version 1.6 features the following changes:
What's new in version 1.5?
Version 1.5 featured the following changes:
NOTE: In fairness to Thomas Boutell, any bug/problems with any of the above features should
probably be reported to Philip Warner.
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.
What's new in version 1.4?
Version 1.4 features the following changes:
What's new in version 1.3?
Version 1.3 features the following changes:
pixels
array will require
changes.
gdを使用するために他に必要なものは何か?
HTTP
FTP
tar
と gunzip
(Unix) か ZIP
(Windows)
に慣れていないのであれば, あなたのシステムの経験豊富なユーザに
相談して下さい. 申し訳ありませんが, 我々は, インターネットの基本的なスキルに
ついての質問には答えられません.
Unix
まずその 1.8.4 ディレクトリにcd
しなさい. Makefile をあなたの好きな
テキストエディタを使用して, 特に Xpm か TrueType サポートが
必要ならば, 先頭の設定に必要な変更を加えなさい.
次に"make"を実行しなさい. もしあなたがシステム管理者であって, あなたが,
他のプログラムからも gdライブラリが利用できるようにしたにのであれば,
あなたは "make install" を実行すべきである.
For Windows, Mac, Et Cetera
あなたの好きな開発環境を使用してプロジェクトを作れ.
そのプロジェクトディレクトリにすべての gdファイルをコピーしなさい.
gd.c
をあなたのプロジェクトに追加しなさい.
適切に他のソースファイルも追加しなさい.
あなたが選んだC開発環境でプロジェクトを生成するスキルは
あなたに任されている.
gd の基本: gd をあなたのプログラムで使う
gd を使えば, PNG や JPEG 画像を簡単に作ることができる.
あなたのプログラムで gd を使うためには, gd.h をインクルードして
libgd.a とリンクすればよい. libgda は, Unix 上では, "make libgd.a"
で生成されるライブラリであ. 別のオペレーティングシステムでは,
あなたは, gd.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ファイルに出力する. そして,
画像を廃棄する.
Webpng: より強力な gd の例
Webpngは, コマンドラインからPNGファイルを操作するための
単純なユーティリティプログラムである.
これは, Unixや同様のコマンドラインシステムのために書かれているが,
他の環境にも簡単に適合させることができる.
Webpng は, 透過性やインターレースを設定したり
当該のPNGの疑問興味深い情報を出力することを可能にする.
関数と型のカテゴリー別リファレンス
型
gdImage
(型)
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;
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;
typedef struct {
int x, y;
} gdPoint, *gdPointPtr;
typedef struct {
int (*source) (void *context, char *buffer, int len);
void *context;
} gdSource, *gdSourcePtr;
それからPNGを読み込むことができるソースを表わす.
PNGをファイルから読み込みたいと思わないプログラマは,
gdImageCreateFromPngSource
関数を使用することによって,
彼ら自身の代替的な入力メカニズムを提供することができる.
この型の適切な使用例については, gdImageCreateFromPngSource 関数の
説明を見よ.
typedef struct {
int (*sink) (void *context, char *buffer, int len);
void *context;
} gdSink, *gdSinkPtr;
PNG を書き出すことができる "シンク" (行き先) を表わす.
PNGをファイル書き出したいと思わないプログラマは,
gdImagePngToSink
関数を使用することによって,
彼ら自身の代替的な出力メカニズムを提供することができる.
この型の適切な使用例については, gdImagePngToSink 関数の
説明を見よ.
画像の生成, 破棄, 読み込みと書き出し
... inside a function ...
gdImagePtr im;
im = gdImageCreate(64, 64);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromJpegCtx(FILE *in)
(関数)
gdImagePtr im;
... inside a function ...
FILE *in;
in = fopen("myjpeg.jpg", "rb");
im = gdImageCreateFromJpeg(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromPngCtx(gdIOCtx *in)
(関数)
gdImagePtr im;
... inside a function ...
FILE *in;
in = fopen("mypng.png", "rb");
im = gdImageCreateFromPng(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
-1
を
返す. プログラマは, 次にgdSource構造体を
生成し, 入力関数へのsource
ポインタとプログラムに
有用な任意の値へのコンテクストポインタを設定する.
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;
}
gdImageCreateFromGdCtx(gdIOCtx *in)
(関数)
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("mygd.gd", "rb");
im = gdImageCreateFromGd(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromGd2Ctx(gdIOCtx *in)
(関数)
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("mygd.gd2", "rb");
im = gdImageCreateFromGd2(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
gdImageCreateFromGd2PartCtx(gdIOCtx *in)
(関数)
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("myxbm.xbm", "rb");
im = gdImageCreateFromXbm(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
... inside a function ...
gdImagePtr im;
FILE *in;
in = fopen("myxpm.xpm", "rb");
im = gdImageCreateFromXpm(in);
fclose(in);
/* ... 画像を使用する ... */
gdImageDestroy(im);
... inside a function ...
gdImagePtr im;
im = gdImageCreate(10, 10);
/* ... 画像を使用する ... */
/* それを破棄する */
gdImageDestroy(im);
void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality)
(関数)
... 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);
... 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);
-1
を
返す. プログラマは, 次にgdSink構造体を
生成し, 出力関数へのsink
ポインタをプログラムに
有用な任意の値へのコンテクストポインタを設定する.
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);
}
gdImageWBMPCtx(gdIOCtx *out)
(関数)(関数)
... 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);
... 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);
... 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);
描画, スタイル, ブラシ, タイル, 及び, 塗り潰し関数
... 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);
... 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);
... 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);
... 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);
... 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);
... 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);
... 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);
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);
color
で画像の一部を
塗り潰す. 指定された点から始まって指定されたborder
色で
止まる.
出発点の色によって指定された領域を塗り潰す方法については,
gdImageFillを見よ.
... 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);
color
で画像の一部を
塗り潰す. 指定された点から始まって出発点と同じ色の領域を塗り潰す.
止まる. 内部の色ではなくて指定された境界色まで領域を塗り潰す方法については,
gdImageFillToBorder
を見よ.
... 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);
... 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);
... 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);
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);
問合せ関数
... 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);
... 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);
フォントとテキストを扱う関数
#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);
#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);
#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);
#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);
0
左下隅, X 位置 1
左下隅, Y 位置 2
右下隅, X 位置 3
右下隅, Y 位置 4
右上隅, X 位置 5
右上隅, Y 位置 6
左上隅, X 位置 7
左上隅, Y 位置
#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);
0
左下隅, X 位置 1
左下隅, Y 位置 2
右下隅, X 位置 3
右下隅, Y 位置 4
右上隅, X 位置 5
右上隅, Y 位置 6
左上隅, X 位置 7
左上隅, Y 位置
#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);
色を扱う関数
... 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);
... 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);
... 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);
... 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);
... 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);
... 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);
... 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);
コピーとリサイズ関数
dst
引数は, 指定された範囲がコピーされる行き先の画像で
ある. src
引数は, そこから領域がコピーされる元の画像である.
dstX
とdstY
引数は, 領域が
コピーされる行き先の画像の点を指定する.
srcX
とsrcY
引数は
コピー元画像の左上隅を指定する. w
とh
引数はその領域の幅と高さを指定する.
... 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);
dst
引数は, その領域がコピーされる先の画像である.
src
引数は, 領域がコピーされる元の画像である.
dstX
とdstY
引数は,
領域がコピーされるコピー先画像の点を指定する.
srcX
とsrcY
引数は, コピー元画像の領域の
左上隅を指定する
dstW
とdstH
は, コピー先領域の幅と高さを
指定する.
srcW
とsrcH
はコピー元領域の幅と高さを
指定し, コピー先領域のサイズと異なっても良い.
したがって, このコピーによって領域の拡大/縮小が可能になる.
... 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);
... Inside a function ...
gdImageCopyMerge(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
... Inside a function ...
gdImageCopyMergeGray(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
その他の関数
... Inside a function ...
cmpMask = gdImageCompare(im1, im2);
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);
free()
のバージョンが,
ブロックを最初に割当てたmalloc()
のバージョンと
整合的であることを保証するために, この関数を使用せよ.
定数
gdMaxColors
(定数)
追加的な .gd 画像ファイル形式について
PNG と JPEG 形式を読み書きして Xビットマップ形式を読むことに付け加えて,
gd はそれ自身の ".gd"形式を読み書きできる能力を持ちます.
この形式は, 一般的な目的のために使用されることを意図していないし,
画像を配布するための目的で使用されるべきではない.
その目的は, しばしば出力のために別の画像を構成するために
単にあなたのプログラムへの画像の非常に高速な読み込みを可能にするためである.
もしあなたが, 巨大な固定されたPNG画像を読み込むときにパフォーマンスの問題
を経験しているのであれば, あなたは
gdImageCreateFromGdや
gdImageGd関数を試してみたいと思うかも知れない.
これらの関数は .gd 形式のファイルを読み書きできる.
.gd2 画像ファイル形式について
PNG 形式を読み書きして Xビットマップ形式を読むことに付け加えて,
gd はそれ自身の ".gd2"形式を読み書きできる能力を持ちます.
この形式は, 一般的な目的のために使用されることを意図していないし,
画像を配布するための目的で使用されるべきではない.
これは巨大な画像ファイルにアクセスするための擬似乱数を許す圧縮形式
である.
その目的は, 巨大なファイルの一部の高速な読み込みである.
もしあなたが巨大な固定されたPNGやJPEG画像を読み込むとき,
あなたのプログラムが出力画像を作り出す必要があるときにパフォーマンスの問題
を経験しているのであれば, あなたは
gdImageCreateFromGd2,
gdImageCreateFromGd2Part 及び gdImageGd2
関数を試してみたいと思うかも知れない.
これらの関数は .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.
All Must have 'free', Anything that reads from the context Must have 'getC' and 'getBuf', Anything that writes to the context Must have 'putC' and 'putBuf'. If gdCreateFromGd2Part is called Must also have 'seek' and 'tell'. If gdImageGd2 is called Must 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