生成缩略图

将大图,设定一个原点,宽高裁剪,粘贴到小图上
从小图的原点,粘贴一定的宽高.大图会自适应放入小图的矩形中
imagecopyresampled — 重采样拷贝部分图像并调整大小

/**
*
*生成缩略图(等比例缩放,两边留白)
*@param string $filename 文件路径(./dd/fgg/dfd.jpg)
*@param int $sw 缩略图的宽
*@param int $sh 缩略图的高
*@return string $path 返回图片路径
*/
function makeThumb($filename,$sw=200,$sh=200){
    $path= dirname($filename).'/'.time().randStr().'.png';
    $opic=ROOT.$filename;//大图的绝对路径
    $opath= ROOT.$path;//小图的绝对路径
    //获取原始大图片的宽高和类型
    if(!list($bw,$bh,$type)=getimagesize($opic)){
        return false;
    }
    //设置允许上传的图片类型
    $map= array(
        1=>'imagecreatefromgif',
        2=>'imagecreatefromjpeg',
        3=>'imagecreatefrompng',
        15=>'imagecreatefromwbmp'
    );
    //如果上面获取的图片类型在$map里面没有设置,则直接返回
    if(!isset($map[$type])){
        return false;
    }
    //创建一个大图图像
    $big=$map[$type]($opic);
    //创建小图画布,设置颜色为白色
    $small=imagecreatetruecolor($sw,$sh);
    $white=imagecolorallocate($small,255,255,255);
    //将白的付给画布
    imagefill($small,0,0,$white);
    
    //计算缩略比:缩略图/原始图,取最小值
    $rate=min($sw/$bw,$sh/$bh);
    //计算最终缩略图的宽和高
    $rw = $bw*$rate;
    $rh = $bh*$rate;
    //将小图放到画布上
    imagecopyresampled( $small,$big,($sw-$rw)/2,($sh-$rh)/2,0,0,$rw,$rh,$bw,$bh);
    //保存缩略图
    imagepng($small,$opath);
    
    //销毁创建的画布和原图
    imagedestroy($big);
    imagedestroy($small);
    return $path;
}

你可能感兴趣的:(生成缩略图)