>  기사  >  백엔드 개발  >  PHP는 사진에 워터마크를 추가하고 썸네일을 생성합니다.

PHP는 사진에 워터마크를 추가하고 썸네일을 생성합니다.

WBOY
WBOY원래의
2016-07-25 08:42:31826검색
1 사진에 워터마크 추가
2 새로운 썸네일 이미지 생성
  1. class Image{
  2. //워터마크 구성 항목
  3. private $waterOn;
  4. private $ waterImg;
  5. 비공개 $waterPos;
  6. 비공개 $waterPct;
  7. 비공개 $waterText;
  8. 비공개 $waterFont;
  9. 비공개 $waterTextSize;
  10. 비공개 $waterTextColor;
  11. 비공개 $qua ;
  12. //썸네일 구성 항목
  13. private $thumbWidth;
  14. private $thumbHeight;
  15. private $thumbType;
  16. private $thumbEndfix;
  17. //생성자
  18. 공용 함수 __construct(){
  19. $this->waterOn=C("WATER_ON");
  20. $this->waterImg=C("WATER_IMG");
  21. $this->waterPos=C( "WATER_POS") ;
  22. $this->waterPct=C("WATER_PCT");
  23. $this->waterText=C("WATER_TEXT");
  24. $this->waterFont=C("WATER_FONT" );
  25. $this->waterTextSize=C("WATER_TEXT_SIZE");
  26. $this->waterTextColor=C("WATER_TEXT_COLOR");
  27. $this->qua= C("WATER_QUA ");
  28. //이미지 축소
  29. $this->thumbWidth=C("THUMB_WIDTH");
  30. $this->thumbHeight=C("THUMB_HEIGHT");
  31. $this- >thumbType=C("THUMB_TYPE");
  32. $this->thumbEndFix=C("THUMB_ENDFIX");
  33. }
  34. /*
  35. *사진이 합법적인지 확인하세요
  36. */
  37. 비공개 함수 검사($img){
  38. return is_file($img)&&getimagesize($img)&&extension_loaded("gd");
  39. }
  40. /*
  41. * 이미지 축소
  42. *@param string $img 원본 이미지
  43. *@param string $outFile 축소 후 저장되는 이미지
  44. *@param int $thumbWidth 축소된 이미지 너비
  45. *@param int $ ThumbHeight 썸네일 높이
  46. * @param int $thumbType 썸네일 처리를 수행하는 방법
  47. */
  48. 공개 함수 Thumb($img,$outFile="",$thumbWidth="",$thumbHeight ="",$thumbType="") {
  49. if(!$this->check($img)){
  50. return false;
  51. }
  52. //썸네일 이미지 처리 방법
  53. $thumbType=$thumbType?$thumbType: $this->thumbType;
  54. //이미지 너비 조정
  55. $thumbWidth=$thumbWidth?$thumbWidth:$this->thumbWidth
  56. / /이미지 높이 조정
  57. $thumbHeight=$thumbHeight ?$thumbHeight:$this->thumbHeight;
  58. //원본 이미지 정보 가져오기
  59. $imgInfo=getimagesize($img);
  60. // 원본 이미지 너비
  61. $imgWidth=$imgInfo[0 ];
  62. //원본 이미지 높이
  63. $imgHeight=$imgInfo[1];
  64. //원본 이미지 유형 가져오기
  65. $imgtype= image_type_to_extension($imgInfo[2]);
  66. / /다양한 썸네일 처리 방법에 따라 크기(원본 이미지와 썸네일의 해당 크기)를 구합니다.
  67. $thumb_size=$this->thumbsize($imgWidth, $imgHeight,$thumbWidth,$thumbHeight,$thumbType );
  68. //원본 이미지 생성
  69. $func="imagecreatefrom".substr($imgtype,1);//변수 함수
  70. $resImg=$ func($img);
  71. // 썸네일 이미지 캔버스 만들기
  72. if($imgtype==".gif"){
  73. $res_thumb=imagecreate($thumb_size[2],$thumb_size[3] );
  74. }else{
  75. $res_thumb=imagecreatetruecolor($thumb_size[2],$thumb_size[3]);
  76. }
  77. imagecopyreized($res_thumb,$resImg,0,0,0, 0,$thumb_size[2],$thumb_size[ 3],$thumb_size[0],$thumb_size[1]);
  78. $fileInfo=pathinfo($img);//파일 정보
  79. $outFile=$ outFile?$outFile:$fileInfo['filename' ].$this->thumbEndFix.$fileInfo['extension'];//파일 이름
  80. $outFile=$fileInfo["dirname"]."/" $outFile;//디렉터리 추가
  81. $ func="image".substr($imgtype,1);
  82. $func($res_thumb,$outFile)
  83. return $outFile;
  84. }
  85. 비공개 함수 ThumbSize($imgWidth,$imgHeight,$thumbWidth,$thumbHeight,$thumbType){
  86. //썸네일 크기
  87. $w=$thumbWidth;
  88. $h=$thumbHeight; > //원본 이미지 크기
  89. $img_w=$imgWidth;
  90. $img_h=$imgHeight;
  91. switch($thumbType){
  92. case 1:
  93. //고정 너비, 높이 증분
  94. $h=$w/$imgWidth*$imgHeight;
  95. break;
  96. 사례 2://고정 높이, 너비
  97. $w=$h/$imgHeight*$imgWidth; break;
  98. 사례 3:
  99. if($imgHeight/$thumbHeight>$imgWidth/$thumbWidth){
  100. $img_h=$imgWidth/$thumbWidth*$thumbHeight;
  101. }else{
  102. $img_w=$imgHeight/$thumbHeight*$thumbWidth;
  103. }
  104. }
  105. return array($img_w,$img_h,$w,$h);
  106. }
  107. / *
  108. *@param string $img 원본 이미지
  109. *@param string $outImg 워터마크 추가 후 생성된 이미지
  110. *@param int $pos 워터마크 위치
  111. *@param int $pct 투명도
  112. *@param text $text 워터마크 텍스트
  113. *@param string $waterImg 워터마크 이미지
  114. */
  115. 공용 함수 water($img,$outImg=null,$pos="",$pct= "",$text ="",$waterImg="",$textColor=""){
  116. if(!$this->check($img)){
  117. return false;
  118. }
  119. // 워터마크 추가 후 생성된 이미지
  120. $outImg=$outImg?$outImg:$img;
  121. //워터마크 위치
  122. $pos=$pos?$pos:$this-> ;waterPos;
  123. //투명성
  124. $pct=$pct?$pct:$this->waterPct;
  125. //워터마크 텍스트
  126. $text=$text?$text:$this- >waterText;
  127. //워터마크 이미지
  128. $waterImg=$waterImg?$waterImg:$this->waterImg;
  129. //워터마크 이미지 확인
  130. $waterImgOn=$this->check ($waterImg);
  131. //워터마크 텍스트 색상
  132. $textColor=$textColor?$textColor:$this->waterTextColor;
  133. //원본 이미지 정보
  134. $imgInfo=getimagesize($img );
  135. //원본 이미지 너비
  136. $imgWidth=$imgInfo[0];
  137. //원본 이미지 높이
  138. $imgHeight=$imgInfo[1];
  139. switch($imgInfo[ 2]){
  140. 사례 1:
  141. $resImg=imagecreatefromgif($img);
  142. 중단;
  143. 사례 2:
  144. $resImg=imagecreatefromjpeg($img);
  145. 중단
  146. 사례 3; :
  147. $resImg=imagecreatefrompng($img);
  148. break;
  149. }
  150. if($waterImgOn){//워터마크 이미지가 유효합니다
  151. //워터마크 정보
  152. $waterInfo =getimagesize($waterImg);
  153. //워터마크 너비
  154. $waterWidth=$waterInfo[0];
  155. //워터마크 높이
  156. $waterHeight=$waterInfo[1];
  157. // 다양한 상황에 따라 다양한 유형의 gif jpeg png 생성
  158. $w_img=null;
  159. switch($waterInfo[2]){
  160. 사례 1:
  161. $w_img=imagecreatefromgif($waterImg );
  162. 중단;
  163. 사례 2:
  164. $w_img=imagecreatefromjpeg($waterImg);
  165. 중단;
  166. 사례 3:
  167. $w_img=imagecreatefrompng($waterImg)
  168. }
  169. }else{//워터마크 이미지가 잘못되었습니다. 텍스트 워터마크를 사용하세요.
  170. if(empty($text)||strlen($textColor)!==7){
  171. return false;
  172. }
  173. //텍스트 워터마크 상자 정보 가져오기
  174. $textInfo=imagettfbbox($this->waterTextSize,0,$this->waterFont,$text);
  175. //텍스트 정보 너비
  176. $ textWidth =$textInfo[2]-$textInfo[6];
  177. //텍스트 정보 높이
  178. $textHeight=$textInfo[3]-$textInfo[7];
  179. }
  180. //水印位置
  181. $x=$y=20;
  182. 스위치($pos){
  183. 사례 1:
  184. break;
  185. 사례 2:
  186. $x= ($imgWidth-$waterWidth)/2;
  187. 중단;
  188. 사례 3:
  189. $y=$imgWidth-$waterWidth-10;
  190. 중단;
  191. 사례 4:
  192. $ x=($imgHeight-$waterHeight)/2;
  193. 중단;
  194. 사례 5:
  195. $x=($imgWidth-$waterWidth)/2;
  196. $y=($imgHeight-$ 물높이)/2;
  197. 중단;
  198. 사례 6:
  199. $x=$imgWidth-$waterWidth-10;
  200. $y=($imgHeight-$waterHeight)/2;
  201. 중단;
  202. 사례 7:
  203. $x=$imgHeight-$waterHeight-10;
  204. 중단;
  205. 사례 8:
  206. $x=($imgWidth-$waterWidth)/2;
  207. $y=$ imgHeight-$waterHeight-10;
  208. 중단;
  209. 사례 9:
  210. $x=$imgWidth-$waterWidth-10;
  211. $y=$imgHeight-$waterHeight-10;
  212. 중단;
  213. 기본값:
  214. $x=mt_rand(20,$imgWidth-$waterWidth);
  215. $y=mt_rand(20,$imgHeight-$waterHeight);
  216. }
  217. if($waterImgOn){//当waterImgOn){//当水印图 Images가 있음 w_img,$x,$y,0,0,$waterWidth,$waterHeight);
  218. }else{
  219. imagecopymerge($resImg,$w_img,$x,$y,0,0,$waterInfo,$ waterHeight,$pct);
  220. }
  221. }else{//WaterHeight,$pct);
  222. $red=hexdec(substr($this->waterTextColor,1,2));
  223. $greem=hexdec(substr($this->waterTextColor,3,2));
  224. $blue=hexdec(substr($this->waterTextColor,5,2));
  225. $color =imagecolorallocate($resImg,$red,$greem,$blue);
  226. imagettftext($resImg,$this->waterTextSize,0,$x,$y,$color,$this->waterFont,$ text);
  227. }
  228. //출처 사진
  229. switch($imgInfo[2]){
  230. 사례 1:
  231. imagegif($resImg,$outImg);
  232. break;
  233. 사례 2:
  234. imagejpeg($resImg,$outImg);
  235. break;
  236. 사례 3:
  237. imagepng($resImg,$outImg);
  238. break;
  239. }
  240. //垃圾回收
  241. if(isset($resImg)){
  242. imagedestroy($resImg);
  243. }
  244. if(isset($w_img)){
  245. imagedestroy($w_img);
  246. }
  247. return true;
  248. }
  249. }
  250. ?>
复代码

return array(
  • //水印处理
  • "WATER_ON"=>1,//水印开关
  • "WATER_IMG"=>"./data/logo.png",//수그림
  • "WATER_POS"=>9,//수印位置
  • "WATER_PCT"=>80,//수수명명도
  • "WATER_TEXT"=>"http://www.caoxiaobin.cn",
  • "WATER_FONT"=>"./data/simsunb.ttf",//water印字体
  • "WATER_TEXT_COLOR" =>"#333333",//文字颜color 16进system表示
  • "WATER_TEXT_SIZE"=>16,//文字大小
  • "WATER_QUA"=>80,//图文压缩比
  • //폭넓이
  • "THUMB_WIDTH"=>150,//폭넓이폭
  • "THUMB_HEIGHT"=>150,//폭넓이높이
  • "THUMB_TYPE"=>1,//缩略图处理 1宽degree固定, 高titude自增 2高titude固定, 宽titude自增 //缩略图尺寸不变,对原图进行裁切
  • "THUMB_ENDFIX"=>"_thmub"//缩略图后缀
  • );
  • ?>
  • 复代码

    1. /*
    2. * 대소문자를 구분하지 않는 데이터 키 감지
    3. */
    4. function array_key_exists_d($key,$arr){
    5. $_key =strtolower($key);
    6. foreach($arr as $k=>$v){
    7. if($_key==strtolower($k)){
    8. return true;
    9. }
    10. }
    11. }
    12. /*
    13. * 배열의 KEY(키 이름)를 재귀적으로 변경
    14. * @param array;
    15. * @stat int 0 소문자 1 대문자
    16. */
    17. 함수 array_change_key_case_d($arr,$stat=0){
    18. $func=$stat?"strtoupper":"strtolower";
    19. $_newArr=array();
    20. if(! is_array($arr)||empty($arr)){
    21. return $_newArr;
    22. }
    23. foreach($arr as $k=>$v){
    24. $_k=$func ($k);//변수 함수를 통해 KEY 케이스 변환
    25. $_newArr[$_k]= is_array($v)?array_change_key_case_d($v):$v;
    26. }
    27. return $_newArr; 🎜>}
    28. /*
    29. * 구성 항목 읽기 및 설정
    30. * @param $name void 구성 항목 이름, 작성하지 않으면 모든 구성 항목 반환
    31. * @param $value void 구성 항목 값
    32. * @param $value value false null $name 값만 사용
    33. */
    34. function C($name=null,$value=null){
    35. static $config=array( ) ;//정적 변수 $config는 모든 구성 항목을 저장합니다
    36. if(is_null($name)){
    37. return $config;
    38. }
    39. //$name이 배열인 경우
    40. if (is_array ($name)){
    41. return $config=array_merge($config,array_change_key_case_d($name,1));
    42. }
    43. //$name은 두 가지 경우의 문자열이고 $value는 값 없음, 획득했음을 나타냅니다. 구성 항목의 값은 구성 항목 변경을 나타냅니다.
    44. if(is_string($name)){
    45. $name= strtoupper($name);
    46. / /구성 항목의 값 가져오기
    47. if( is_null($value)){
    48. return array_key_exists_d($name,$config)?$config[$name]:null;
    49. }else{
    50. //값 설정
    51. $config[$name ]=$value;
    52. return true;
    53. }
    54. }
    55. }
    코드 복사

    PHP, 썸네일 이미지

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.