直接上代码:
/** * 压缩/缩放-图片-类 */ class CZImage { private $src; private $image; private $imageinfo; private $percent=0.5; /* param $src源图 param $percent压缩比例 */ public function __construct($src,$percent=1) { $this->src = $src; $this->percent = $percent; } /* param string $saveName 图片名(可不带扩展名用原图名)用于保存。或不提供文件名直接显示 */ public function compressImg($saveName='') { $this->_openImage(); if(!empty($saveName)) { return $this->_saveImage($saveName);//保存 } else { $this->_showImage(); } } /* 内部:打开图片 */ private function _openImage() { list($width, $height, $type, $attr) = getimagesize($this->src); $this->imageinfo = array( 'width'=>$width, 'height'=>$height, 'type'=>image_type_to_extension($type,false), 'attr'=>$attr ); $fun = "imagecreatefrom".$this->imageinfo['type']; $this->image = $fun($this->src); $this->_thumpImage(); } /** * 内部:操作图片 */ private function _thumpImage() { $new_width = $this->imageinfo['width'] * $this->percent; $new_height = $this->imageinfo['height'] * $this->percent; $image_thump = imagecreatetruecolor($new_width,$new_height); //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度 imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']); imagedestroy($this->image); $this->image = $image_thump; } /** * 输出图片:保存图片则用saveImage() */ private function _showImage() { header('Content-Type: image/'.$this->imageinfo['type']); $funcs = "image".$this->imageinfo['type']; $funcs($this->image); } /** * 保存图片到硬盘: * @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。 */ private function _saveImage($dstImgName) { if(empty($dstImgName)) return false; $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名 $dstExt = strrchr($dstImgName ,"."); $sourseExt = strrchr($this->src ,"."); if(!empty($dstExt)) $dstExt =strtolower($dstExt); if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt); //有指定目标名扩展名 if(!empty($dstExt) && in_array($dstExt,$allowImgs)) { $dstName = $dstImgName; } elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)) { $dstName = $dstImgName.$sourseExt; } else { $dstName = $dstImgName.$this->imageinfo['type']; } $funcs = "image".$this->imageinfo['type']; $funcs($this->image,$dstName); return $dstName; } /** * @function 等比缩放函数(以保存的方式实现) * @param string $picname 被缩放的处理图片源 * @param int $maxX 缩放后图片的最大宽度 * @param int $maxY 缩放后图片的最大高度 * @param string $pre 缩放后图片名的前缀名/文件名 * @return string 返回后的图片名称(带路径),如a.jpg --> s_a.jpg */ public function scalePic($maxX=100,$maxY=100,$pre='') { $picname = $this->src; $info = getimagesize($picname); //获取图片的基本信息 $width = $info[0];//获取宽度 $height = $info[1];//获取高度 //判断图片资源类型并创建对应图片资源 $im = $this->getPicType($info[2],$picname); //计算缩放比例 $scale = ($maxX/$width)>($maxY/$height)?$maxY/$height:$maxX/$width; //计算缩放后的尺寸 $sWidth = floor($width*$scale); $sHeight = floor($height*$scale); //创建目标图像资源 $nim = imagecreatetruecolor($sWidth,$sHeight); //等比缩放 imagecopyresampled($nim,$im,0,0,0,0,$sWidth,$sHeight,$width,$height); //输出图像 $newPicName = $this->outputImage($picname,$pre,$nim); //释放图片资源 imagedestroy($im); //imagedestroy($nim); $this->image = $nim; return $newPicName; } /** * function 判断并返回图片的类型(以资源方式返回) * @param int $type 图片类型 * @param string $picname 图片名字 * @return 返回对应图片资源 */ public function getPicType($type,$picname) { $im=null; switch($type) { case 1: //GIF $im = imagecreatefromgif($picname); break; case 2: //JPG $im = imagecreatefromjpeg($picname); break; case 3: //PNG $im = imagecreatefrompng($picname); break; case 6: //BMP $im = imagecreatefromwbmp($picname); break; default: die("不认识图片类型"); break; } return $im; } /** * function 输出图像 * @param string $picname 图片名字 * @param string $pre 新图片名前缀/文件名 * @param resourse $nim 要输出的图像资源 * @return 返回新的图片名 */ public function outputImage($picname,$pre,$nim) { $info = getimagesize($picname); $picInfo = pathinfo($picname); $filename = $pre ? $pre.'.'.$picInfo['extension'] : $picInfo['basename'] ; $newPicName = $picInfo['dirname'].'/'.$filename;//输出文件的路径 switch($info[2]) { case 1: imagegif($nim,$newPicName); break; case 2: imagejpeg($nim,$newPicName); break; case 3: imagepng($nim,$newPicName); break; case 4: imagewbmp($nim,$newPicName); break; } return $newPicName; } /** * 销毁图片 */ public function __destruct() { if (!$this->image){return false;} imagedestroy($this->image); } }
使用:
$imgfile = 'img.gif'; $czimg = new CZImage($imgfile); $ccimg = $czimg->compressImg('ccimgtu03');//压缩 print_r($ccimg); //echo '<br>'; //$iimgg = $czimg->scalePic(1000,600,'newimgtu09');//缩放 //print_r($iimgg);欢迎广大朋友们一起来学习!