图片缩放的基本原理
- 原图尺寸:图片的原始宽度和高度。
- 缩放比例:新的宽度和高度与原图尺寸的比例。
- 等比例缩放:保持图片的宽高比不变,仅调整尺寸。
使用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方法对图像进行缩放。最后,我们将新图像保存到磁盘上。