图片缩放的基本原理

  • 原图尺寸:图片的原始宽度和高度。
  • 缩放比例:新的宽度和高度与原图尺寸的比例。
  • 等比例缩放:保持图片的宽高比不变,仅调整尺寸。

使用GD库进行图片等比例缩放

<?php
function ImageShrink($imgfile, $minx, $miny) {
    // 获取大图信息
    $imgarr = getimagesize($imgfile);
    $maxx = $imgarr[0]; // 宽
    $maxy = $imgarr[1]; // 高
    $maxt = $imgarr[2]; // 格式
    $maxm = $imgarr['mime']; // mime类型

    // 大图资源
    $maxim = imagecreatefromjpeg($imgfile);

    // 缩放判断
    if (($minx / $maxx) > ($miny / $maxy)) {
        $scale = $miny / $maxy;
    } else {
        $scale = $minx / $maxx;
    }

    // 对所求值进行取整
    $minx = floor($maxx * $scale);
    $miny = floor($maxy * $scale);

    // 创建新图像
    $newim = imagecreatetruecolor($minx, $miny);

    // 复制并调整大小
    imagecopyresampled($newim, $maxim, 0, 0, 0, 0, $minx, $miny, $maxx, $maxy);

    // 输出或保存新图像
    imagejpeg($newim, 'shrink_' . $imgfile);
    imagedestroy($newim);
    imagedestroy($maxim);
}
?>

在这个示例中,我们首先获取了原图的尺寸信息,然后根据缩放比例计算出新图像的尺寸。接着,我们创建了一个新的图像资源,并使用imagecopyresampled函数将原图复制到新图像中,保持等比例缩放。最后,我们将新图像保存到磁盘上。

使用Imagick库进行图片等比例缩放

<?php
function ImageShrinkImagick($imgfile, $minx, $miny) {
    // 加载图像
    $image = new Imagick($imgfile);

    // 获取图像尺寸
    $width = $image->getImageWidth();
    $height = $image->getImageHeight();

    // 计算缩放比例
    $scale = min($minx / $width, $miny / $height);

    // 设置新图像尺寸
    $newWidth = $width * $scale;
    $newHeight = $height * $scale;

    // 缩放图像
    $image->resizeImage($newWidth, $newHeight, Imagick::FILTER_LANCZOS, 1);

    // 输出或保存新图像
    $image->writeImage('shrink_' . $imgfile);
    $image->clear();
    $image->destroy();
}
?>

在这个示例中,我们首先使用Imagick类加载了图像,然后获取了图像的尺寸。接着,我们计算了缩放比例,并使用resizeImage方法对图像进行缩放。最后,我们将新图像保存到磁盘上。

总结