PHP自定义图片缩放函数实现等比例不失真缩放的方法

下面是“PHP自定义图片缩放函数实现等比例不失真缩放的方法”的完整攻略:

下面是“PHP自定义图片缩放函数实现等比例不失真缩放的方法”的完整攻略:

1. 要实现等比例不失真的缩放,需要使用到图像处理库gd库

gd库是一种图像处理函数库,提供了很多操作图像和其它类型文件的API。gd库需要在PHP环境中进行安装和配置,可在PHP.ini中开启相关gd库的扩展。

2. 基于gd库的缩放实现

gd库中提供了函数imagecopyresampled()用于对图像进行缩放处理。我们可以通过以下代码来使用gd库并进行图片缩放:

/**
 * 缩放图片
 *
 * @param  string   $srcImg  待缩放的图片路径
 * @param  int      $thumbWidth  缩放后图片的宽度
 * @param  int      $thumbHeight  缩放后图片的高度
 * @param  string   $thumbPath  缩放后的图片路径
 * @return bool|string  是否成功缩放,成功返回缩放后的图片路径,失败返回false
 */
function resizeImage($srcImg, $thumbWidth, $thumbHeight, $thumbPath) {
    list($width, $height, $cap) = getimagesize($srcImg);

    $thumbImage = imagecreatetruecolor($thumbWidth, $thumbHeight);
    if (!$thumbImage) {
        return false;
    }

    $sourceImage = $this->createSrcImage($srcImg, $cap);
    if (!$sourceImage) {
        return false;
    }

    // 缩放图片
    if (!imagecopyresampled($thumbImage, $sourceImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $width, $height)) {
        return false;
    }

    // 保存缩放后的图片
    $result = $this->saveThumbImage($thumbImage, $thumbPath);
    if (!$result) {
        return false;
    }

    // 释放资源
    imagedestroy($sourceImage);
    imagedestroy($thumbImage);

    return $thumbPath;
}

/**
 * 创建源图片资源
 *
 * @param string  $path  图片路径
 * @param int     $type  图片类型
 * @return bool|resource resource 或者 false
 */
function createSrcImage($path, $type) {
    switch ($type) {
        case 1:
            $src = imagecreatefromgif($path);
            break;
        case 2:
            $src = imagecreatefromjpeg($path);
            break;
        case 3:
            $src = imagecreatefrompng($path);
            break;
        default:
            $src = false;
            break;
    }

    return $src;
}

/**
 * 保存缩放后的图片
 *
 * @param  resource $thumbImage  缩放后的图片资源
 * @param  string   $thumbPath  缩放后的图片路径
 * @return boolean  是否成功保存图片
 */
function saveThumbImage($thumbImage, $thumbPath) {
    switch (pathinfo($thumbPath, PATHINFO_EXTENSION)) {
        case 'gif':
            $result = imagegif($thumbImage, $thumbPath);
            break;
        case 'jpg':
        case 'jpeg':
            $result = imagejpeg($thumbImage, $thumbPath);
            break;
        case 'png':
            $result = imagepng($thumbImage, $thumbPath);
            break;
        default:
            $result = false;
            break;
    }

    return $result;
}

以上代码实现了图片的等比例缩放,并保证图片不失真。具体实现方法是:首先通过getimagesize()获取原图大小,再根据缩放后图像的大小调用imagecreatetruecolor()函数新建一个缩放后的图像资源,使用imagecopyresampled()函数将原图缩放并复制到新图中,最后通过判断后缀名调用相应函数保存缩放后的图像。

示例

示例1

$srcImg = 'path/to/image.jpg';
$thumbWidth = 200;
$thumbHeight = 200;
$thumbPath = 'path/to/thumb_image.jpg';

$result = resizeImage($srcImg, $thumbWidth, $thumbHeight, $thumbPath);

if ($result) {
    echo '缩放成功,缩略图路径:' . $result;
} else {
    echo '缩放失败';
}

示例2

$srcImg = 'path/to/image.png';
$thumbWidth = 100;
$thumbHeight = 100;
$thumbPath = 'path/to/thumb_image.png';

$result = resizeImage($srcImg, $thumbWidth, $thumbHeight, $thumbPath);

if ($result) {
    echo '缩放成功,缩略图路径:' . $result;
} else {
    echo '缩放失败';
}

以上就是"PHP自定义图片缩放函数实现等比例不失真缩放的方法"的完整攻略和示例。

本文标题为:PHP自定义图片缩放函数实现等比例不失真缩放的方法

基础教程推荐