目次(クリックでジャンプ)
準備
画像作成
画像リソース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へとに縮小(拡大)する。
指定が「画像の高さ、幅」であるのと、タテヨコ比が変わらないように注意。