PHP GDの学習記録

スポンサーリンク

準備

画像作成

画像リソースIDを表す変数に代入する形で使う(よく分からんw)。描画するキャンパスを宣言するようなもの。

ImageCreate

画像リソースを作る

使用例:
$img = ImageCreate(100,100);//幅100高100の画像リソース「$img」を作る。

描画する際は「$imgにコレコレを描画しろ」と命令を書くことになる。

imagecreatetruecolor

高品質な画像リソースを作る

使用例:
$img = imagecreatetruecolor(400,300);//幅400高300の高品質な画像リソース「$img」を作る。

色作成

上記で作成した特定の画像リソース上で使う色を宣言しておかないと描画できない。

ImageColorAllocate

$violet = ImageColorAllocate($img, 150, 100, 255);//画像リソース「$img」上で使用するR150:G100:B255の色「$violet」を作成

imagecolorresolvealpha

半透明の色を作る。最後のパラメータがアルファで0が不透明で127が透明

使用例:
$colT1=imagecolorresolvealpha($img, 255, 50,100, 50);//画像リソース$img上で使用するR255:G50:B100:A50の半透明色$colT1を作成

スタイル作成

描画パターン(ドットパターン)を定義した後で、特定の画像リソースで使用を宣言する

imagesetstyle

描画用のスタイルを設定して、各ツールの色として「」を指定する。太いブラシとしては実用できるが、パターンとしては実用に耐えない。

使用例1:パターン(実用には耐えない!)
$style1 = [$red2 , $red2 , $col1, $col1, $col1, $col1];//右手斜線状のスタイルの配列
imagesetstyle($img, $style1);//$style1をスタイルに設定

これで矩形や垂直・平行な直線を描くと点線で描ける(円や円弧は汚い破線にしかならない)。また、これで塗りつぶすと斜線状のパターンで塗りつぶせる。

ブラシ作成

ある画像リソース(A)を別画像リソース(B)上で使うブラシに指定(imagesetbrush)した上で、描画ツールの色として「IMG_COLOR_BRUSHED」を指定すると、画像Aを使って描画がなされる。

例1:

3*3pxの画像をブラシとして太い線を引く例を示す

ブラシ画像作成

$brush1=imagecreatetruecolor(3,3);//ブラシ作成用の画像リソース「$brush1」を定義
$col = imagecolorallocate($brush1,50,200,100);//$brush1上で描画用に色「$col」を定義
imagefill($brush1,0,0,$col);//$brush1全体を$colで塗りつぶして3*3pxの長方形を作る。これがブラシになる。

ブラシとして使用宣言

imagesetbrush($img,$brush1);//画像リソース$img上で$brush1をブラシとして使う宣言。

ブラシ描画

imageline($img,30,30,350,250,IMG_COLOR_BRUSHED);//画像リソース$img上に(30,30)から(250,250)へ宣言済みのブラシ($brush1)で直線を引く。太さ3pxの直線が引かれる。

パターンタイル作成

ある画像リソース(A)を別の画像リソース(B)で使用するパターンタイルとして設定(imagesettile)して、塗りつぶし描画ツールの色として「IMG_COLOR_TILED」を指定する。

$cross = imagecreatefrompng(‘./cross.png’);
//作成済み画像cross.pngから画像リソース$crossを作成

imagesettile($img,$cross);
//画像リソース$crossを画像リソース$img上で使用するタイルパターンに設定

imagefilledrectangle($img, 300, 100, 500, 300, IMG_COLOR_TILED);
//画像リソース$img上でタイルパターン$crossで塗りつぶした矩形を描く。

背景色

背景色は画像リソース作成直後に塗りつぶして実現

imagefill

一点からペイントソフトの「バケツツール」のように塗りつぶす。閉じられた範囲を超えない。作りたての画面に施せば全範囲を塗る。

使用例:
imagefill($img,10,20,$colBg);//画像$imgを(10,20)を起点に閉じられた範囲を塗りつぶす

特別な使用例(背景の初期化)
imagefill($img,0,0,$colBg);//(0,0)を指定すると全面を塗りつぶす!

パターンで塗りつぶし

GDのスタイルでパターンを作って塗っても、自由に設定できないし、均一に再現されない

「imagesettile」でタイルパターンを作って使用するとうまく行った。

図形描画

前述の画像リソースや色・ブラシ・パターンを設定した上で各描画ツールを使用する。

直線

imageline

通常の使用

imageline($img, 10,10, 390,10, $col1);
//画像リソース「$img」上で(10,10)から(390,10)まで色「$col1」太さ1ピクセルの直線を描く。

ブラシを使用

imageline($img,30,30,350,250,IMG_COLOR_BRUSHED);//画像リソース$img上に(30,30)から(250,250)に向かって、ブラシとして宣言(imagesetbrush)済みの画像で直線を引く。

連続線(開多角形)

imageopenpolygon

使用例(予め座標を配列に格納しておくと分かりやすい)
$points=[
1,1,
2,2,
3,3,
4,4,
];
imageopenpolygon($img,$points,4,$col);
//画像リソース$img上に配列変数$pointsに格納された座標を4点((1,1)(2,2)(3,3)(4,4))読んで、色$col太さ1ピクセルの直線で結ぶ

$colの代わりに「IMG_COLOR_BRUSHED」を使えばブラシで線を描く。

矩形

imagerectangle

矩形の輪郭を描画する

通常の使用例(1ドットで描く)

 

ブラシを使う例

$colの代わりに「IMG_COLOR_BRUSHED」を使う

ImageFilledRectangle

塗りつぶされた矩形を描く

単色での使用例:

ImageFilledRectangle($img, 0,0, 100,100, $col);//画像リソース$img上に(0,0)-(100,100)を対角線とする塗りつぶし矩形を$col色で描く

パターンで塗りつぶす例

$colの代わりに「IMG_COLOR_TILED」を使う

多角形(閉じたポリゴン)

 

imagepolygon

 

imagefilledpolygon

 

(だ)円

 

imageellipse

半径では無く楕円の幅と高さを指定するのに注意。

使用例
imageellipse($img,200,150,104,78,$col2);
//中心(200,150)幅104高さ78色で線色「$col2」の楕円

imagefilledellipse

塗りつぶされた楕円

使用例
imagefilledellipse($img,200,150,104,78,$col2);//中心(200,150)幅104高さ78で色「$col2」で塗りつぶされた楕円

 

(だ)円弧

注意点
❶半径でなくもとの楕円の幅と高さを指定する
❷角度指定は3時方向が0°で時計回り

imagearc

使用例
imagearc($img,380,320,200,200,-60,0,$col3);
//画像リソース$img上に中心(380,120)幅200高さ200の楕円のおうぎ形の弧「のみ」を-60°(1時方向)から0°(3時方向)まで描く

imagefilledarc

使用例
imagefilledarc($img,380,120,200,200,-60,0,$col3,4);
//画像リソース$img上に中心(380,120)幅200高さ200の楕円のおうぎ形を-60°(1時方向)から0°(3時方向)まで、スタイル4(塗りつぶし)で描く

スタイルの種類(使えそうなもの列挙)
4:塗りつぶし
6:縁取り

太い線での描画

 

 

点線での描画

垂直平行線はパターン指定でいける。

 

円(調査中)

テキスト描画

フォントをインストールしておく

 

imagettftext

使用例
imagettftext($img, 14, 0, 0, 20, $col3,$font1, $text);//画像リソース$img上にサイズ14ptで方向0°(3時方向)に(0,20)を左下にして、色$col3、パス$font1のフォントで$text内容のテキストを書き込む

フォントのパスの通し方が今ひとつ分からない。システムにインストールしているフォントへのパスは通ったが、同一フォルダにあるフォントへのパスが通らない

imagettfbbox

文字列が作るバウンディングボックスの大きさを配列で取得する。文字を右寄せ左寄せでそろえたい時に利用?

imagettfbbox(文字のポイントサイズ,角度,フォントパス,文字列)

戻り値の配列の[0]から[7]の中身は「左下角のx座標y座標」「右下の〃」「右上〃」「左上の〃」になる

使用例:
$aryTxt=imagettfbbox(20,0,$font1,”大きさは?”);
//
$aryTxtの内容は[]

 

画像の表示

方法1

ファイル自体をpngやjpegのような画像と宣言して、ブラウザに出力する

方法2

画像リソースに名前を付けてpngやjpegファイルとして保存して、それをhtmlの<img>タグで引用する

画像の操作

画像の伸縮

imagecopyresampled

画像を高品質に拡縮する

使用例
予め$img1(before)$img2(after)をimagecreatetruecolorで作成しておく。
imagecopyresampled($img2,$img1,0,0,100,100,10,10,50,50);//$img1の(100,100)から50幅50高の範囲を$img2の(0,0)から幅10高さ10へとに縮小(拡大)する。

指定が「画像の高さ、幅」であるのと、タテヨコ比が変わらないように注意。

タイトルとURLをコピーしました