对图片进行水印添加以及生成缩率图
程序员文章站
2022-03-19 11:42:10
...
2个方法
1 给图片进行水印添加
2生成一个新的缩率图
1 给图片进行水印添加
2生成一个新的缩率图
php代码
<?php class Image{ //水印配置项 private $waterOn; private $waterImg; private $waterPos; private $waterPct; private $waterText; private $waterFont; private $waterTextSize; private $waterTextColor; private $qua; //缩略图配置项 private $thumbWidth; private $thumbHeight; private $thumbType; private $thumbEndfix; //构造函数 public function __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"); } /* *验证图片是否合法 */ private function check($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 那种方式进行缩略处理 */ public function 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]); } imagecopyresized($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; } private function 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; case 2://高度固定,宽度自 $w=$h/$imgHeight*$imgWidth; break; case 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水印图片 */ public function 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]){ case 1: $resImg=imagecreatefromgif($img); break; case 2: $resImg=imagecreatefromjpeg($img); break; case 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]){ case 1: $w_img=imagecreatefromgif($waterImg); break; case 2: $w_img=imagecreatefromjpeg($waterImg); break; case 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; switch($pos){ case 1: break; case 2: $x=($imgWidth-$waterWidth)/2; break; case 3: $y=$imgWidth-$waterWidth-10; break; case 4: $x=($imgHeight-$waterHeight)/2; break; case 5: $x=($imgWidth-$waterWidth)/2; $y=($imgHeight-$waterHeight)/2; break; case 6: $x=$imgWidth-$waterWidth-10; $y=($imgHeight-$waterHeight)/2; break; case 7: $x=$imgHeight-$waterHeight-10; break; case 8: $x=($imgWidth-$waterWidth)/2; $y=$imgHeight-$waterHeight-10; break; case 9: $x=$imgWidth-$waterWidth-10; $y=$imgHeight-$waterHeight-10; break; default: $x=mt_rand(20,$imgWidth-$waterWidth); $y=mt_rand(20,$imgHeight-$waterHeight); } if($waterImgOn){//当水印图片有效时,以图片形式加水印 if($waterInfo[2]==3){ imagecopy($resImg,$w_img,$x,$y,0,0,$waterWidth,$waterHeight); }else{ imagecopymerge($resImg,$w_img,$x,$y,0,0,$waterInfo,$waterHeight,$pct); } }else{//水印图片失效,以文字水印加 $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]){ case 1: imagegif($resImg,$outImg); break; case 2: imagejpeg($resImg,$outImg); break; case 3: imagepng($resImg,$outImg); break; } //垃圾回收 if(isset($resImg)){ imagedestroy($resImg); } if(isset($w_img)){ imagedestroy($w_img); } return true; } } ?>
<?php 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_TEXT_COLOR"=>"#333333",//文字颜色 16进制表示 "WATER_TEXT_SIZE"=>16,//文字大小 "WATER_QUA"=>80,//图片压缩比 //缩略图 "THUMB_WIDTH"=>150,//缩率图宽度 "THUMB_HEIGHT"=>150,//缩略图高度 "THUMB_TYPE"=>1,//缩略图处理 1宽度固定,高度自增 2高度固定,宽度自增 //缩略图尺寸不变,对原图进行裁切 "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大写 */ function 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 值 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为字符串 2种情况 $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; } } }
上一篇: tsn