Я пытаюсь обработать каталог изображений JPEG (примерно 600+, в диапазоне от 50k до 500k), используя PHP: GD для изменения размера и сохранения изображений, но я столкнулся с небольшим препятствием довольно рано , После корректной обработки всего 3 изображений (30K, 18K и 231K) я получаю допустимый объем памяти 16777216 байт исчерпан PHP Fatal error.
Я перебираю изображения и вызываю код ниже:
list($w, $h) = getimagesize($src);
if ($w > $it->width) {
$newwidth = $it->width;
$newheight = round(($newwidth * $h) / $w);
} elseif ($w > $it->height) {
$newheight = $it->height;
$newwidth = round(($newheight * $w) / $h);
} else {
$newwidth = $w;
$newheight = $h;
}
// create resize image
$img = imagecreatetruecolor($newwidth, $newheight);
$org = imagecreatefromjpeg($src);
// Resize
imagecopyresized($img, $org, 0, 0, 0, 0, $newwidth, $newheight, $w, $h);
imagedestroy($org);
imagejpeg($img, $dest);
// Free up memory
imagedestroy($img);
Я пытался освободить память с помощью функции imagedestroy
, но, похоже, это не оказало никакого влияния. Сценарий просто постоянно задыхается в строке кода imagecreatefromjpeg
.
Я проверил php.ini, и настройка memory_limit = 16M
кажется, что она работает правильно. Но я не могу понять, почему память заполняется. Разве это не должно освобождать память обратно сборщику мусора? Я действительно не хочу увеличивать параметр memory_limit. Это выглядит как плохой обходной путь, который потенциально может привести к появлению новых проблем в будущем.
К вашему сведению: я запускаю свой скрипт из командной строки. Это не должно влиять на функциональность, но может повлиять на ваш ответ, поэтому я решил упомянуть об этом.
Может кто-нибудь увидеть, пропускаю ли я что-то простое или здесь есть недостаток дизайна? Вы могли бы подумать, что это будет довольно простой задачей. Конечно, это должно быть возможно, верно?