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