摘自织梦CMS中的图片处理类
本文实例讲述了摘自织梦CMS中的图片处理类。分享给大家供大家参考。具体如下:
<?phpif(!defined('DEDEINC'))exit('dedecms'); /** *图像处理类 * *@version$Id:image.class.php118:102010年7月5日Ztianya$ *@packageDedeCMS.Libraries *@copyrightCopyright(c)2007-2010,DesDev,Inc. *@licensehttp://help.dedecms.com/usersguide/license.html *@linkhttp://www.dedecms.com */ classimage { var$attachinfo; var$targetfile;//图片路径 var$imagecreatefromfunc; var$imagefunc; var$attach; var$animatedgif; var$watermarkquality; var$watermarktext; var$thumbstatus; var$watermarkstatus; //析构函数,兼容PHP4 functionimage($targetfile,$cfg_thumb,$cfg_watermarktext,$photo_waterpos,$photo_diaphaneity,$photo_wheight,$photo_wwidth,$cfg_watermarktype,$photo_marktrans,$trueMarkimg,$attach=array()) { $this->__construct($targetfile,$cfg_thumb,$cfg_watermarktext,$photo_waterpos,$photo_diaphaneity,$photo_wheight,$photo_wwidth,$cfg_watermarktype,$photo_marktrans,$trueMarkimg,$attach); } //析构函数 function__construct($targetfile,$cfg_thumb,$cfg_watermarktext,$photo_waterpos,$photo_diaphaneity,$photo_wheight,$photo_wwidth,$cfg_watermarktype,$photo_marktrans,$trueMarkimg,$attach=array()) { $this->thumbstatus=$cfg_thumb; $this->watermarktext=$cfg_watermarktext; $this->watermarkstatus=$photo_waterpos; $this->watermarkquality=$photo_marktrans; $this->watermarkminwidth=$photo_wwidth; $this->watermarkminheight=$photo_wheight; $this->watermarktype=$cfg_watermarktype; $this->watermarktrans=$photo_diaphaneity; $this->animatedgif=0; $this->targetfile=$targetfile; $this->attachinfo=@getimagesize($targetfile); $this->attach=$attach; switch($this->attachinfo['mime']) { case'image/jpeg': $this->imagecreatefromfunc=function_exists('imagecreatefromjpeg')?'imagecreatefromjpeg':''; $this->imagefunc=function_exists('imagejpeg')?'imagejpeg':''; break; case'image/gif': $this->imagecreatefromfunc=function_exists('imagecreatefromgif')?'imagecreatefromgif':''; $this->imagefunc=function_exists('imagegif')?'imagegif':''; break; case'image/png': $this->imagecreatefromfunc=function_exists('imagecreatefrompng')?'imagecreatefrompng':''; $this->imagefunc=function_exists('imagepng')?'imagepng':''; break; }//为空则匹配类型的函数不存在 $this->attach['size']=empty($this->attach['size'])?@filesize($targetfile):$this->attach['size']; if($this->attachinfo['mime']=='image/gif') { $fp=fopen($targetfile,'rb'); $targetfilecontent=fread($fp,$this->attach['size']); fclose($fp); $this->animatedgif=strpos($targetfilecontent,'NETSCAPE2.0')===false?0:1; } } /** *生成缩略图 * *@accesspublic *@paramint$thumbwidth图片宽度 *@paramint$thumbheight图片高度 *@paramint$preview是否预览 *@returnvoid */ functionthumb($thumbwidth,$thumbheight,$preview=0) { $this->thumb_gd($thumbwidth,$thumbheight,$preview); if($this->thumbstatus==2&&$this->watermarkstatus) { $this->image($this->targetfile,$this->attach); $this->attach['size']=filesize($this->targetfile); } } /** *图片水印 * *@accesspublic *@paramint$preview是否预览 *@returnvoid */ functionwatermark($preview=0) { if($this->watermarkminwidth&&$this->attachinfo[0]<=$this->watermarkminwidth&&$this->watermarkminheight&&$this->attachinfo[1]<=$this->watermarkminheight) { return; } $this->watermark_gd($preview); } /** *使用gd生成缩略图 * *@accesspublic *@paramint$thumbwidth图片宽度 *@paramint$thumbheight图片高度 *@paramint$preview是否预览 *@returnvoid */ functionthumb_gd($thumbwidth,$thumbheight,$preview=0) { if($this->thumbstatus&&function_exists('imagecreatetruecolor')&&function_exists('imagecopyresampled')&&function_exists('imagejpeg')) { $imagecreatefromfunc=$this->imagecreatefromfunc; $imagefunc=$this->thumbstatus==1?'imagejpeg':$this->imagefunc; list($imagewidth,$imageheight)=$this->attachinfo; if(!$this->animatedgif&&($imagewidth>=$thumbwidth||$imageheight>=$thumbheight)) { $attach_photo=$imagecreatefromfunc($this->targetfile); $x_ratio=$thumbwidth/$imagewidth; $y_ratio=$thumbheight/$imageheight; if(($x_ratio*$imageheight)<$thumbheight) { $thumb['height']=ceil($x_ratio*$imageheight); $thumb['width']=$thumbwidth; } else { $thumb['width']=ceil($y_ratio*$imagewidth); $thumb['height']=$thumbheight; } $targetfile=!$preview?($this->thumbstatus==1?$this->targetfile.'.thumb.jpg':$this->targetfile):'./watermark_tmp.jpg'; $thumb_photo=imagecreatetruecolor($thumb['width'],$thumb['height']); imagecopyresampled($thumb_photo,$attach_photo,0,0,0,0,$thumb['width'],$thumb['height'],$imagewidth,$imageheight); if($this->attachinfo['mime']=='image/jpeg') { $imagefunc($thumb_photo,$targetfile,100); } else { $imagefunc($thumb_photo,$targetfile); } $this->attach['thumb']=$this->thumbstatus==1?1:0; } } } /** *使用gd进行水印 * *@accesspublic *@paramint$preview是否预览 *@returnvoid */ functionwatermark_gd($preview=0) { if($this->watermarkstatus&&function_exists('imagecopy')&&function_exists('imagealphablending')&&function_exists('imagecopymerge')) { $imagecreatefunc=$this->imagecreatefromfunc; $imagefunc=$this->imagefunc; list($imagewidth,$imageheight)=$this->attachinfo; if($this->watermarktype<2) { $watermark_file=$this->watermarktype==1?DEDEDATA.'/mark/mark.png':DEDEDATA.'/mark/mark.gif'; $watermarkinfo=@getimagesize($watermark_file); $watermark_logo=$this->watermarktype==1?@imagecreatefrompng($watermark_file):@imagecreatefromgif($watermark_file); if(!$watermark_logo) { return; } list($logowidth,$logoheight)=$watermarkinfo; } else { $box=@imagettfbbox($this->watermarktext['size'],$this->watermarktext['angle'],$this->watermarktext['fontpath'],$this->watermarktext['text']); $logowidth=max($box[2],$box[4])-min($box[0],$box[6]); $logoheight=max($box[1],$box[3])-min($box[5],$box[7]); $ax=min($box[0],$box[6])*-1; $ay=min($box[5],$box[7])*-1; } $wmwidth=$imagewidth-$logowidth; $wmheight=$imageheight-$logoheight; if(($this->watermarktype<2&&is_readable($watermark_file)||$this->watermarktype==2)&&$wmwidth>10&&$wmheight>10&&!$this->animatedgif) { switch($this->watermarkstatus) { case1: $x=+5; $y=+5; break; case2: $x=($imagewidth-$logowidth)/2; $y=+5; break; case3: $x=$imagewidth-$logowidth-5; $y=+5; break; case4: $x=+5; $y=($imageheight-$logoheight)/2; break; case5: $x=($imagewidth-$logowidth)/2; $y=($imageheight-$logoheight)/2; break; case6: $x=$imagewidth-$logowidth-5; $y=($imageheight-$logoheight)/2; break; case7: $x=+5; $y=$imageheight-$logoheight-5; break; case8: $x=($imagewidth-$logowidth)/2; $y=$imageheight-$logoheight-5; break; case9: $x=$imagewidth-$logowidth-5; $y=$imageheight-$logoheight-5; break; } $dst_photo=@imagecreatetruecolor($imagewidth,$imageheight); $target_photo=$imagecreatefunc($this->targetfile); imagecopy($dst_photo,$target_photo,0,0,0,0,$imagewidth,$imageheight); if($this->watermarktype==1) { imagecopy($dst_photo,$watermark_logo,$x,$y,0,0,$logowidth,$logoheight); } elseif($this->watermarktype==2) { if(($this->watermarktext['shadowx']||$this->watermarktext['shadowy'])&&$this->watermarktext['shadowcolor']) { $shadowcolorrgb=explode(',',$this->watermarktext['shadowcolor']); $shadowcolor=imagecolorallocate($dst_photo,$shadowcolorrgb[0],$shadowcolorrgb[1],$shadowcolorrgb[2]); imagettftext($dst_photo,$this->watermarktext['size'],$this->watermarktext['angle'], $x+$ax+$this->watermarktext['shadowx'],$y+$ay+$this->watermarktext['shadowy'],$shadowcolor, $this->watermarktext['fontpath'],$this->watermarktext['text']); } $colorrgb=explode(',',$this->watermarktext['color']); $color=imagecolorallocate($dst_photo,$colorrgb[0],$colorrgb[1],$colorrgb[2]); imagettftext($dst_photo,$this->watermarktext['size'],$this->watermarktext['angle'], $x+$ax,$y+$ay,$color,$this->watermarktext['fontpath'],$this->watermarktext['text']); } else { imagealphablending($watermark_logo,true); imagecopymerge($dst_photo,$watermark_logo,$x,$y,0,0,$logowidth,$logoheight,$this->watermarktrans); } $targetfile=!$preview?$this->targetfile:'./watermark_tmp.jpg'; if($this->attachinfo['mime']=='image/jpeg') { $imagefunc($dst_photo,$targetfile,$this->watermarkquality); } else { $imagefunc($dst_photo,$targetfile); } $this->attach['size']=filesize($this->targetfile); } } } }//EndClass
希望本文所述对大家的php程序设计有所帮助。