PHP从上传的图像创建3个不同大小的缩略图图像

时间:2015-01-27 04:13:20

标签: php php-gd

我正在尝试从同一个上传的图像创建3个不同大小的缩略图图像。目前,我使用下面的代码创建1个150px宽的缩略图。

有没有一种简单的方法可以做到这一点,而不是为我需要的每个缩略图重复相同的代码三次?

我正在尝试创建3种尺寸的缩略图:750px宽,150px宽和70px宽。

这是我用来做150Px宽的缩略图的代码。

PHP是否具有执行此类操作的功能,或者为每个尺寸重复下面的代码我需要我唯一的选择。

if(file_exists($thisImage)) {

    $imageName = $thisImage;
    $imageInfo = finfo_open(FILEINFO_MIME_TYPE);
    $imageType = finfo_file($imageInfo, $imageName);
    finfo_close($imageInfo);


    if($imageType == 'image/pjeg' || $imageType == 'image/jpeg' || $imageType == 'image/jpg') {
        $imgSource = imagecreatefromjpeg($thisImage);
    } elseif ($imageType == 'image/png') {
        $imgSource = imagecreatefrompng($thisImage);
    } elseif ($imageType == 'image/gif') {
        $imgSource = imagecreatefromgif($thisImage);
    } else {
        $imgSource = false;
        return false;
    }

    if($imgSource) {
        list($width,$height)=getimagesize($thisImage);

        $thumbImageWidth = 150;
        $thumbImageHeight = ($height/$width)*$thumbImageWidth;
        $tempThumbImage = imagecreatetruecolor($thumbImageWidth,$thumbImageHeight);

        if(!imagecopyresampled($tempThumbImage,$imgSource,0,0,0,0,$thumbImageWidth,$thumbImageHeight,$width,$height)) return false;

        $thumbImageTarget = $thisPath.$thisName;

        if(!imagejpeg($tempThumbImage,$thumbImageTarget,100)) return false;

        if(!imagedestroy($imgSource)) return false;

        if(!imagedestroy($tempThumbImage)) return false;

        if(!unlink($thisImage)) return false;

        return true;
    }
} else {
    return false;
}

2 个答案:

答案 0 :(得分:0)

PHP没有这个功能。但是你可以创建一个名为resize($width, $heigh)的函数并将你的调整大小部分放入。

答案 1 :(得分:0)

zairwolf的回答基本上是正确的,虽然不彻底。

您需要创建user defined function

resize($thisImage, 70, $thisPath.$thisName."-thumb1.jpg");
resize($thisImage, 150, $thisPath.$thisName."-thumb2.jpg");
resize($thisImage, 750, $thisPath.$thisName."-thumb3.jpg");

function resize($imageName, $thumbImageWidth, $thumbImageTarget)
{
    if(file_exists($imageName)) {

        $imageInfo = finfo_open(FILEINFO_MIME_TYPE);
        $imageType = finfo_file($imageInfo, $imageName);
        finfo_close($imageInfo);


        if($imageType == 'image/pjeg' || $imageType == 'image/jpeg' || $imageType == 'image/jpg') {
            $imgSource = imagecreatefromjpeg($imageName);
        } elseif ($imageType == 'image/png') {
            $imgSource = imagecreatefrompng($imageName);
        } elseif ($imageType == 'image/gif') {
            $imgSource = imagecreatefromgif($imageName);
        } else {
            $imgSource = false;
            return false;
        }

        if($imgSource) {
            list($width,$height)=getimagesize($imageName);

            $thumbImageHeight = ($height/$width)*$thumbImageWidth;
            $tempThumbImage = imagecreatetruecolor($thumbImageWidth,$thumbImageHeight);

            if(!imagecopyresampled($tempThumbImage,$imgSource,0,0,0,0,$thumbImageWidth,$thumbImageHeight,$width,$height)) return false;


            if(!imagejpeg($tempThumbImage,$thumbImageTarget,100)) return false;

            if(!imagedestroy($imgSource)) return false;

            if(!imagedestroy($tempThumbImage)) return false;

            if(!unlink($imageName)) return false;

            return true;
        }
    } else {
        return false;
    }
}