produce(); * * 其中可以获取原始图片的相关信息,宽度、高度、和图片mime * * $thumbnails->getimagewidth(); //int 图片宽度 * $thumbnails->getimageheight(); // int 图片高度 * $thumbnails->getimagemime(); // string 图片的mime * * $thumbnails->truesize(); //array 这是一个包含图片等比例缩略之后的宽度和高度值的数组 * $size = array('width'=>'','height'=>''); * 获取图片等比缩略之后的宽度和高度 * $size['width']//等比缩略图的宽度 * $size['height']//等比缩略图的高度 * */class thumbnails{ private $imgsrc; //图片的路径 private $savesrc; //图片的保存路径,默认为空 private $canvaswidth; //画布的宽度 private $canvasheight; //画布的高度 private $im; //画布资源 private $dm; //复制图片返回的资源 /** * 初始化类,加载相关设置 * * @param $imgsrc 需要缩略的图片的路径 * @param $canvaswidth 缩略图的宽度 * @param $canvasheight 缩略图的高度 */ public function __construct($imgsrc,$canvaswidth,$canvasheight,$savesrc=null) { $this->imgsrc = $imgsrc; $this->canvaswidth = $canvaswidth; $this->canvasheight = $canvasheight; $this->savesrc = $savesrc; } /** * 生成缩略图 */ public function produce() { $this->createcanvas(); $this->judgeimage(); $this->copyimage(); $this->headerimage(); } /** * 获取载入图片的信息 * * 包含长度、宽度、图片类型 * * @return array 包含图片长度、宽度、mime的数组 */ private function getimageinfo() { return getimagesize($this->imgsrc); } /** * 获取图片的长度 * * @return int 图片的宽度 */ public function getimagewidth() { $imageinfo = $this->getimageinfo(); return $imageinfo['0']; } /** * 获取图片高度 * * @return int 图片的高度 */ public function getimageheight() { $imageinfo = $this->getimageinfo(); return $imageinfo['1']; } /** * 获取图片的类型 * * @return 图片的mime值 */ public function getimagemime() { $imageinfo = $this->getimageinfo(); return $imageinfo['mime']; } /** * 创建画布 * * 同时将创建的画布资源放入属性$this->im中 */ private function createcanvas() { $size = $this->truesize(); $this->im = imagecreatetruecolor($size['width'],$size['height']); } /** * 判断图片的mime值,确定使用的函数 * * 同时将创建的图片资源放入$this->dm中 */ private function judgeimage() { $mime = $this->getimagemime(); switch ($mime) { case 'image/png':$dm = imagecreatefrompng($this->imgsrc); break; case 'image/gif':$dm = imagecreatefromgif($this->imgsrc); break; case 'image/jpg':$dm = imagecreatefromjpeg($this->imgsrc); break; case 'image/jpeg':$dm = imagecreatefromgjpeg($this->imgsrc); break; } $this->dm = $dm; } /** * 判断图片缩略后的宽度和高度 * * 此宽度和高度也作为画布的尺寸 * * @return array 图片经过等比例缩略之后的尺寸 */ public function truesize() { $proportionw = $this->getimagewidth() / $this->canvaswidth; $proportionh = $this->getimageheight() / $this->canvasheight; if( ($this->getimagewidth() canvaswidth) && ($this->getimageheight() canvasheight) ) { $truesize = array('width'=>$this->getimagewidth(),'height'=>$this->getimageheight()); } elseif($proportionw >= $proportionh) { $truesize = array('width'=>$this->canvaswidth,'height'=>$this->getimageheight() / $proportionw); } else { $truesize = array('width'=>$this->getimagewidth() / $proportionh,'height'=>$this->canvasheight); } return $truesize; } /** * 将图片复制到新的画布上面 * * 图片会被等比例的缩放,不会变形 */ private function copyimage() { $size = $this->truesize(); imagecopyresized($this->im, $this->dm , 0 , 0 , 0 , 0 , $size['width'] , $size['height'] , $this->getimagewidth() , $this->getimageheight()); } /** * 将图片输出 * * 图片的名称默认和原图片名称相同 * * 路径为大图片当前目录下的small目录内 * * 如果small目录不存在,则会自动创建 */ public function headerimage() { $position = strrpos($this->imgsrc,'/'); $imagename = substr($this->imgsrc,($position + 1)); if($this->savesrc) { $imageflode = $this->savesrc.'/'; } else { $imageflode = substr($this->imgsrc,0,$position).'/small/'; } if(!file_exists($imageflode)) { mkdir($imageflode); } $savesrc = $imageflode.$imagename; imagejpeg($this->im,$savesrc); } }
复制代码