메뉴 건너뛰기

프로그램언어

조회 수 19667 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
<?

/******************************************************************************

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;
?>

List of Articles
번호 제목 날짜 조회 수
300 mysql_free_result(); 관련 오류 2021.03.25 288
299 [PHP기초] 함수와 객체의 비교 2021.03.27 291
298 PHP웹 보안 취약점 TOP5(웹해킹) 2023.01.12 293
297 비교연산자 ( === 에 관해서 ) 2021.03.25 307
296 콜론 연산자 2021.03.26 307
295 PHP Notice: Use of undefined constant ... assumed ... 오류 2021.03.26 307
294 확장자 추출 하기 2021.03.26 309
293 정규표현식 2021.03.26 311
292 PHP와 HTML과 자바스크립트의 관계 2021.03.26 311
291 쿠키 확인 후 만료시 세션 파괴하는 방법 2020.11.23 314
290 문자열 함수 모음 2021.03.26 318
289 특정일의 주차 구하기 2021.07.08 322
288 TIFF, GIF 여러장 변환 file 2021.03.26 323
287 curl을 이용하여 post, get 방식 으로 데이터 전송하기 2023.01.12 331
286 복권 번호 뽑기 2021.03.26 340
285 AJAX로 해당 페이지에서 COOKIE 사용하기 2021.03.26 359
284 php 암호화 복호화 , 간단한 암호화 2023.01.12 359
283 HEREDOC <<< ( PHP에서 echo로 HTML쉽게 표시하기 ) 2021.03.26 371
282 문자,숫자 랜덤 출력 2021.03.26 407
281 php date 날짜 관련 함수 file 2021.03.27 411
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved