在 PHP 中高效调整 JPEG 图像大小
在 PHP 中调整大图像大小的最有效方法是什么?
我目前正在使用GD函数图像复制采样来拍摄高分辨率图像,并将它们的大小干净利落地调整为Web查看的大小(大约700像素宽,700像素高)。
这适用于小(小于2 MB)照片,整个调整大小操作在服务器上花费的时间不到一秒钟。但是,该网站最终将为可能上传最大10 MB图像(或最大5000x4000像素的图像)的摄影师提供服务。
对大图像执行这种调整大小操作往往会使内存使用量增加非常大的幅度(较大的图像可能会使脚本的内存使用率达到 80 MB 以上)。有没有办法使这种调整大小操作更有效率?我应该使用备用图像库,如 ImageMagick 吗?
现在,调整大小代码看起来像这样
function makeThumbnail($sourcefile, $endfile, $thumbwidth, $thumbheight, $quality) {
// Takes the sourcefile (path/to/image.jpg) and makes a thumbnail from it
// and places it at endfile (path/to/thumb.jpg).
// Load image and get image size.
$img = imagecreatefromjpeg($sourcefile);
$width = imagesx( $img );
$height = imagesy( $img );
if ($width > $height) {
$newwidth = $thumbwidth;
$divisor = $width / $thumbwidth;
$newheight = floor( $height / $divisor);
} else {
$newheight = $thumbheight;
$divisor = $height / $thumbheight;
$newwidth = floor( $width / $divisor );
}
// Create a new temporary image.
$tmpimg = imagecreatetruecolor( $newwidth, $newheight );
// Copy and resize old image into new image.
imagecopyresampled( $tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height );
// Save thumbnail into a file.
imagejpeg( $tmpimg, $endfile, $quality);
// release the memory
imagedestroy($tmpimg);
imagedestroy($img);