2009年11月20日金曜日

PHPでグラデーション画像を作成する



PHP GDは、image関数を使って画像のサイズをリサイズする時によく利用します。


サンプルもググルとたくさんあるので使ってる方も多いかと思います。


いろいろな用途に使われているGDですが、意外とグラデーションをかけた画像を


GDで作成してるサンプルが無いことに気がつきまして書いてみました。





というのも、ものぐさな私はPhotoShopとかでいちいち画像を切り抜くのが非常に大嫌いなもので


ちょっとしたデザインの変更で背景のグラデーション部分を再度切り抜き直したりすることが


発生するとキーーーーっとなってしまいます。





そんなおりプロトタイプのときくらいは、動的に画像を生成してもいいでしょ!


っと、ものぐさな考えを実践すべくだらだらサンプルを探していたのですが


ちょうどいいのが見つからずあきらめて書くことにしました。


まぁ、単純にグラデーションを書ける方向にimageLine で色を変えた線を引く!


ということをやっただけです。かなりあっさりした感じでかけます。


つまり、ことさらサンプルあげるほどでもないというのが実状だったのかも。。。




$sc = 'ffffff'; // 開始色
$ec = '6699aa'; // 終了色

$w = 150; // 画像幅
$h = 50; // 画像高さ

$im = imagecreatetruecolor($w, $h);
$bgc = imagecolorallocate($im, 255, 255, 255);

$al = gradDiv($sc, $ec, $h);
$sc = str2hec($sc);

for($i=0; $i<$h; $i++){
$bgc = imagecolorallocate($im
, $sc['R'] + $al['R'] * $i
, $sc['G'] + $al['G'] * $i
, $sc['B'] + $al['B'] * $i );
imageLine($im, 0, $i, $w, $i, $bgc);
}

header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

exit;

function gradDiv($sc, $ec, $l){

$S = str2hec($sc);
$E = str2hec($ec);

return array( 'R'=>($E['R'] - $S['R']) / $l
, 'G'=>($E['G'] - $S['G']) / $l
, 'B'=>($E['B'] - $S['B']) / $l);
}

function str2hec($col){
$R = hexdec(substr($col, 0, 2));
$G = hexdec(substr($col, 2, 2));
$B = hexdec(substr($col, 4, 2));

return array('R'=>$R, 'G'=>$G, 'B'=>$B);
}


上記のPHPで以下のようなグラデーションのかかった画像が表示できます。


f:id:bushimichi:20091120013603p:image


ちょっとした変更にもすぐ対応できるので


プロトタイプ用のサイトを作るときなどに重宝します。





0 件のコメント: