ホームページ > バックエンド開発 > PHPチュートリアル > PHP描画の話(2)_PHPチュートリアル

PHP描画の話(2)_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:35:40
オリジナル
991 人が閲覧しました

上次说了一种简单的回避GD的作图方法,而后又用GD作了最简单的一幅“图”——直线。
这次我就接着画直线向下说。上次代码中详细解释过的部分,这次不再赘述。

Header("Content-type: 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)。

ImagePNG($im);
ImageDestroy($im);
// 这一段先结束吧。
?>


    接下来这个效果就爽了!我也是现学现卖。PHP4.0.6以上增加了这个用法——可以用交替的
颜色画线!示例如下:

Header("Content-type: 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);

ImagePNG($im);
ImageDestroy($im);
?>

看看效果吧。

    其中我用空行分割开的那三行,说明一下。定义了一个数组 $style,它的成员是一系列的颜色;
然后执行了一个函数,而后用 IMG_COLOR_STYLED “颜色”画出来的是这么神奇的“直线”——
红色、黑色、橙色交替的效果。仔细看一下你就会发现,红、黑、橙交替的顺序,就是我们定义的
$style数组成员的序列:红、红、黑、橙、橙、橙、黑,然后周而复始……
    看明白了吗?注意,这个函数在PHP4.0.6以后才支持。

 

    有了我详细讲解的画线的基础,我想把画其他几何图形的函数一笔代过。需要提示大家的是,无论
画哪种几何图形,无非是抓住这种图形的几个要素。先不算颜色,各种图形的要素如下:

点,两个要素:横坐标、纵坐标

矩形,四个要素:左上角、右下角的横、纵坐标

弧,这样理解:弧可以包括圆弧、椭圆弧;画圆弧画他360度就可以成一个圆,画椭圆弧画他360度也就画
              成一个椭圆;所以这个弧的要素有六:中心点横、纵坐标,横轴长、纵轴长、弧的始、终点。

看下面这段例子。

Header("Content-type: 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);
// 可以!

ImagePNG($im);
ImageDestroy($im);
?>

もちろん、絵を描くとき、​​特定の領域を特定の色で塗ることは避けられません。 GD には 3 つの着色方法があり、1 つは長方形領域を着色する
1 つは指定した点が位置する囲まれた領域を着色する
1 つは指定した色で囲まれた領域を着色する
です。次の例を見てください:
Header("Content-type: 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);
// 上記は最初の色付けです。長方形を直接描きます。
// 2 番目の色付けを説明するために、意図的に小さな領域を異なる色の 4 つの長方形で囲みました。
//

ImagePNG($im);
ImageDestroy($im);

// エフェクトを見てみましょう。

?>

その後:

Header("Content-type: 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);
// 上記は最初の色付けです。長方形を直接描きます。
// 2 番目の色を説明するために、意図的に小さな領域を異なる色の 4 つの長方形で囲みました。
>

ImageFill($im,70,70,$col_grn);
// これは 2 番目の色付けです。

ImageRectangle($im,120,40,190,90,$col_grn);
// フレームを作成するための長方形を描画しましょう。実際、あらゆる形状の境界線をフレームとして使用できます。
ImageFilltoBorder($im,130,50,$col_grn,$col_orn);
// 緑色の長方形をオレンジ色にペイントします。
// 指定された点がこの「ボックス」の範囲内にある限り、領域内の点の位置とは関係ありません。
// この関数は実際には次のように動作します。
// 指定された点から開始して、指定された色の境界が見つかったら停止します。
// 見つからなかった場合は、必要な色で通過点をペイントします。

ImagePNG($im);
ImageDestroy($im);

// エフェクトを見てみましょう。
// 作成した画像はカラフルですが、ブラウザの画像上では、
// 右クリック -> プロパティ: わずか 214 バイト!

?>

今回はこの辺で。

http://www.bkjia.com/PHPjc/508315.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508315.html技術記事
前回はGDを回避した簡単な描画方法についてお話しましたが、次にGDを使用して最も単純な「描画」である直線を描画しました。 今度は下に向かって直線を引いていきます。最後のコードで詳しく説明しています...
🎜🎜
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート