1 사진에 워터마크 추가
2 새로운 썸네일 이미지 생성
- class Image{
- //워터마크 구성 항목
- private $waterOn;
- private $ waterImg;
- 비공개 $waterPos;
- 비공개 $waterPct;
- 비공개 $waterText;
- 비공개 $waterFont;
- 비공개 $waterTextSize;
- 비공개 $waterTextColor;
- 비공개 $qua ;
- //썸네일 구성 항목
- private $thumbWidth;
- private $thumbHeight;
- private $thumbType;
- private $thumbEndfix;
- //생성자
- 공용 함수 __construct(){
- $this->waterOn=C("WATER_ON");
- $this->waterImg=C("WATER_IMG");
- $this->waterPos=C( "WATER_POS") ;
- $this->waterPct=C("WATER_PCT");
- $this->waterText=C("WATER_TEXT");
- $this->waterFont=C("WATER_FONT" );
- $this->waterTextSize=C("WATER_TEXT_SIZE");
- $this->waterTextColor=C("WATER_TEXT_COLOR");
- $this->qua= C("WATER_QUA ");
- //이미지 축소
- $this->thumbWidth=C("THUMB_WIDTH");
- $this->thumbHeight=C("THUMB_HEIGHT");
- $this- >thumbType=C("THUMB_TYPE");
- $this->thumbEndFix=C("THUMB_ENDFIX");
- }
- /*
- *사진이 합법적인지 확인하세요
- */
- 비공개 함수 검사($img){
- return is_file($img)&&getimagesize($img)&&extension_loaded("gd");
- }
- /*
- * 이미지 축소
- *@param string $img 원본 이미지
- *@param string $outFile 축소 후 저장되는 이미지
- *@param int $thumbWidth 축소된 이미지 너비
- *@param int $ ThumbHeight 썸네일 높이
- * @param int $thumbType 썸네일 처리를 수행하는 방법
- */
- 공개 함수 Thumb($img,$outFile="",$thumbWidth="",$thumbHeight ="",$thumbType="") {
- if(!$this->check($img)){
- return false;
- }
- //썸네일 이미지 처리 방법
- $thumbType=$thumbType?$thumbType: $this->thumbType;
- //이미지 너비 조정
- $thumbWidth=$thumbWidth?$thumbWidth:$this->thumbWidth
- / /이미지 높이 조정
- $thumbHeight=$thumbHeight ?$thumbHeight:$this->thumbHeight;
- //원본 이미지 정보 가져오기
- $imgInfo=getimagesize($img);
- // 원본 이미지 너비
- $imgWidth=$imgInfo[0 ];
- //원본 이미지 높이
- $imgHeight=$imgInfo[1];
- //원본 이미지 유형 가져오기
- $imgtype= image_type_to_extension($imgInfo[2]);
- / /다양한 썸네일 처리 방법에 따라 크기(원본 이미지와 썸네일의 해당 크기)를 구합니다.
- $thumb_size=$this->thumbsize($imgWidth, $imgHeight,$thumbWidth,$thumbHeight,$thumbType );
- //원본 이미지 생성
- $func="imagecreatefrom".substr($imgtype,1);//변수 함수
- $resImg=$ func($img);
- // 썸네일 이미지 캔버스 만들기
- if($imgtype==".gif"){
- $res_thumb=imagecreate($thumb_size[2],$thumb_size[3] );
- }else{
- $res_thumb=imagecreatetruecolor($thumb_size[2],$thumb_size[3]);
- }
- imagecopyreized($res_thumb,$resImg,0,0,0, 0,$thumb_size[2],$thumb_size[ 3],$thumb_size[0],$thumb_size[1]);
- $fileInfo=pathinfo($img);//파일 정보
- $outFile=$ outFile?$outFile:$fileInfo['filename' ].$this->thumbEndFix.$fileInfo['extension'];//파일 이름
- $outFile=$fileInfo["dirname"]."/" $outFile;//디렉터리 추가
- $ func="image".substr($imgtype,1);
- $func($res_thumb,$outFile)
- return $outFile;
- }
- 비공개 함수 ThumbSize($imgWidth,$imgHeight,$thumbWidth,$thumbHeight,$thumbType){
- //썸네일 크기
- $w=$thumbWidth;
- $h=$thumbHeight; > //원본 이미지 크기
- $img_w=$imgWidth;
- $img_h=$imgHeight;
- switch($thumbType){
- case 1:
- //고정 너비, 높이 증분
- $h=$w/$imgWidth*$imgHeight;
- break;
- 사례 2://고정 높이, 너비
- $w=$h/$imgHeight*$imgWidth; break;
- 사례 3:
- if($imgHeight/$thumbHeight>$imgWidth/$thumbWidth){
- $img_h=$imgWidth/$thumbWidth*$thumbHeight;
- }else{
- $img_w=$imgHeight/$thumbHeight*$thumbWidth;
- }
- }
- return array($img_w,$img_h,$w,$h);
- }
- / *
- *@param string $img 원본 이미지
- *@param string $outImg 워터마크 추가 후 생성된 이미지
- *@param int $pos 워터마크 위치
- *@param int $pct 투명도
- *@param text $text 워터마크 텍스트
- *@param string $waterImg 워터마크 이미지
- */
- 공용 함수 water($img,$outImg=null,$pos="",$pct= "",$text ="",$waterImg="",$textColor=""){
- if(!$this->check($img)){
- return false;
- }
- // 워터마크 추가 후 생성된 이미지
- $outImg=$outImg?$outImg:$img;
- //워터마크 위치
- $pos=$pos?$pos:$this-> ;waterPos;
- //투명성
- $pct=$pct?$pct:$this->waterPct;
- //워터마크 텍스트
- $text=$text?$text:$this- >waterText;
- //워터마크 이미지
- $waterImg=$waterImg?$waterImg:$this->waterImg;
- //워터마크 이미지 확인
- $waterImgOn=$this->check ($waterImg);
- //워터마크 텍스트 색상
- $textColor=$textColor?$textColor:$this->waterTextColor;
- //원본 이미지 정보
- $imgInfo=getimagesize($img );
- //원본 이미지 너비
- $imgWidth=$imgInfo[0];
- //원본 이미지 높이
- $imgHeight=$imgInfo[1];
- switch($imgInfo[ 2]){
- 사례 1:
- $resImg=imagecreatefromgif($img);
- 중단;
- 사례 2:
- $resImg=imagecreatefromjpeg($img);
- 중단
- 사례 3; :
- $resImg=imagecreatefrompng($img);
- break;
- }
- if($waterImgOn){//워터마크 이미지가 유효합니다
- //워터마크 정보
- $waterInfo =getimagesize($waterImg);
- //워터마크 너비
- $waterWidth=$waterInfo[0];
- //워터마크 높이
- $waterHeight=$waterInfo[1];
- // 다양한 상황에 따라 다양한 유형의 gif jpeg png 생성
- $w_img=null;
- switch($waterInfo[2]){
- 사례 1:
- $w_img=imagecreatefromgif($waterImg );
- 중단;
- 사례 2:
- $w_img=imagecreatefromjpeg($waterImg);
- 중단;
- 사례 3:
- $w_img=imagecreatefrompng($waterImg)
- }
- }else{//워터마크 이미지가 잘못되었습니다. 텍스트 워터마크를 사용하세요.
- if(empty($text)||strlen($textColor)!==7){
- return false;
- }
- //텍스트 워터마크 상자 정보 가져오기
- $textInfo=imagettfbbox($this->waterTextSize,0,$this->waterFont,$text);
- //텍스트 정보 너비
- $ textWidth =$textInfo[2]-$textInfo[6];
- //텍스트 정보 높이
- $textHeight=$textInfo[3]-$textInfo[7];
- }
- //水印位置
- $x=$y=20;
- 스위치($pos){
- 사례 1:
- break;
- 사례 2:
- $x= ($imgWidth-$waterWidth)/2;
- 중단;
- 사례 3:
- $y=$imgWidth-$waterWidth-10;
- 중단;
- 사례 4:
- $ x=($imgHeight-$waterHeight)/2;
- 중단;
- 사례 5:
- $x=($imgWidth-$waterWidth)/2;
- $y=($imgHeight-$ 물높이)/2;
- 중단;
- 사례 6:
- $x=$imgWidth-$waterWidth-10;
- $y=($imgHeight-$waterHeight)/2;
- 중단;
- 사례 7:
- $x=$imgHeight-$waterHeight-10;
- 중단;
- 사례 8:
- $x=($imgWidth-$waterWidth)/2;
- $y=$ imgHeight-$waterHeight-10;
- 중단;
- 사례 9:
- $x=$imgWidth-$waterWidth-10;
- $y=$imgHeight-$waterHeight-10;
- 중단;
- 기본값:
- $x=mt_rand(20,$imgWidth-$waterWidth);
- $y=mt_rand(20,$imgHeight-$waterHeight);
- }
- if($waterImgOn){//当waterImgOn){//当水印图 Images가 있음 w_img,$x,$y,0,0,$waterWidth,$waterHeight);
- }else{
- imagecopymerge($resImg,$w_img,$x,$y,0,0,$waterInfo,$ waterHeight,$pct);
- }
- }else{//WaterHeight,$pct);
- $red=hexdec(substr($this->waterTextColor,1,2));
- $greem=hexdec(substr($this->waterTextColor,3,2));
- $blue=hexdec(substr($this->waterTextColor,5,2));
- $color =imagecolorallocate($resImg,$red,$greem,$blue);
- imagettftext($resImg,$this->waterTextSize,0,$x,$y,$color,$this->waterFont,$ text);
- }
- //출처 사진
- switch($imgInfo[2]){
- 사례 1:
- imagegif($resImg,$outImg);
- break;
- 사례 2:
- imagejpeg($resImg,$outImg);
- break;
- 사례 3:
- imagepng($resImg,$outImg);
- break;
- }
- //垃圾回收
- if(isset($resImg)){
- imagedestroy($resImg);
- }
- if(isset($w_img)){
- imagedestroy($w_img);
- }
- return true;
- }
- }
- ?>
-
-
复代码
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"//缩略图后缀
);
?>
复代码
- /*
- * 대소문자를 구분하지 않는 데이터 키 감지
- */
- function array_key_exists_d($key,$arr){
- $_key =strtolower($key);
- foreach($arr as $k=>$v){
- if($_key==strtolower($k)){
- return true;
- }
- }
- }
- /*
- * 배열의 KEY(키 이름)를 재귀적으로 변경
- * @param array;
- * @stat int 0 소문자 1 대문자
- */
- 함수 array_change_key_case_d($arr,$stat=0){
- $func=$stat?"strtoupper":"strtolower";
- $_newArr=array();
- if(! is_array($arr)||empty($arr)){
- return $_newArr;
- }
- foreach($arr as $k=>$v){
- $_k=$func ($k);//변수 함수를 통해 KEY 케이스 변환
- $_newArr[$_k]= is_array($v)?array_change_key_case_d($v):$v;
- }
- return $_newArr; 🎜>}
- /*
- * 구성 항목 읽기 및 설정
- * @param $name void 구성 항목 이름, 작성하지 않으면 모든 구성 항목 반환
- * @param $value void 구성 항목 값
- * @param $value value false null $name 값만 사용
- */
- function C($name=null,$value=null){
- static $config=array( ) ;//정적 변수 $config는 모든 구성 항목을 저장합니다
- if(is_null($name)){
- return $config;
- }
- //$name이 배열인 경우
- if (is_array ($name)){
- return $config=array_merge($config,array_change_key_case_d($name,1));
- }
- //$name은 두 가지 경우의 문자열이고 $value는 값 없음, 획득했음을 나타냅니다. 구성 항목의 값은 구성 항목 변경을 나타냅니다.
- if(is_string($name)){
- $name= strtoupper($name);
- / /구성 항목의 값 가져오기
- if( is_null($value)){
- return array_key_exists_d($name,$config)?$config[$name]:null;
- }else{
- //값 설정
- $config[$name ]=$value;
- return true;
- }
- }
- }
-
코드 복사
|