分享php多功能图片处理类
程序员文章站
2023-12-22 18:47:16
本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下
本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下
<?php /** * image.class.php 图像处理类 * @author administrator * */ class image{ private $path=''; /** * 构造方法 * @param unknown $path */ function __construct($path=''){ if (!empty($path)) { $this->path=$path; } } /** +----------------------------------------------- * 等比缩放函数 +----------------------------------------------- * @param unknown $name 需处理图片的名称 * @param unknown $width 缩放后的宽度 * @param unknown $height 缩放后的高度 * @param string $thumb_prixs 缩放后的前缀名 * @return mixed $newname 返回的缩放后的文件名 */ function thumb($name,$width,$height,$thumb_prixs='th_'){ //获取图片信息 $info=$this->imageinfo($name); //图片的宽度,高度,类型 //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png $imagres=$this->img_resouce($name, $info); //获取计算图片等比例之后的大小, $size=$this->getnewsize($name,$width,$height,$info); //获取新的图片资源,处理透明背景 $newimg=$this->getimage($imagres,$size,$info); //另存为一个新的图片,返回新的缩放后的图片名称 $newname=$this->savenewimage($newimg,$thumb_prixs.$name,$info); return $newname; } /** +----------------------------------------------------------------------- * 水印标记函数 +----------------------------------------------------------------------- * @param unknown $backname 背景文件名 * @param unknown $watername 水印文件名 * @param number $waterpos 水印位置 * @param string $wa_prixs 水印前缀名 * @return boolean */ function watermark($backname,$watername,$waterpos=0,$wa_prixs='wa_') { if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) { $backinfo=$this->imageinfo($backname); $waterinfo=$this->imageinfo($watername); if(!$pos=$this->getpos($backinfo, $waterinfo, $waterpos)){ echo "水印图片不应该比背景图片小"; return false; } $backimg=$this->img_resouce($backname, $backinfo); $waterimg=$this->img_resouce($watername, $waterinfo); var_dump($backimg);exit(); $backimg=$this->copyimage($backimg, $waterimg, $pos, $waterinfo); $this->savenewimage($backimg, $wa_prixs.$backname, $backinfo); }else{ echo "图片或水印不存在"; return false; } } /** +----------------------------------------------------------------------- * 获取图片信息函数 +----------------------------------------------------------------------- * @param unknown $name * @return unknown */ private function imageinfo($img) { $imageinfo=getimagesize($img); if ($imageinfo!==false) { $imagetype=strtolower(substr(image_type_to_extension($imageinfo[2]),1)); $imagesize=filesize($img); $info=array( "width" => $imageinfo[0], "height" => $imageinfo[1], "type" => $imagetype, "size" => $imagesize, "mime" => $imageinfo['mime'] ); return $info; }else{ return false; } } /** +-------------------------------------------------------- * 创建原图像格式函数 +-------------------------------------------------------- * @param unknown $name * @param unknown $imaginfo * @return boolean|resource */ private function img_resouce($name,$imageinfo){ $iamgeres=$this->path.$name; //var_dump($iamgeres);exit(); switch ($imageinfo['type']) { case 'gif': $img=imagecreatefromgif($name); break; case 'jpg': $img=imagecreatefromjpeg($name); break; case 'png': $img=imagecreatefrompng($name); break; } return $img; } /** +-------------------------------------------------- * 获取等比缩放尺寸函数 +-------------------------------------------------- * @param unknown $name * @param unknown $width * @param unknown $height * @param unknown $imaginfo * @return ambigous <unknown, number> */ private function getnewsize($name,$width,$height,$imaginfo){ $size['width']=$imaginfo['width']; $size['height']=$imaginfo['height']; if ($width<$imaginfo['width']) { $size['width']=$width; } if ($height<$imaginfo['height']) { $size['height']=$height; } //图像等比例缩放算法 if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) { $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']); }else{ $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']); } return $size; } private function getimage($imageres,$size,$imageinfo){ //新建一个真彩色图像 $newimg=imagecreatetruecolor($size['width'], $size['height']); //将某个颜色定义为透明色 $otsc=imagecolortransparent($imageres); //获取图像的调色板的颜色数目 if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) { //取得某索引的颜色 $stran=imagecolorsforindex($imageres, $otsc); //为图像分配颜色 $newt=imagecolorallocate($imageres, $stran['red'], $stran['green'], $stran['blue']); //区域填充函数 imagefill($newimg, 0, 0, $newt); //为图像定义透明色 imagecolortransparent($newimg,$newt); } imagecopyresized($newimg, $imageres, 0, 0, 0, 0, $size['width'], $size['height'], $imageinfo['width'], $imageinfo['height']); imagedestroy($imageres); return $newimg; } /** +---------------------------------------------- *保存图像函数 +---------------------------------------------- * @param unknown $newimg * @param unknown $newname * @param unknown $imageinfo * @return unknown */ private function savenewimage($newimg,$newname,$imageinfo){ switch ($imageinfo['type']){ case 1://gif $result=imagegif($newimg,$this->path.$newname); break; case 2://jpg $result=imagejpeg($newimg,$this->path.$newname); break; case 3://png $result=imagepng($newimg,$this->path.$newname); break; } imagedestroy($newimg); return $newname; } /** +----------------------------------------------------------------- * 获取水印位置函数 +----------------------------------------------------------------- * @param unknown $backinfo 背景信息 * @param unknown $waterinfo 水印信息 * @param unknown $waterpos 水印位置 * @return boolean|multitype:number 返回坐标数组 */ private function getpos($backinfo,$waterinfo,$waterpos) { if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) { return false; } switch ($waterpos) { case 1://左上角 $posx=0; $posy=0; break; case 2://中上方 $posx=$backinfo['width']-$waterinfo['width']/2; $posy=0; break; case 3://右上角 $posx=$backinfo['width']-$waterinfo['width']; $posy=0; break; case 4://左中方 $posx=0; $posy=$backinfo['height']-$waterinfo['height']/2; break; case 5://正中间 $posx=$backinfo['width']-$waterinfo['width']/2; $posy=$backinfo['height']-$waterinfo['height']/2; break; case 6://右中方 $posx=$backinfo['width']-$waterinfo['width']; $posy=$backinfo['height']-$waterinfo['height']/2; break; case 7://底部靠左 $posx=0; $posy=$backinfo['height']-$waterinfo['height']; break; case 8://底部居中 $posx=$backinfo['width']-$waterinfo['width']/2; $posy=$backinfo['height']-$waterinfo['height']; break; case 9://底部靠右 $posx=$backinfo['width']-$waterinfo['width']; $posy=$backinfo['height']-$waterinfo['height']; break; case 0: default : $posx=rand(0,$backinfo['width']-$waterinfo['width']); $posy=rand(0,$backinfo['height']-$waterinfo['height']); break; } return array('posx'=>$posx,'posy'=>$posy); } /** +------------------------------------------------------------------- * 拷贝图像 +------------------------------------------------------------------- * @param unknown $backimg 背景资源 * @param unknown $waterimg 水印资源 * @param unknown $pos 水印位置 * @param unknown $waterinfo 水印信息 * @return unknown */ private function copyimage($backimg,$waterimg,$pos,$waterinfo) { imagecopy($backimg, $waterimg, $pos['posx'], $pos['posy'], 0, 0, $waterinfo['width'], $waterinfo['height']); imagedestroy($waterimg); return $backimg; } } ?>
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。