Я пытаюсь загрузить изображение в приложение, которое я создаю. Изображение .png занимает около 190 КБ в файловой системе, а разрешение - 2000 пикселей в ширину и 1667 пикселей в высоту. Я установил ограничение памяти для PHP для 32 МБ. Но когда я пытаюсь загрузить этот .png изображение, которое я считаю, много людей, используя мое приложение будет делать, я получаю следующее сообщение об ошибкеОшибка загрузки PNG - выделенная ошибка размера памяти
Allowed memory size of 33554432 bytes exhausted (tried to allocate 13336000 bytes)
Теперь, когда я вычислил их в МБ сказать, я понял, что он прочитал
Allowed memory size of 32MB exhausted (tried to allocate 12.71MB)
так что я не понимаю, как же файл, который показывает размер 190KB в файловой системе в конечном итоге занимает так много места в памяти? Это что-то о том, как обрабатываются файлы .png в памяти, о которых я не знаю?
Вот код
private function optimise_image($source_path, $destination_path){
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_path);
//Using this source path, we'll create a memory instance of the image for processing
$source_image_ratio = $source_image_width/$source_image_height;
switch ($source_image_type) {
case IMAGETYPE_GIF:
$source_gd_image = imagecreatefromgif($source_path);
break;
case IMAGETYPE_JPEG:
$source_gd_image = imagecreatefromjpeg($source_path);
break;
case IMAGETYPE_PNG:
$source_gd_image = imagecreatefrompng($source_path);
break;
}
Ошибка встречающийся в imagecreatefrompng(). Я загружаю изображение здесь, чтобы уменьшить его разрешение и установить его качество для оптимизации хранения и пропускной способности при просмотре.
Изучив еще немного, я обнаружил, что файл загружается, а размер файла на сервере - 190 КБ. Таким образом, фрагмент кода, который вы видите, - это то место, где он пытается снова найти файл для обработки. До этого нет места в процессе, когда файл загружается в память один раз, а затем остается там без разрушения (что, как я думал, было бы тем, что могло бы произойти)
Если вам нужна дополнительная информация, сделайте спросите, я и я попытаемся ответить соответственно.
Заранее спасибо :)
Опубликуйте код, чтобы получить лучшее представление об этом. – Rikesh
установить размер памяти, используя ini_set ('memory_limit', '200M'), как это – Sundar
@Sundar Зачем вам нужно 200M для изображения 190Kb? – tlenss