Каков наиболее эффективный способ изменения размера больших изображений в PHP?
В настоящее время я использую GD функцию imagecopyresampled для получения изображений с высоким разрешением и чистое изменение размера до размера для веб-сайта (примерно 700 пикселей в ширину на 700 пикселей).
Это отлично работает на небольших (менее 2 МБ) фотографиях, и вся операция изменения размера занимает меньше секунды на сервере. Тем не менее, сайт в конечном итоге будет обслуживать фотографов, которые могут загружать изображения размером до 10 МБ (или изображения размером до 5000x4000 пикселей).
Выполнение такого рода операции изменения размера с большими изображениями увеличивает использование памяти с большим размахом (более крупные изображения могут увеличивать использование памяти для script за 80 МБ). Есть ли способ сделать операцию изменения размера более эффективной? Должен ли я использовать альтернативную библиотеку изображений, такую как 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);