前回はGDを回避した簡単な描画方法についてお話しましたが、次にGDを使用して最も単純な「描画」である直線を描画しました。
今度は下に向かって直線を引いていきます。前回のコードで詳しく説明した部分は今回は繰り返しません。
<?
Header("コンテンツタイプ: image/png");
$im = ImageCreate (200, 100);
$col_black = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
// 今日はオレンジを使ってみましょう。
// imageline 関数と全く同じ使い方、
ImageDashedLine($im,0,100,199,100,$col_orn);
// これで点線が描画されます。
// 以下でテストを行ってみましょう。問題を説明するために使用されます。
$col_yel = ImageColorAllocate($im, 255,255,0);
//黄色。
ImageLine($im,0,99,199,99,$col_yel);
// 画像の下端に黄色の線を描きます。
ImageLine($im,200,0,200,100,$col_orn);
// 画像の右端にオレンジ色の線を描画しようとしましたが、何も起こりませんでした。
// これは、幅200、高さ100の画像の座標範囲が(0,0)から(199,99)であることを示します。
画像PNG($im);
ImageDestroy($im);
// まずこのセクションを終了しましょう。
?>
次の効果は絶大です!私も今勉強して販売中です。 PHP 4.0.6 以降では、この使用法が追加されています - 線を交互の色で描くことができます。例は次のとおりです
。
Header("コンテンツタイプ: image/png");
$im = ImageCreate (200, 100);
$col_black = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$style=array($col_red,$col_red,$col_black,$col_orn,$col_orn,$col_orn,$col_black);
ImageSetStyle($im, $style);
ImageLine($im, 0, 50, 199, 50, IMG_COLOR_STYLED)
;
ImageDestroy($im);
?>
効果を見てください。
空行で区切った3行について説明してください。配列 $style が定義されており、そのメンバーは一連の色です。
そして、関数が実行され、IMG_COLOR_STYLED の「色」を使用して、このような魔法の「直線」が描画されました——
赤、黒、オレンジの交互効果。よく見ると、赤、黒、オレンジの交互のシーケンスが私たちの定義であることがわかります。
$style 配列メンバーのシーケンス: 赤、赤、黒、オレンジ、オレンジ、オレンジ、黒、そしてサイクルが再び始まります...
わかりますか?この関数は PHP 4.0.6 以降でのみサポートされることに注意してください。
ここまで詳しく説明した線画の基本を踏まえて、他の幾何図形を描画する関数をまとめて書いていきたいと思います。皆さんに思い出していただきたいのは、どんな幾何学図形を描いても、それはその図形のいくつかの要素を把握することに他ならないということです。最初に色を数えずに、さまざまなグラフィックスの要素は次のとおりです:
点、2 つの要素: 横座標と縦座標の
長方形、4 つの要素: 横座標と縦
座標の左上隅と右下隅の円弧 このように理解してください: 円弧には円弧が含まれる場合があります。楕円弧; 弧を描いて 360 度描いて円を形成します; 楕円弧を描いて 360 度描いて円を形成します。
これは楕円を形成するため、この円弧には 6 つの要素があります: 中心点の水平座標と垂直座標、水平軸の長さ、垂直軸の長さ、円弧の始点と終点です。
次の例を見てください。
<?
Header("コンテンツタイプ: image/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageSetPixel($im,20,10,$col_orn);
// 小さな点ですが、見えるでしょうか?
ImageRectangle($im,25,20,95,55,$col_blu);
// 青い四角形。
ImageArc($im,20,85,50,40,225,360,$col_grn);
// 緑色の楕円弧、中心は (20,85)、水平軸 50、垂直軸 40、225 度から 360 度。
// ここでの円弧の始点と終点は角度で測定されていることがわかります。
// 水平右方向を0度として時計回りに計算します。
ImageArc($im,160,60,40,40,0,360,$col_orn);
// オレンジ色の完全な円。横軸の長さと縦軸の長さが等しい限り、それは真円です。
// 私たちは皆、高校で学びました: 円は楕円の特殊な場合です!
//最後に別の円弧を描きます。円の中心が画像の外側にあってもよいでしょうか?
ImageArc($im,160,140,240,240,0,360,$col_red);
// できる!
画像PNG($im);
ImageDestroy($im);
?>
もちろん、絵を描くときに特定の領域を特定の色で塗るのは避けられません。 GDには3つの着色方法があり、1つは長方形領域の着色、
1 つは指定した点の囲まれた領域に色を付ける方法、もう 1 つは指定した色で囲まれた領域に色を付ける方法です。次の例を見てください。
<?
Header("コンテンツタイプ: image/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_yel = ImageColorAllocate($im, 255,255,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageFilledRectangle($im,20,10,100,50,$col_blu);
ImageFilledRectangle($im,5,40,50,90,$col_red);
ImageFilledRectangle($im,40,80,100,95,$col_orn);
ImageFilledRectangle($im,90,35,110,90,$col_yel);
//上記は最初の色付けです。長方形を直接描きます。
// 意図的に小さな領域を異なる色の 4 つの長方形で囲みました。
// 2 番目の色付けを説明するために使用されます。
画像PNG($im);
ImageDestroy($im);
// エフェクトを見てみましょう。
?>
次に、
<?
Header("コンテンツタイプ: image/png");
$im = ImageCreate (200, 100);
$col_blk = ImageColorAllocate($im, 0,0,0);
$col_orn = ImageColorAllocate($im, 255,192,0);
$col_yel = ImageColorAllocate($im, 255,255,0);
$col_red = ImageColorAllocate($im, 255,0,0);
$col_grn = ImageColorAllocate($im, 0,255,0);
$col_blu = ImageColorAllocate($im, 0,0,255);
ImageFilledRectangle($im,20,10,100,50,$col_blu);
ImageFilledRectangle($im,5,40,50,90,$col_red);
ImageFilledRectangle($im,40,80,100,95,$col_orn);
ImageFilledRectangle($im,90,35,110,90,$col_yel);
//上記は最初の色付けです。長方形を直接描きます。
// 意図的に小さな領域を異なる色の 4 つの長方形で囲みました。
> // 2 番目の色付けを説明するために使用されます。
ImageFill($im,70,70,$col_grn);
// 2回目の色塗りです。
ImageRectangle($im,120,40,190,90,$col_grn);
// 四角形を描いて枠を作りましょう。実際、あらゆる形状の境界線をフレームとして使用できます。
ImageFilltoBorder($im,130,50,$col_grn,$col_orn);
// 緑の長方形をオレンジ色に塗ります。
// 指定された点がこの「ボックス」の範囲内にある限り、領域内の点の位置とは関係ありません。
// この関数は実際には次のように動作します。
//指定された点から開始して、指定された色の境界を探して、見つかった場合は停止します。
// 見つからない場合は、通過点を必要な色でペイントします。
画像PNG($im);
ImageDestroy($im);
// エフェクトを見てみましょう。
// 作成した画像はカラフルですが、ブラウザや画像上では、
// 右クリック -> プロパティ: わずか 214 バイト!
?>
今回はここまでにしましょう。