PHP перестроение изображений: использование памяти

Неустранимая ошибка : допустимый размер памяти 33554432 байт исчерпан (пытался выделить 4912 байт) в /var/www/development/example/system/libraries/Image.php в строке 130 .

Имеющееся изображение JPEG не имеет особо большого размера файла (741 КБ). Мы использовали этот же код для восстановления больших изображений. Однако изображение имеет необычно большие размеры (4912px x 3264px). Будет ли это иметь эффект?

Что определяет использование памяти, когда PHP перестраивает изображение? Это только размер файла? Размеры? Плотность цвета? Тип файла?

Линия, на которой он

$f1 = 'imagecreatefrom' . $tag; $src = $f1($file); 

Я думаю, что этого достаточно. Он не дошел до попытки восстановить изображение. Погрузить его в память было достаточно, чтобы сломать его.

Solutions Collecting From Web of "PHP перестроение изображений: использование памяти"

Как сказал рики, установите ограничение памяти выше, если сможете. Также убедитесь, что размеры важнее размера файла (поскольку размер файла для сжатого изображения). Когда вы открываете изображение в GD, каждый пиксель получает на него 3-4 байта, RGB и, возможно, A. Таким образом, ваше изображение размером 4912px x 3264px должно использовать 48,098,304 до 64,131,072 байт памяти, плюс есть накладные расходы и любая другая память скрипт используется.

Увеличьте размер буфера памяти

php_value memory_limit 64M в вашем .htacess

или ini_set('memory_limit','64M'); в вашем php-файле

Это зависит от вашей импликации. в последний раз, когда я работал над файлом csv с более чем 500 000 записей, я получил то же сообщение. Позже я представляю классы и пытаюсь закрыть открытые объекты. это уменьшает потребление мембран. если вы открываете изображение и редактируете его. это означает, что он загружается в память. в этом случае размер действительно пункт. если вы работаете с несколькими изображениями. Я запишусь на одно изображение и закрою это изображение. По моему опыту, когда я работал над файлами PDF-файлов, чтобы проверить метки обрезки. У меня была такая же ошибка.

 //you can set the memory limits values // in htaccess php_value memory_limit 64M //or in you using following in php ini_set('memory_limit', '128M'); //or update it in your php.ini file 

но если вы оптимизируете свой код. и используйте ориентированный на объект aproach, тогда потребление памяти будет очень меньше. потому что в том, что каждый объект имеет свою собственную область действия, и из этой области он уничтожается.

Размер используемой памяти зависит от размера и глубины цвета. Я также столкнулся с этой проблемой несколько лет назад, создав портфолио для фотографов. Единственный способ правильно решить эту проблему – переключить вашу библиотеку изображений с GD на фантазию. Imagick потребляет гораздо меньше памяти и не привязан к пределу памяти PHP.

Я должен сказать, что изображения, сделанные фотографами, были до 30MP. И установка предела памяти более 1024 МБ не имеет смысла в моих глазах.