# ITC/# Tips of How to
php 이미지 워터마크
ilus
2006. 8. 9. 14:53
출처 : 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