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

PHP函数实现图片缩放与裁剪的方法

发布时间:2023-11-26 11:56:42

实现图片缩放与裁剪可以使用PHP的GD库,GD库是一个具有图形处理功能的扩展库。下面是一个使用GD库实现图片缩放与裁剪的示例代码。

<?php
/**
 * 图片缩放与裁剪函数
 *
 * @param string $srcPath 原始图片路径
 * @param string $dstPath 缩放与裁剪后的图片保存路径
 * @param int $newWidth 缩放后的图片宽度
 * @param int $newHeight 缩放后的图片高度
 * @param int $cropX 裁剪开始的横轴位置
 * @param int $cropY 裁剪开始的纵轴位置
 * @param int $cropWidth 裁剪的宽度
 * @param int $cropHeight 裁剪的高度
 * @param int $quality 图片质量(0-100,默认为75)
 *
 * @return bool 成功返回true,失败返回false
 */
function resizeAndCropImage($srcPath, $dstPath, $newWidth, $newHeight, $cropX, $cropY, $cropWidth, $cropHeight, $quality = 75) {
    // 获取原始图片信息
    $srcInfo = getimagesize($srcPath);
    if (!$srcInfo) {
        return false;
    }
  
    // 根据原始图片的mime类型创建相应的图片资源
    switch ($srcInfo[2]) {
        case IMAGETYPE_JPEG:
            $srcImage = imagecreatefromjpeg($srcPath);
            break;
        case IMAGETYPE_PNG:
            $srcImage = imagecreatefrompng($srcPath);
            break;
        case IMAGETYPE_GIF:
            $srcImage = imagecreatefromgif($srcPath);
            break;
        default:
            return false;
    }
  
    // 创建缩放后的空白图片资源
    $dstImage = imagecreatetruecolor($newWidth, $newHeight);
  
    // 将原始图片的内容复制到缩放后的图片上,进行缩放
    imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $srcInfo[0], $srcInfo[1]);
  
    // 创建要裁剪的空白图片资源
    $cropImage = imagecreatetruecolor($cropWidth, $cropHeight);
  
    // 将缩放后的图片的内容复制到要裁剪的图片上,进行裁剪
    imagecopy($cropImage, $dstImage, 0, 0, $cropX, $cropY, $cropWidth, $cropHeight);
  
    // 保存裁剪后的图片
    switch ($srcInfo[2]) {
        case IMAGETYPE_JPEG:
            imagejpeg($cropImage, $dstPath, $quality);
            break;
        case IMAGETYPE_PNG:
            imagepng($cropImage, $dstPath, $quality / 100 * 9);
            break;
        case IMAGETYPE_GIF:
            imagegif($cropImage, $dstPath);
            break;
        default:
            return false;
    }
  
    // 释放所占用的内存
    imagedestroy($srcImage);
    imagedestroy($dstImage);
    imagedestroy($cropImage);

    return true;
}

// 使用示例:将原始图片缩放到100x100尺寸,并将裁剪后的图片保存为output.jpg
resizeAndCropImage('input.jpg', 'output.jpg', 100, 100, 0, 0, 100, 100);

以上代码通过 resizeAndCropImage 函数实现图片的缩放与裁剪,函数的参数分别为原始图片路径、缩放与裁剪后的图片保存路径、缩放后的图片宽高、裁剪的位置与尺寸、图片质量。

函数中首先获取原始图片的信息,然后根据图片的mime类型创建相应的图片资源。接着创建缩放后的图片的资源,并使用 imagecopyresampled 函数将原始图片的内容复制到缩放后的图片上进行缩放。

然后创建要裁剪的图片的资源,并使用 imagecopy 函数将缩放后的图片的内容复制到要裁剪的图片上进行裁剪。

最后根据图片的mime类型将裁剪后的图片保存到指定的路径,并释放所占用的内存空间。

使用示例中将原始图片缩放到100x100尺寸,并将裁剪后的图片保存为output.jpg。