워터마크 출력
페이지 정보
작성자 MintState 댓글 0건 조회 12,178회 작성일 08-11-03 11:32본문
워터마크 출력
폰트를 이용한 글자 입히기
이미지 입히기
폰트를 이용한 글자 입히기
01 | <? |
02 | $font_size = 100; // 글자 크기 |
03 | $opacity = 10; // 투명도 높을수록 불투명 |
04 | $font_path = "arial.ttf" ; //폰트 패스 |
05 | $string = "waterMark" ; // 찍을 워터마크 |
06 |
07 | $image = "11.jpg" ; //이미지 |
08 |
09 | $image_name = explode ( "." , $image ); |
10 | $image_targ = $image_name [0]. "_marked.jpg" ; // 워터마크가 찍혀 저장될 이미지 |
11 |
12 | $image_org = $image ; // 원본 이미지를 다른 이름으로 저장 |
13 | $image = imagecreatefromjpeg( $image ); // JPG 이미지를 읽고 |
14 |
15 | $w = imagesx( $image ); |
16 | $h = imagesy( $image ); |
17 |
18 | $text_color = imagecolorallocate( $image ,100,100,100); // 텍스트 컬러 지정 |
19 |
20 | // 적당히 워터마크가 붙을 위치를 지정 |
21 | $text_pos_x = $font_size ; |
22 | $text_pos_y = $h - $font_size ; |
23 |
24 | imagettftext( $image , $font_size , 0, $text_pos_x , $text_pos_y , $text_color , $font_path , $string ); // 읽은 이미지에 워터마크를 찍고 |
25 | |
26 | $image_org = imagecreatefromjpeg( $image_org ); // 원본 이미지를 다시한번 읽고 |
27 | |
28 | imagecopymerge( $image , $image_org ,0,0,0,0, $w , $h , $opacity ); // 원본과 워터마크를 찍은 이미지를 적당한 투명도로 겹치기 |
29 |
30 | imagejpeg( $image , $image_targ , 90); // 이미지 저장. 해상도는 90 정도 |
31 | |
32 | imagedestroy( $image ); |
33 | imagedestroy( $image_org ); |
34 |
35 | |
36 | echo "<img src=$image_targ>" ; // 워터마크가 찍혀 저장된 이미지 출력 |
37 | ?> |
이미지 입히기
01 | <? |
02 | /****************************************************************************** |
03 | Program: waterMark.php |
04 | Description : 서비스 이미지에 워터마크 적용하기 |
05 | Author : Ryu Jee Hyoung |
06 | CreateDate : 2007.01.18 |
07 | CopyRight : Copyright(c) 청명공자 All Right Reserved. |
08 | UpdateDate : |
09 | Todo : |
10 | 워터마크가 적용되도록 이미지 URL 변경 |
11 | - 사용법 |
12 | > $img_url = http://localhost/images/test.jpg; |
13 | > $img_url = waterMark($img_url); |
14 | > echo $img_url; |
15 | ******************************************************************************/ |
16 | function waterMark( $image , $thumbW =null, $thumbH =null) |
17 | { |
18 | $argTmp = $thumbW . "|" . $thumbH . "|" . $image ; |
19 | $arg = base64_encode ( $argTmp ); |
20 | $arg = urlencode( $arg ); |
21 | $img_info = @ getImageSize ( $image ); |
22 | if ( $img_info [2] == 6) { |
23 | $chgURL = $image ; |
24 | } |
25 | else { |
26 | $chgURL = "http://DOMAIN/imgView.php?image=$arg" ; |
27 | } |
28 |
29 | return $chgURL ; |
30 | } |
31 |
32 | $img_url = 'http://DOMAIN/11.png' ; |
33 | $img_url = waterMark( $img_url ); |
34 | echo "<img src='" . $img_url . "'>" ; |
35 | ?> |
001 | <? |
002 | /****************************************************************************** |
003 | Program: imgView.php |
004 | Description : 서비스 이미지에 워터마크 적용하기 |
005 | Author : Ryu Jee Hyoung |
006 | CreateDate : 2007.01.18 |
007 | CopyRight : Copyright(c) 청명공자 All Right Reserved. |
008 | UpdateDate : |
009 | Todo : |
010 | ******************************************************************************/ |
011 | flush (); |
012 | |
013 | # 특정경로에 워터마크 처리할 이미지가 존재해야 함!! |
014 | # 워터마크 이미지는 필히 JPG 여야 합니다. |
015 | define( "WATERMARK" , "/home/NAME/public_html/12.jpg" ); |
016 | |
017 | header( "Content-type: image/jpeg" ); |
018 | header( "Cache-Control: no-store, no-cache, must-revalidate" ); |
019 | header( "Cache-Control: post-check=0, pre-check=0" , false); |
020 | header( "Pragma: no-cache" ); |
021 | |
022 | $photoTmp = base64_decode ( $image ); |
023 | $photo = $photoTmp ; # waterMarkImage( $arg ) 이런 형식(w,h가 지정이 안된 경우)으로 사용된 것 |
024 | if ( ereg ( "\|" , $photo )) { |
025 | # waterMarkImage( $arg ,100,50) 이런 형식(w,h가 지정된 경우)으로 사용된 것 |
026 | list( $w1 , $h1 , $photo ) = explode ( "|" , $photoTmp , 3); |
027 | $thumb_w1 = $w1 ; |
028 | $thumb_h1 = $h1 ; |
029 | } |
030 | $photo = urldecode( $photo ); # %C24%.... 이런식으로 encode되어 오는 파일오류를 방지 |
031 |
032 | $img_info = getImageSize ( $photo ); |
033 | $photo = ereg_replace ( "%" , "%25" , $photo ); |
034 | $image_url = urldecode( $photo ); |
035 | if (!@ fopen ( $image_url , "r" )) { |
036 | $dst_img = imagecreatefromjpeg(WATERMARK); |
037 | $res = imagejpeg( $dst_img , "" , 100); |
038 | die (); |
039 | } |
040 | $file = pathinfo ( $image_url ); |
041 | if ( $img_info [2] == "1" ) { |
042 | $file [ "extension" ] = "GIF" ; |
043 | } |
044 | else if ( $img_info [2] == "2" ) { |
045 | $file [ "extension" ] = "JPG" ; |
046 | } |
047 | else if ( $img_info [2] == "3" ) { |
048 | $file [ "extension" ] = "PNG" ; |
049 | } |
050 | switch ( strtoupper ( $file [ "extension" ])) { |
051 | case "JPEG" : |
052 | $src_img = imagecreatefromjpeg( $image_url ); |
053 | break ; |
054 | case "JPG" : |
055 | $src_img = imagecreatefromjpeg( $image_url ); |
056 | break ; |
057 | case "GIF" : |
058 | $src_img = imagecreatefromgif( $image_url ); |
059 | break ; |
060 | case "PNG" : |
061 | $src_img = imagecreatefrompng( $image_url ); |
062 | break ; |
063 | } |
064 | $src_w = imagesx( $src_img ); |
065 | $src_h = imagesy( $src_img ); |
066 | $portion = $src_h / $src_w ; |
067 | |
068 | # w, h값이 있으면 thumbnail로 보여주기 |
069 | if (! is_numeric ( $w1 ) || empty ( $w1 )) $w1 = $img_info [0]; |
070 | if (! is_numeric ( $h1 ) || empty ( $h1 )) $h1 = $img_info [1]; |
071 | $dest_w = $w1 ; |
072 | $dest_h = $h1 ; |
073 | $dst_img = imagecreatetruecolor( $dest_w , $dest_h ); |
074 | |
075 | # 배경이미지 흰색으로 채우는 부분 - 투명이미지가 이상하게 보이는 현상을 방지 |
076 | $white = imagecolorallocate( $dst_img ,255,255,255); |
077 | imagefill( $dst_img , 0, 0, $white ); |
078 |
079 | imagecopyresized( $dst_img , $src_img , 0, 0, 0, 0, $dest_w , $dest_h , $src_w , $src_h ); |
080 | imagedestroy( $src_img ); |
081 | flush (); |
082 | $watermark = imagecreatefromjpeg(WATERMARK); |
083 | $watermark_w = imagesx( $watermark ); |
084 | $watermark_h = imagesy( $watermark ); |
085 | $resize_w = $watermark_w ; |
086 | $resize_h = $watermark_h ; |
087 | if ( $dest_w < 100) { |
088 | $resize_w = $watermark_w / 2; |
089 | $resize_h = $watermark_h / 2; |
090 | } |
091 | else if ( $dest_h < 100) { |
092 | $resize_w = $watermark_w / 2; |
093 | $resize_h = $watermark_h / 2; |
094 | } |
095 | $overlay_img = imagecreatetruecolor( $watermark_w , $watermark_h ); |
096 | imagecopyresized( $overlay_img , $watermark , 0, 0, 0, 0, $resize_w , $resize_h , $watermark_w , $watermark_h ); |
097 | imagedestroy( $watermark ); |
098 | $white = imagecolorallocate( $overlay_img , 0xFF, 0xFF, 0xFF); |
099 | $black = imagecolorallocate( $overlay_img , 0x00, 0x00, 0x00); |
100 | imagecolortransparent( $overlay_img , $black ); |
101 | |
102 | # 워터마크 중앙에 배치 |
103 | $offsetX = ( $dest_w - $watermark_w - 3) / 2; |
104 | $offsetY = ( $dest_h - $watermark_h - 3) / 2; |
105 | # 워터마크 좌상단에 배치 |
106 | # $offsetX = 3; |
107 | # $offsetY = 3; |
108 | # 워터마크 우상단에 배치 |
109 | # $offsetX = $dest_w - $watermark_w - 3; |
110 | # $offsetY = $dest_h - $watermark_h - 3; |
111 | |
112 | # w, h값이 있으면 thumbnail로 보여주되 워터마크 적용안함!! |
113 | if ( empty ( $thumb_w1 ) && empty ( $thumb_h1 )) imagecopymerge( $dst_img , $overlay_img , $offsetX , $offsetY ,0,0, $watermark_w , $watermark_h , 30); |
114 | imagedestroy( $overlay_img ); |
115 | $res = imagejpeg( $dst_img , "" , 100); |
116 | imagedestroy( $dst_img ); |
117 | flush (); |
118 | exit ; |
119 | ?> |
|
댓글목록
등록된 댓글이 없습니다.