изменить размер нескольких изображений в php без превышения лимита памяти - PullRequest
4 голосов
/ 12 января 2012

В настоящее время я пытаюсь получить форму, которая позволит загружать несколько изображений и изменять их размер на сервере с помощью PHP. Каждое загруженное клиентом изображение имеет размер около 2,5 МБ.

В настоящее время я использую функцию move_uploaded_file().

Нет проблем с переносом файлов на сервер. Проблема возникает, когда я пытаюсь обрезать. Не имея ImageMagick на своем хосте, я использую эту настройку (не весь код, а только то, что важно, это в цикле с $width и т. Д., Меняющимся для разных размеров культур)

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);

В нынешнем виде это будет работать только для 2 изображений. Если отправлено 3 или более файлов, я получаю ошибку «исчерпана память». Я исследовал это, поскольку мой предел памяти составляет 120 МБ. По-видимому, функция imagecreatefromjpeg использует много памяти, особенно если файл имеет большое разрешение (что у меня - следовательно, зачем мне их обрезать / изменить размер).

Кто-нибудь знает о более эффективном подходе к этой задаче? Я исследовал в Google, но все используют ту же технику, что и я.

1 Ответ

5 голосов
/ 12 января 2012

Используйте imagedestroy , чтобы очистить любую память, связанную с $ image и $ image_p:

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);
imagedestroy($image);
imagedestroy($image_p);
...