欢迎访问宙启技术站
智能推送

把图片缩小的PHP函数

发布时间:2023-06-26 16:36:19

在编程中,经常会遇到需要把图片缩小的需求。我们可以使用PHP中的GD库来实现这个功能。GD库是一个用于图片处理的库,可以实现图片缩放、旋转、裁剪等多种操作。

在使用GD库之前,需要确认服务器的PHP版本是否已经安装了GD库。可以通过在PHP代码中使用phpinfo()函数来查看。

下面介绍一个用于把图片缩小的PHP函数。

/**
 * 把图片缩小至指定宽度和高度
 *
 * @param string $srcImgPath 源图片路径
 * @param string $dstImgPath 目标图片路径
 * @param int $width 目标图片宽度
 * @param int $height 目标图片高度
 * @return bool 是否成功缩小图片
 */
function resizeImage($srcImgPath, $dstImgPath, $width, $height)
{
    list($srcWidth, $srcHeight, $srcType) = getimagesize($srcImgPath);
    switch ($srcType) {
        case IMAGETYPE_JPEG:
            $srcImg = imagecreatefromjpeg($srcImgPath);
            break;
        case IMAGETYPE_GIF:
            $srcImg = imagecreatefromgif($srcImgPath);
            break;
        case IMAGETYPE_PNG:
            $srcImg = imagecreatefrompng($srcImgPath);
            break;
        default:
            return false;
    }

    $dstImg = imagecreatetruecolor($width, $height);
    $srcAspectRatio = $srcWidth / $srcHeight;
    $dstAspectRatio = $width / $height;
    if ($dstAspectRatio > $srcAspectRatio) {
        $dstHeight = $height;
        $dstWidth = $width * $srcAspectRatio;
    } else {
        $dstWidth = $width;
        $dstHeight = $height / $srcAspectRatio;
    }
    $dstX = ($width - $dstWidth) / 2;
    $dstY = ($height - $dstHeight) / 2;
    imagecopyresampled($dstImg, $srcImg, $dstX, $dstY, 0, 0, $dstWidth, $dstHeight, $srcWidth, $srcHeight);

    switch ($srcType) {
        case IMAGETYPE_JPEG:
            imagejpeg($dstImg, $dstImgPath);
            break;
        case IMAGETYPE_GIF:
            imagegif($dstImg, $dstImgPath);
            break;
        case IMAGETYPE_PNG:
            imagepng($dstImg, $dstImgPath);
            break;
    }

    imagedestroy($srcImg);
    imagedestroy($dstImg);

    return true;
}

这个函数的参数包括源图片路径、目标图片路径、目标宽度、目标高度。函数中首先使用getimagesize()函数获取源图片的宽度、高度和类型。然后根据源图片类型使用imagecreatefrom*()函数创建源图片资源,其中*表示图片类型,如imagecreatefromjpeg()表示创建JPEG图片资源。

接着使用imagecreatetruecolor()函数创建目标图片资源。这个函数的参数是目标图片的宽度和高度。然后根据源图片宽高比和目标图片宽高比计算出目标图片的宽度和高度。如果目标宽高比大于源宽高比,则目标图片的高度等于指定高度,宽度等于目标高度乘以源宽高比。否则目标图片的宽度等于指定宽度,高度等于目标宽度除以源宽高比。

最后使用imagecopyresampled()函数对源图片和目标图片进行缩放,并使用image*()函数保存目标图片,其中*仍然表示图片类型。

最后,销毁资源,返回是否成功缩小图片。需要注意的是,如果目标宽高比与源宽高比不同,缩放后的图片可能会出现留白或部分内容被裁剪的情况。