天天看点

PHP等比例缩放图片(最大宽或高)

PHP做前后端图片上传的时候 需要做图片缩放处理

结合了网上很多例子整理的一个方法

//方法参数为图片名
function changeSize($str_file)
{
    $size=getimagesize($str_file);
    //这个方法会返回一个数组,第一个元素 (索引值 0) 是图片的高度,单位是像素 (pixel)。第二个元素 (索引值 1) 是图片的宽度。第三个元素 (索引值 2) 是图片的文件格式,其值 1 为 GIF 格式、 2 为 JPEG/JPG 格式、3 为 PNG 格式。第四个元素 (索引值 3) 为图片的高与宽字符串,height=xxx width=yyy。

    //因为PHP只能对资源进行操作,所以要对需要进行缩放的图片进行拷贝,创建为新的资源
    //根据图片的格式使用不同的方法
    if($size[]==)
        $src=imagecreatefromgif($str_file);
    if($size[]==)
        $src=imagecreatefromjpeg($str_file);
    if($size[]==)
        $src=imagecreatefrompng($str_file);

    //取得源图片的宽度和高度
    $w = $size['0'];
    $h = $size['1'];

    //指定缩放出来的最大的宽度或高度
    $max = ;

    //根据最大值为300,算出另一个边的长度,得到缩放后的图片宽度和高度
    if ($w > $h) {
        $w = $max;
        $h = $h * ($max / $size['0']);
    } else {
        $h = $max;
        $w = $w * ($max / $size['1']);
    }

    //声明一个$w宽,$h高的真彩图片资源,此时只是一个有宽高的黑白图片。
    $image = imagecreatetruecolor($w, $h);

    //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)返回值为bool
    imagecopyresampled($image, $src, , , , , $w, $h, $size['0'], $size['1']);

    //将图片塞进去,也是根据图片不同的格式选用不同的方法,返回值为bool。
    if($size[]==)
        $result = imagegif($image,$str_file);
    if($size[]==)
        $result = imagejpeg($image,$str_file);
    if($size[]==)
        $result = imagepng($image,$str_file);

    //销毁资源
    imagedestroy($image);

 return $result ;
}