출처 : phpschool.com
// gd 라이브러리의 특성상 256이상의 색상 표시에 문제 발생.
$temp = explode(".", $fn);
$temp = strtolower($temp[count($temp)-1]); // 이미지 로드
switch ( $temp)
{
case "jpeg" :
case "jpg" : $fi = ImageCreateFromJPEG($fn);
break;
case "gif" : $fi = ImageCreateFromGIF($fn);
break;
case "png" : $fi = ImageCreateFromPNG($fn);
break;
case "bmp" : $fi = ImageCreateFromWBMP($fn);
break;
}
$fi_x = ImageSX($fi);
$fi_y = ImageSY($fi); // 만들어질 이미지의 크기이며 배경이미지의 크기이기도 합니다.
$temp_x = 440;
$temp_y = 340; // 메핑 크기 계산
if ( (440 / 340) < ($fi_x / $fi_y) ) // X 축이 장축인 경우.
{
$temp_y = ($fi_y * 440) / $fi_x;
}
else // Y 축이 장축인 경우.
{
$temp_x = ($fi_x * 340) / $fi_y;
}
// 배경 이미지 로드
$bi = ImageCreateFromJPEG("./img/center.jpg");
ImageCopyResized($bi, $fi, (ImageSX($bi)/2)-($temp_x/2), (ImageSY($bi)/2)-($temp_y/2), 0, 0, $temp_x, $temp_y, // 메핑될 크기
$fi_x, $fi_y // 원본 이미지의 크기
);
// 워터 마크 삽입.
$wm = ImageCreateFromPNG("./img/watermark.png");
//워터 마크 이미지 로드
$temp_x = 440; $temp_y = 340;
$tr = Imagecolorat($wm, 0, 0);
for ( $i = 0; $i <= $temp_x; $i++ )
for ( $j = 0; $j <= $temp_y; $j++ )
if ( $tr != Imagecolorat($wm, $i, $j) )
{
$get_cb = imagecolorsforindex($bi, Imagecolorat($bi, $i, $j) );
// 색보정
if ( $get_cb["red"] > 177) $get_cb["red"] = $get_cb["red"] - 30;
else $get_cb["red"] = $get_cb["red"] + 30;
if ( $get_cb["green"] > 177) $get_cb["green"] = $get_cb["green"] - 30;
else $get_cb["green"] = $get_cb["green"] + 30;
if ( $get_cb["blue"] > 177) $get_cb["blue"] = $get_cb["blue"] - 30;
else $get_cb["blue"] = $get_cb["blue"] + 30;
$wt = Imagecolorresolve($bi, $get_cb["red"], $get_cb["green"], $get_cb["blue"]);
// 픽셀 드로잉
imagesetpixel($bi, $i,$j, $wt); }
// 이미지 생성
Header("Contenr-type: Image/png"); ImagePNG($bi); ImageDestroy($wm); ImageDestroy($bi); ImageDestroy($fi);
?>
테스트 url: http://irchelp.hotlab.net/water



