>  기사  >  백엔드 개발  >  PHP 이미지 워터마크 클래스, PHP에 중국어 워터마크 코드 추가

PHP 이미지 워터마크 클래스, PHP에 중국어 워터마크 코드 추가

WBOY
WBOY원래의
2016-07-25 08:51:48869검색
  1. Header("Content-type: image/png") /*이미지가 출력됨을 브라우저에 알립니다*/
  2. $ im = imagecreate(400, 300); /*이미지 크기 정의*/
  3. $gray = ImageColorAllocate($im, 235, 235, 235)
  4. $pink = ImageColorAllocate($im , 255, 128, 255);
  5. $fontfile = "simkai.ttf"
  6. /* $fontfile 글꼴 경로는 운영 체제에 따라 simhei.ttf(흑체), SIMKAI.TTF( italic), SIMFANG.TTF(송나라 모방), SIMSUN.TTC(송나라 및 신송나라) 및 GD에서 지원하는 기타 중국어 글꼴*/
  7. $str = iconv('GB2312','UTF-8', '중국어 워터마크'); /*gb2312 문자 세트를 UTF-8 문자로 변환*/
  8. ImageTTFText($im, 30, 0, 100, 200, $pink, $fontfile, $str); /* 중국어 워터마크 추가*/
  9. Imagepng($im)
  10. ImageDestroy($im)
  11. ?>
코드 복사
예제 2, PHP 이미지 워터마크 코드.

  1. // *********************** ***************** //
  2. // 기능: 이미지에 텍스트 추가
  3. // 매개변수: $img 이미지 파일 이름
  4. // $new_img 이미지 파일 이름으로 저장, 비어 있으면 이미지를 저장하지 않는다는 의미
  5. // $text string content
  6. // text_size 문자열 크기
  7. // text_angle 글꼴 문자열 출력 각도
  8. // text_x 문자열 출력 x 좌표
  9. // text_y 문자열 출력 y 좌표
  10. // $text_font 글꼴 파일 이름
  11. // $r, $g, $b 문자열 색상 RGB 값
  12. // *** *********************************** //
  13. 함수 img_text($img, $new_img , $ text, $text_size, $text_angle, $text_x, $text_y, $text_font, $r, $g, $b){
  14. $text=iconv("gb2312","UTF-8",$text) ; 🎜>Header("콘텐츠 유형: image/gif");
  15. $im = @imagecreatefromstring(file_get_contents($img)) 또는 die("이미지를 열지 못했습니다!")
  16. $color = ImageColorAllocate( $im, $r,$g,$b);
  17. //ImageTTFText(int im, int size, int angle, int x, int y, int col, 문자열 글꼴 파일, 문자열 텍스트):
  18. / / 이 기능은 TTF(TrueType Fonts) 글꼴 텍스트를 이미지에 씁니다.
  19. //매개변수: size는 글꼴의 크기입니다.
  20. // angle은 글꼴의 각도로, 시계 방향으로 계산됩니다. 0도는 가로(왼쪽에서 오른쪽으로), 90도는 아래쪽에서 텍스트입니다. top ;
  21. // 두 매개변수 x와 y는 텍스트의 좌표 값입니다(원점은 왼쪽 상단입니다).
  22. // col은 텍스트의 색상입니다. Fontfile은 글꼴 파일의 이름입니다.
  23. / /text는 문자열 내용입니다.
  24. ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text)
  25. if ($new_img==""):
  26. ImageGif($im ); // 이미지를 저장하지 않고 표시만 합니다.
  27. ImageGif($im,$new_img) // 이미지를 저장하지만 표시하지 않습니다.
  28. ImageDestroy( $im); / /그래픽 종료, 메모리 공간 해제
  29. ?>
  30. 코드 복사
  31. 예제 3, PHP 이미지 워터마크는 PHP 텍스트 워터마크 효과를 지원합니다.

    1. /*
    2. * 기능: PHP 이미지 워터마크(워터마크는 이미지 또는 텍스트를 지원함)
    3. * 매개변수:
    4. * $groundImage 배경 이미지, 즉 워터마크가 필요한 이미지는 현재 GIF, JPG 및 PNG 형식만 지원합니다.
    5. * $waterPos 워터마크 위치는 10가지 상태이며 0은 임의 위치입니다. * 1은 왼쪽 상단, 2는 상단이 중앙, 3은 상단이 오른쪽을 의미합니다.
    6. * 4는 왼쪽 중앙, 5는 중앙, 6은 중앙입니다. right;
    7. * 7은 왼쪽 하단, 8은 하단 중앙, 9는 하단이 오른쪽입니다.
    8. * $waterImage 이미지 워터마크, 즉 다음과 같이 사용되는 이미지입니다. 워터마크는 현재 GIF, JPG 및 PNG 형식만 지원합니다.
    9. * $waterText 텍스트 워터마크, 즉 텍스트는 워터마크로 사용되며, ASCII 코드를 지원하고, 중국어를 지원하지 않습니다.
    10. * $textFont 텍스트 크기. , 값은 1, 2, 3, 4 또는 5, 기본값은 5입니다.
    11. * $textColor 텍스트 색상, 값은 16진수 색상 값, 기본값은 #FF0000(빨간색)입니다. GD 2.0 지원, FreeType 지원, GIF 읽기, GIF 생성, JPG, PNG
    12. * $waterImage와 $waterText를 동시에 사용하지 않는 것이 가장 좋습니다. 예, $waterImage를 먼저 사용합니다.
    13. * $waterImage가 유효하면 $waterString, $stringFont 및 $stringColor 매개변수가 적용되지 않습니다.
    14. * 워터마크가 적용된 이미지의 파일명은 $groundImage와 동일합니다.
    15. * 작성자: longware @ 2004-11-3 14:15:13
    16. */
    17. 함수 imageWaterMark($groundImage,$waterPos=0,$waterImage=””,$waterText=””,$ textFont=5,$textColor=”#FF0000″)
    18. {
    19. $isWaterImage = FALSE;
    20. $formatMsg = “이 파일 형식은 아직 지원되지 않는 이미지 처리 소프트웨어를 사용하여 이미지를 GIF로 변환하세요. 또는 JPG, PNG 형식입니다.”;
    21. //워터마크 파일 읽기
    22. if(!emptyempty($waterImage) && file_exists($waterImage))
    23. {
    24. $isWaterImage =
    25. $water_info = getimagesize($ waterImage );
    26. $water_w = $water_info[0];//워터마크 이미지 너비 가져오기
    27. $water_h = $water_info[1];//워터마크 이미지 높이 가져오기
    28. switch($ water_info[2 ])//워터마크 이미지 형식 가져오기
    29. {
    30. case 1:$water_im = imagecreatefromgif($waterImage);break
    31. case 2:$water_im = imagecreatefromjpeg($waterImage); break;
    32. 사례 3:$water_im = imagecreatefrompng($waterImage);break;
    33. default:die($formatMsg)
    34. }
    35. }//배경 이미지 읽기
    36. if(!emptyempty( $groundImage) && file_exists($groundImage))
    37. {
    38. $ground_info = getimagesize($groundImage)
    39. $ground_w = $ground_info[0];// 배경 이미지
    40. $ground_h = $ground_info[1];//배경 이미지 높이 가져오기
    41. switch($ground_info[2])//배경 이미지 형식 가져오기
    42. {
    43. 사례 1:$ground_im = imagecreatefromgif($groundImage) ;break;
    44. 사례 2:$ground_im = imagecreatefromjpeg($groundImage);break
    45. 사례 3:$ground_im = imagecreatefrompng($groundImage);break; >default:die($formatMsg);
    46. }
    47. }
    48. else
    49. {
    50. die("워터마킹해야 할 사진이 존재하지 않습니다! ”);
    51. //워터마크 위치
    52. if($isWaterImage)//사진 워터마크
    53. {
    54. $w = $water_w
    55. $h = $water_h; >$label = "이미지"
    56. }
    57. else//텍스트 워터마크
    58. {
    59. $temp = imagettfbbox(ceil($textFont*5),0,"./cour.ttf" , $waterText);//트루타입 글꼴을 사용하여 텍스트 범위 가져오기
    60. $w = $temp[2] - $temp[6]
    61. $h = $temp[3] - $temp[7] ;
    62. unset($temp);
    63. $label = "텍스트 영역"
    64. }
    65. if( ($ground_w<$w) || ($ground_h<$h) )
    66. {
    67. echo "워터마크를 적용해야 하는 이미지의 길이나 폭이 ".$label." 워터마크보다 작아서 워터마크를 생성할 수 없습니다! ”;
    68. return;
    69. }
    70. switch($waterPos)
    71. {
    72. case 0://random
    73. $posX = rand(0,($ground_w - $w)) ;
    74. $posY = rand(0,($ground_h - $h));
    75. break
    76. 왼쪽 상단은 1://1입니다
    77. $posY; = 0;
    78. break;
    79. case 2://2는 상단 중앙에 있습니다.
    80. $posX = ($ground_w - $w) / 2
    81. $posY = 0;
    82. 케이스 3://3이 오른쪽 상단
    83. $posX = $ground_w - $w;
    84. $posY = 0
    85. break
    86. 가운데; left
    87. $posX = 0;
    88. $posY = ($ground_h - $h) / 2
    89. break
    90. case 5://5가 중앙에 위치함
    91. $posX = ($ground_w - $w) / 2;
    92. $posY = ($ground_h - $h) / 2
    93. break
    94. case 6://6은 오른쪽 중간
    95. $posX = $ ground_w - $ w;
    96. $posY = ($ground_h - $h) / 2;
    97. break
    98. case 7://7은 왼쪽 하단
    99. $posX = 0; posY = $ground_h - $h;
    100. break;
    101. case 8://8은 하단 중앙에 위치합니다.
    102. $posX = ($ground_w - $w) / 2; $ h;
    103. break;
    104. case 9://9는 오른쪽 하단
    105. $ground_w - $w
    106. $posY = $ground_h -
    107. break; 🎜>default://random
    108. $posX = rand(0,($ground_w - $w))
    109. $posY = rand(0,($ground_h - $h))
    110. break ;
    111. }
    112. //이미지의 색상 혼합 모드 설정
    113. imagealphablending($ground_im, true)
    114. if($isWaterImage)//이미지 워터마크
    115. {
    116. imagecopy($ ground_im , $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//워터마크를 대상 파일에 복사
    117. }
    118. else//텍스트 워터마크
    119. {
    120. if( !emptyempty($textColor) && (strlen($textColor)==7) )
    121. {
    122. $R = hexdec(substr($textColor,1,2))
    123. $G = hexdec(substr ( $textColor,3,2));
    124. $B = hexdec(substr($textColor,5));
    125. }
    126. else
    127. {
    128. die("워터마크 텍스트 색상 형식 정확하지 않습니다!");
    129. }
    130. imagestring( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
    131. }
    132. //生成水印后의 사진
    133. @unlink($groundImage);
    134. switch($ground_info[2])//取得背景图文字格式
    135. {
    136. case 1:imagegif($ground_im,$groundImage);break;
    137. 사례 2:imagejpeg($ground_im,$groundImage);break;
    138. 사례 3:imagepng($ground_im,$groundImage);break;
    139. 기본값:die($errorMsg);
    140. }
    141. //释放内存
    142. if(isset($water_info)) unset($water_info);
    143. if(isset($water_im)) imagedestroy($water_im);
    144. 설정 해제($ground_info);
    145. imagedestroy($ground_im);
    146. }
    147. //————————————————————————————
    148. $id=$_REQUEST['id' ];
    149. $num = count($_FILES['userfile']['name']);
    150. print_r($_FILES['userfile']);
    151. print_r($_FILES['사용자 파일']['이름']);
    152. 에코 $num;
    153. 에코 “
      ”;
    154. if(isset($id)){
    155. for($i=0;$i<$id;$i ){
    156. if(isset($_FILES) && !emptyempty($_FILES[' userfile']) && $_FILES['userfile']['size']>0)
    157. {
    158. $uploadfile = “./”.time().”_”.$_FILES['userfile' ][이름][$i];
    159. 에코 “
      ”;
    160. echo $uploadfile;
    161. if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))
    162. {
    163. echo “확인
      ”; $waterImage=”logo_ok1.gif”;//WaterMark($uploadfile,9,$waterImage)
    164. echo “";
    165. }
    166. else
    167. {
    168. echo “실패
      ”;
    169. }
    170. }
    171. }
    172. }
    173. ?>
    174. for($a=0;$a<$id;$a ){
    175. echo “文件: <입력 이름=”userfile[]” type=”file”> ;
      ”;
    176. }
    177. ?>
    178. <입력 유형=”제출” 값=”上传”>
    179. 复代码
    180. 코드 4 중국어 워터마크 추가

      1. /*-----
      2. **설명: 지정된 이미지에 하단 워터마크를 추가하는 데 사용됩니다( 이미지 표시 영역을 차지하지 않음) 개체를 생성하고
      3. 을 호출해야 합니다.
      4. **생성일: 2007-10-09
      5. **업데이트일: 2007-10-09
      6. **참고: 1. 필수 gd 라이브러리 지원, iconv 지원 필요(php5에 이미 포함되어 있어 로드할 필요 없음)
      7. 2. jpg/jpeg/gif/png 세 가지 유형의 이미지에만 적합하며 다른 유형은 처리되지 않습니다.
      8. 3. 이미지가 있는 디렉터리의 속성은 쓰기 가능해야 합니다.
      9. 4. 호출 예:
      10. $objImg = new MyWaterDownChina()
      11. $objImg->Path = "images/ ";
      12. $objImg->FileName = "1.jpg";
      13. $objImg->Text = "HAHAKONGJIANHTTP://HI.BAIDU.COM/LYSONCN";
      14. $objImg-> Font = "./font/simhei.ttf";
      15. $objImg-> ;Run()
      16. **멤버 함수:
      17. ---------------* /
      18. class MyWaterDownChina{
      19. var $Path = "./"; //이 클래스를 호출하는 페이지를 기준으로 그림이 있는 디렉터리의 상대 경로
      20. var $FileName = ""; //그림 이름(예: "1.jpg")
      21. var $Text = ""; //Picture 추가할 워터마크 텍스트는 중국어를 지원합니다.
      22. var $TextColor = "#ffffff" // 텍스트 색상, gif 사진의 경우 글꼴 색상은 검정색만 가능합니다.
      23. var $TextBgColor = "#000000" / /텍스트 배경 표시줄 색상
      24. var $Font = "c:// windows//fonts//simhei.ttf"; //글꼴 저장 디렉터리, 상대 경로
      25. var $OverFlag = true; // 원본 이미지를 덮어쓸지 여부, 기본값은 덮어쓰기입니다. 덮어쓰지 않을 경우 "_water_down "는 원본 이미지 파일 이름 뒤에 자동으로 추가됩니다. 예: "1.jpg" => "1_water_down.jpg" var $BaseWidth = 200; //그림 워터마크 앞의 너비는 최소한 >=200이어야 합니다. 텍스트가 추가됩니다.
      26. //-------------
      27. //함수: 클래스 생성자(php5.0 이상)
      28. //매개변수: 없음
      29. / /반환: 없음
      30. function __construct(){;}
      31. //------------
      32. //함수: 클래스 소멸자(양식 php5.0 이상)
      33. //매개변수: 없음
      34. //반환: 없음
      35. 함수 __destruct(){;}
      36. //------ -------- --------
      37. //함수: 객체에 함수를 실행하고 이미지에 워터마크를 추가합니다
      38. //매개변수: 없음
      39. //반환: 없음
      40. function Run()
      41. {
      42. if($this->FileName == "" || $this->Text == "")
      43. return
      44. //GD 라이브러리 설치 여부 확인
      45. if(false == function_exists("gd_info"))
      46. {
      47. echo "GD 라이브러리가 시스템에 설치되어 있지 않아 이미지에 워터마크를 추가할 수 없습니다."
      48. return; >}
      49. //입력 및 출력 이미지 경로 이름 설정
      50. $arr_in_name =explore(".",$this->FileName)
      51. //
      52. $inImg = $this-> ;Path.$ this->FileName
      53. $outImg = $inImg;
      54. $tmpImg = $this->Path.$arr_in_name[0]."_tmp.".$arr_in_name[1]; /일시적으로 처리된 사진, 매우 중요
      55. if(!$this->OverFlag)
      56. $outImg = $this->Path.$arr_in_name[0]."_water_down.".$arr_in_name[1];
      57. //이미지 존재 여부 확인
      58. if(!file_exists($inImg))
      59. return
      60. //이미지 속성 가져오기
      61. $groundImageType = @getimagesize($inImg) ;
      62. $imgWidth = $groundImageType[0];
      63. $imgHeight = $groundImageType[1]
      64. $imgType = $groundImageType[2]
      65. if($imgWidth < $this-> ;BaseWidth) //기본 너비 미만, 처리되지 않음
      66. return
      67. //사진이 jpg/jpeg/gif/png가 아닌 경우 처리되지 않음
      68. switch($imgType)
      69. {
      70. 사례 1:
      71. $ image = imagecreatefromgif($inImg);
      72. $this->TextBgColor = "#ffffff"; //gif 이미지의 글꼴은 검정색만 가능하므로 배경색은 흰색으로 설정
      73. break;
      74. 사례 2:
      75. $image = imagecreatefromjpeg($inImg);
      76. break;
      77. 사례 3:
      78. $image = imagecreatefrompng($inImg); 🎜>break;
      79. 기본값:
      80. return
      81. break
      82. }
      83. //색상 생성
      84. $color = @imagecolorallocate($image,hexdec(substr($this->) ;TextColor,1,2)),hexdec(substr( $this->TextColor,3,2)),hexdec(substr($this->TextColor,5,2))) //텍스트 색상
      85. //높이가 다음인 빈 이미지 생성
      86. $newHeight = $imgHeight 20;
      87. $objTmpImg = @imagecreatetruecolor($imgWidth,$newHeight)
      88. $colorBg = @imagecolorallocate($objTmpImg,hexdec(substr($this->TextBgColor,1,2)),hexdec(substr($this->TextBgColor,3,2)),hexdec(substr($this->TextBgColor ,5,2))); //배경색
      89. //이미지의 배경색 채우기
      90. @imagefill ($objTmpImg,0,0,$colorBg)//원본 이미지 복사 임시 이미지로
      91. @imagecopy($objTmpImg,$image, 0,0,0,0,$imgWidth,$imgHeight)
      92. //작성할 워터마크 텍스트 개체 생성
      93. $objText = $this->createText($this->Text);//작성할 워터마크 텍스트의 위치 계산
      94. $x = 5
      95. $y = $newHeight-5; 🎜>//텍스트 워터마크 쓰기
      96. @imagettftext($objTmpImg, 10,0,$x,$y,$color,$this->Font,$objText)
      97. //새 사진 생성, 임시 사진
      98. switch($imgType)
      99. {
      100. 사례 1:
      101. imagegif($objTmpImg,$tmpImg)
      102. break;
      103. 사례 2:
      104. imagejpeg($objTmpImg ,$tmpImg);
      105. break;
      106. imagepng($objTmpImg,$tmpImg);
      107. default:
      108. return; >}
      109. //리소스 해제
      110. @imagedestroy($ objTmpImg)
      111. @imagedestroy($image)
      112. //파일 이름 바꾸기
      113. if($this->OverFlag)
      114. {
      115. //원본 이미지 덮어쓰기
      116. @unlink ($inImg)
      117. @rename($tmpImg,$outImg)
      118. else
      119. {
      120. //원본 이미지를 덮어쓰지 마세요
      121. @rename($tmpImg,$outImg )
      122. }
      123. }
      124. //---------
      125. //Function : 워터마크 텍스트 객체 생성
      126. //매개변수: 없음
      127. //Return : 워터마크 텍스트 객체 생성
      128. function createText($instring)
      129. {
      130. $outstring=""
      131. $ max=strlen($instring);
      132. for($i=0; $i<$max;$i )
      133. {
      134. $h=ord($instring[$i])
      135. if($h>=160 && $i<$max-1)
      136. {
      137. $outstring .= "&#".base_convert(bin2hex(iconv("gb2312","ucs-2",substr( $instring,$i,2)),16,10)."; "
      138. $i ;
      139. }
      140. else
      141. {
      142. $outstring .= $instring[$i ];
      143. }
      144. }
      145. return $outstring;
      146. }
      147. }//class
      148. ?>
      149. 코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.