Эффективное изменение размера 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);

Ответы на вопрос(9)

Ваш ответ на вопрос