2011年10月15日

imagearc関数でまた時間かかってます……


今日からまた、関数を1つずつやっていきます。
基本を理解できたと思うので、ここから先はスムーズに進めるといいなぁ……。


や〜っと画像作成の間違いに気づいて問題が解決し、
画像関数の章を本当の意味でスタートできる〜と意気込んでたんですが、
ちょっと時間かかってます(^^;)

imagearc は円弧(部分楕円)を描ける関数で、基本形はこんな感じです↓
imagearc(画像, 中心のX座標, 中心のY座標, 幅, 高さ, 始点角度, 終点角度, 色)

X座標とY座標で円弧の中心を指定します。
幅・高さの単位はピクセルです。

角度は0度が3時の位置となり、本によると反時計回り、
公式マニュアルのページによると時計回りに進んでいくそうです。
どっちがホント……?

200×200の真っ黒い画像を使って、
最初に試したのはこちらのコードです↓

<?php
header("Content-Type: image/png");

//画像を読み込む
$image = imagecreatefrompng("black.png");

//色を作成する
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);

//円を描く
imagearc($image, 30, 30, 20, 20, 0, 360, $white);

//円の外を塗りつぶす
imagefilltoborder($image, 0, 0, $white, $red);

//赤を透明にする
imagecolortransparent($image, $red);

//画像をブラウザに出力する
imagepng($image);

?>

imagecreatefrompng はファイルから画像を読み込む関数です。
imagecolorallocate は画像に色を割り当てる関数です。
imagefilltoborder は指定した色で塗りつぶす関数です。
imagecolortransparent は指定した色を透明にする関数です。

後にそれぞれをもっと詳しくやっていきます♪

結果なんですが、黒い小っちゃい●が出てきました……。
適当にやってみたんだけど、思ってたのとちょっと違う(-_-)

次に本のサンプルコードに沿って少し修整してみました↓

<?php
header("Content-Type: image/png");

//画像を読み込む
$image = imagecreatefrompng("black.png");

//色を作成する
$magenta = imagecolorallocate($image, 255, 0, 255);

//円を描く
imagearc($image, 30, 30, 20, 20, 0, 360, $magenta);

//円の外を塗りつぶす
imagefilltoborder($image, 0, 0, $magenta, $magenta);

//透明にする
imagecolortransparent($image, $magenta);

//画像をブラウザに出力する
imagepng($image);

?>

でも変な●は変わらず……。
試しにheader の行を imagepng の直前に移動してみたけど、ダメでした(>_<)

次はシンプルにしようと思って、円の外部の塗りつぶしとか透明にするのを取り除く
などの修整をしてみました↓

<?php
//画像を読み込む
$image = imagecreatefrompng("black.png");

//色を作成する
$red = imagecolorallocate($image, 255, 0, 0);

//円を描く
imagearc($image, 100, 100, 150, 150, 0, 360, $red);

header("Content-Type: image/png");
//画像をブラウザに出力する
imagepng($image);

?>

そうしたらできました!黒をバックに、○を描く赤い線が。

ってことは、imagefilltoborder か imagecolortransparent がおかしいってことで……
っていうか、理解できてないってことで……(^^;)

そして気づいたのが imagecolortransparent の「透明」の意味です。
見えなくなっちゃうってことだったんだ……
色が透けたように薄まるのかと思ってたんです、アホですね。

だからややこしいから、1つ目に試したコードも
imagecolortransparent の行を取ってみました↓

<?php
header("Content-Type: image/png");

//画像を読み込む
$image = imagecreatefrompng("black.png");

//色を作成する
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);

//円を描く
imagearc($image, 30, 30, 20, 20, 0, 360, $white);

//円の外を塗りつぶす
imagefilltoborder($image, 0, 0, $white, $red);

//画像をブラウザに出力する
imagepng($image);

?>

そしたら赤いバックに白い縁取りの●が左上にある画像が表示されました。
つまり黒い画像に白い線で円が描かれ、白い境界線の外を赤で塗りつぶした、
ってことになるのかな……?

ついでに2つ目のコードもimagecolortransparent の行を取ってみました↓

<?php
header("Content-Type: image/png");

//画像を読み込む
$image = imagecreatefrompng("black.png");

//色を作成する
$magenta = imagecolorallocate($image, 255, 0, 255);

//円を描く
imagearc($image, 30, 30, 20, 20, 0, 360, $magenta);

//円の外を塗りつぶす
imagefilltoborder($image, 0, 0, $magenta, $magenta);

//画像をブラウザに出力する
imagepng($image);

?>

表示されたのは、バックが紫色で左上に●という画像。
境界線も塗りつぶしカラーも全部同じ色が指定されてるから2色だけなんですね。
まず黒い画像に紫のラインで円が描かれて、その外も紫で塗りつぶされた、
ってことなんでしょうね。

また少し時間かかったけど、これは納得できました(^^)


<ご紹介>----------------------------------------------------------------------------------------

gamification.jpg

ゲーミフィケーション辞典48 19,800円

----------------------------------------------------------------------------------------<ご紹介>



こちらのページも参考にさせていただきました↓

PHP: imagearc - Manual

ありがとうございました<(_ _)>


imagearc関数の理解を深めるために、もう少し挑戦してみました↓
imagearc関数はわりと簡単なんだけど……

imagearc関数の例はこちらにもあります↓
imagecolorallocate関数を学びながら imagefill関数も予習
imagefilltoborder関数の疑問点を解消中
imagepng関数は挑戦というより復習です

関連する関数はこちらです↓
多角形を描ける imagepolygon関数は楽しい♪
imagerectangle関数と imagefilledrectangle関数を組み合わせてみる
imagefilledrectangle関数は知ってます♪
初めての…… imagefilledpolygon関数
imagecreatefrompng関数はもう何度使ったかなぁ
imagecolorallocate関数を学びながら imagefill関数も予習
header関数
imagepng関数は挑戦というより復習です



posted by れい at 16:42| Comment(0) | 画像関数 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。