一个强大的图片缩放类,支持填充缩放模式
我们在截图的时候,如果给定的尺寸比例与原图比例不等,那么情况就是缩略出来的图片总有一边是不理想的, 可能高度不够,也可能宽度不够,最近项目用到图片缩放,发现了这个问题,于是重写了框架里的图片缩放方法,大家可能都知道电脑设置壁纸模式的时候有一项为“填充”,这种模式保证了你的屏幕不会出现空白,图片会自动调整到填满屏幕大小,那么下面这个方法加入了这一种模式,保证你需要的尺寸一定会有图,而不是出现黑边或者尺寸不理想等情况。
启用填充模式需要设置:$scaleMode=false;
以下方法只是框架图片类中的一部分:
         /**         * 生成缩略图         * @author Joychao<Joy#joychao.cc>         * @static         * @param string  $image         原图         * @param string  $type          图像格式         * @param string  $maxWidth      目标最大宽度         * @param string  $maxHeight     目标最大高度         * @param string  $prefix        目标后缀         * @param boolean $scaleMode     按比例切割模式         * @param boolean $saveImg       生成后是否保存文件         * @param boolean $interlace     启用隔行扫描         * @return void          */        static function thumbnail($image,$type='',$maxWidth=200,$maxHeight=50,$prefix='_thumb',$scaleMode=false,$saveImg=true,$interlace=true)        {            // 获取原图信息            $info  = self::getInfo($image);            if($info !== false) {                $srcWidth  = $info['width'];                $srcHeight = $info['height'];                $type = empty($type)?$info['type']:$type;                $type = strtolower($type);                $interlace  =  $interlace? 1:0;                unset($info);                // 载入原图                $createFun = 'Imagecreatefrom'.($type=='jpg'?'jpeg':$type);                $srcImg     = $createFun($image);                if($scaleMode){//按比例切图                    $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例                    if($scale>=1) {                        // 超过原图大小不再缩略                        $width   =  $srcWidth;                        $height  =  $srcHeight;                    }else{                        // 缩略图尺寸                        $width  = (int)($srcWidth*$scale);                        $height = (int)($srcHeight*$scale);                    }                }else{//不按比例切图                    $newScale=$maxWidth/$maxHeight;                    $srcScale=$srcWidth/$srcHeight;                    if($srcScale>=$newScale){                        $height=$maxHeight;                        $width=intval($height*($srcWidth/$srcHeight));                    }else{                        $width=$maxWidth;                        $height=intval($width/($srcWidth/$srcHeight));                    }                    $thumbImgFirst = imagecreatetruecolor($width, $height);                    imagecopyresampled($thumbImgFirst, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);                    if($srcScale>=$newScale){                        //原图起点                        $startX=intval(($width-$maxWidth)*0.5);                        $startY=0;                        $width=$maxWidth;                    }else{                        //原图起点                        $startX=0;                        $startY=intval(($height-$maxHeight)*0.5);                        $height=$maxHeight;                    }                }                //创建缩略图                if($type!='gif' && function_exists('imagecreatetruecolor')){                    $thumbImg = imagecreatetruecolor($width, $height);                }else{                    $thumbImg = imagecreate($width, $height);                }                // 复制图片                if(!$scaleMode){                    imagecopymerge($thumbImg, $thumbImgFirst, 0, 0, $startX, $startY, $width, $height, 100);                }else{                    if(function_exists("Imagecopyresampled")){                        imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);                    }else{                        imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height,  $srcWidth,$srcHeight);                   }                }                if('gif'==$type || 'png'==$type) {                    $background_color = imagecolorallocate($thumbImg,  0,255,0);  //指派一个绿色                    imagecolortransparent($thumbImg,$background_color);  //设置为透明色,若注释掉该行则输出绿色的图                }                // 对jpeg图形设置隔行扫描                if('jpg'==$type || 'jpeg'==$type)                    imageinterlace($thumbImg,$interlace);                // 生成图片保存                $imageFun = 'image'.($type=='jpg'?'jpeg':$type);                $thumbName=preg_replace('/(\.\w+)$/', $prefix.'\\1', $image);    //abs_thumb.jpg                if($saveImg)//是否需要保存文件                    $imageFun($thumbImg,$thumbName);                else                    $imageFun($thumbImg);                imagedestroy($thumbImg);                imagedestroy($srcImg);                return $thumbName;            }            return false;        }      /**         * 获取图片信息         * @static         * @param string $path 图片路径         * @return array         */        static function getInfo($path){            $arr=getimagesize($path);            $info['width']=$arr[0];            $info['height']=$arr[1];            $info['mime']=$arr['mime'];            return $info;        } | 
                    
                
                
            
        
浙公网安备 33010602011771号