我正嘗試將圖像上傳到我創建的應用程序中。 .png圖像在文件系統中佔用約190KB,分辨率爲2000px寬,1667px高。我爲32MB設置了PHP的內存限制。 但是當我嘗試上傳這個PNG圖片,我相信很多人使用我的應用程序會做什麼,我發現了以下錯誤PNG上傳錯誤 - 分配的內存大小錯誤
Allowed memory size of 33554432 bytes exhausted (tried to allocate 13336000 bytes)
現在,當我計算到這些說我MB瞭解,它讀
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()。我在這裏加載圖像以降低分辨率,並設置圖像質量以優化存儲和查看帶寬。
經過進一步調查,我發現文件正在上傳,服務器上的文件大小再次爲190KB。所以你看到的那段代碼是它試圖再次拿起文件進行處理的地方。在此之前,沒有在哪裏文件被加載到內存一次,然後離開那裏沒有被破壞(我認爲會發生什麼)
如果有任何更多的信息,你可能需要,做問我和我會盡量相應地回答。預先:)每像素
發表一些代碼,以獲得更好的想法。 – Rikesh
使用ini_set('memory_limit','200M')像這樣設置內存大小 – Sundar
@Sundar爲什麼您需要200M來處理190Kb的圖像? – tlenss