본문
이미지 워터마크 구현
<?
/******************************************************************************
Program: waterMark.php
Description : 서비스 이미지에 워터마크 적용하기
Author : Ryu Jee Hyoung
CreateDate : 2007.01.18
CopyRight : Copyright(c) 청명공자 All Right Reserved.
UpdateDate :
Todo :
워터마크가 적용되도록 이미지 URL 변경
- 사용법
> $img_url = http://localhost/images/test.jpg;
> $img_url = waterMark($img_url);
> echo $img_url;
******************************************************************************/
function waterMark($image,$thumbW=null,$thumbH=null)
{
$argTmp = $thumbW."|".$thumbH."|".$image;
$arg = base64_encode($argTmp);
$arg = urlencode($arg);
$img_info = @getImageSize($image);
if($img_info[2] == 6) {
$chgURL = $image;
}
else {
$chgURL = "http://localhost/imgView.php?image=$arg";
}
return $chgURL;
}
$img_url = http://localhost/images/test.jpg;
$img_url = waterMark($img_url);
echo $img_url;
?>
<?
/******************************************************************************
Program: imgView.php
Description : 서비스 이미지에 워터마크 적용하기
Author : Ryu Jee Hyoung
CreateDate : 2007.01.18
CopyRight : Copyright(c) 청명공자 All Right Reserved.
UpdateDate :
Todo :
******************************************************************************/
flush();
# 특정경로에 워터마크 처리할 이미지가 존재해야 함!!
# 워터마크 이미지는 필히 JPG 여야 합니다.
define("WATERMARK", "/home/httpd/html/images/watermark.jpg");
header("Content-type: image/jpeg");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$photoTmp = base64_decode($image);
$photo = $photoTmp; # waterMarkImage($arg) 이런 형식(w,h가 지정이 안된 경우)으로 사용된 것
if (ereg("|",$photo)) {
# waterMarkImage($arg,100,50) 이런 형식(w,h가 지정된 경우)으로 사용된 것
list($w1,$h1,$photo) = explode("|", $photoTmp, 3);
$thumb_w1 = $w1;
$thumb_h1 = $h1;
}
$photo = urldecode($photo); # %C24%.... 이런식으로 encode되어 오는 파일오류를 방지
$img_info = getImageSize($photo);
$photo = ereg_replace("%","%25",$photo);
$image_url = urldecode($photo);
if (!@fopen($image_url, "r")) {
$dst_img = imagecreatefromjpeg(WATERMARK);
$res = imagejpeg($dst_img, "", 100);
die();
}
$file = pathinfo($image_url);
if ($img_info[2] == "1") {
$file["extension"] = "GIF";
}
else if ($img_info[2] == "2") {
$file["extension"] = "JPG";
}
else if ($img_info[2] == "3") {
$file["extension"] = "PNG";
}
switch(strtoupper($file["extension"])) {
case "JPEG":
$src_img = imagecreatefromjpeg($image_url);
break;
case "JPG":
$src_img = imagecreatefromjpeg($image_url);
break;
case "GIF":
$src_img = imagecreatefromgif($image_url);
break;
case "PNG":
$src_img = imagecreatefrompng($image_url);
break;
}
$src_w = imagesx($src_img);
$src_h = imagesy($src_img);
$portion = $src_h / $src_w;
# w, h값이 있으면 thumbnail로 보여주기
if(!is_numeric($w1) || empty($w1)) $w1 = $img_info[0];
if(!is_numeric($h1) || empty($h1)) $h1 = $img_info[1];
$dest_w = $w1;
$dest_h = $h1;
$dst_img = imagecreatetruecolor($dest_w, $dest_h);
# 배경이미지 흰색으로 채우는 부분 - 투명이미지가 이상하게 보이는 현상을 방지
$white = imagecolorallocate($dst_img,255,255,255);
imagefill($dst_img, 0, 0, $white);
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $dest_w, $dest_h, $src_w, $src_h);
imagedestroy($src_img);
flush();
$watermark = imagecreatefromjpeg(WATERMARK);
$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);
$resize_w = $watermark_w;
$resize_h = $watermark_h;
if ($dest_w < 100) {
$resize_w = $watermark_w / 2;
$resize_h = $watermark_h / 2;
}
else if ($dest_h < 100) {
$resize_w = $watermark_w / 2;
$resize_h = $watermark_h / 2;
}
$overlay_img = imagecreatetruecolor($watermark_w, $watermark_h);
imagecopyresized($overlay_img, $watermark, 0, 0, 0, 0, $resize_w, $resize_h, $watermark_w, $watermark_h);
imagedestroy($watermark);
$white = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($overlay_img, 0x00, 0x00, 0x00);
imagecolortransparent($overlay_img, $black);
# 워터마크 중앙에 배치
$offsetX = ($dest_w - $watermark_w - 3) / 2;
$offsetY = ($dest_h - $watermark_h - 3) / 2;
# 워터마크 좌상단에 배치
# $offsetX = 3;
# $offsetY = 3;
# 워터마크 우상단에 배치
# $offsetX = $dest_w - $watermark_w - 3;
# $offsetY = $dest_h - $watermark_h - 3;
# w, h값이 있으면 thumbnail로 보여주되 워터마크 적용안함!!
if (empty($thumb_w1) && empty($thumb_h1)) imagecopymerge($dst_img,$overlay_img,$offsetX,$offsetY,0,0,$watermark_w,$watermark_h, 30);
imagedestroy($overlay_img);
$res = imagejpeg($dst_img, "", 100);
imagedestroy($dst_img);
flush();
exit;
?>
관련링크
- http://cafe.naver.com/q69/82556 1068회 연결
댓글목록
등록된 댓글이 없습니다.