[PHP]GDを使ってグラデーション画像をつくる

Pocket

PHP の GD を使ってグラデーションを描画するサンプルです。

256階調を最大とし、開始色と終了色のミックス量を決めて混色するシンプルな仕組みです。
太さ 1px の線状にグラデーションを作り、 imagecopyresampled() を使って引き伸ばすことで高速化を図っています。

<?php
//キャンバスサイズ
$width   = 300;
$height  = 200;
 
//開始色
$start_r = 255;
$start_g = 255;
$start_b = 0;
 
//終了色
$end_r = 0;
$end_g = 255;
$end_b = 255;

//方向("vertical" 又は "horizontal")
$direction = "vertical";

$image = imagecreatetruecolor($width, $height);

if($direction === "horizontal"){
	$grad_w = 256;
	$grad_h = 1;
} else if($direction === "vertical"){
	$grad_w = 1;
	$grad_h = 256;
}
$gradient = imagecreatetruecolor( $grad_w, $grad_h);	
	
for($i=0;$i<=255;$i++){

	$mix = $i / 255;

	$current_r = $start_r * (1 - $mix) + $end_r * $mix;
	$current_g = $start_g * (1 - $mix) + $end_g * $mix;
	$current_b = $start_b * (1 - $mix) + $end_b * $mix;

	$color = imagecolorallocate($gradient, $current_r, $current_g, $current_b);

	if($direction === "horizontal"){
		imagesetpixel($gradient, $i, 0, $color);
	} else if($direction === "vertical"){
		imagesetpixel($gradient, 0, $i, $color);
	}
}

imagecopyresampled($image, $gradient, 0, 0, 0, 0, $width, $height, $grad_w, $grad_h);

header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
imagedestroy($gradient);

grad_h
水平方向

grad_v
垂直方向

グラデーションの開始と終了を RGB 値(それぞれ0~255)で指定します。
グラデーションの方向は垂直(vertical)と水平(horizontal)が選べます。


Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です