我正在尝试将图像上传到正在创建的应用程序中。.png图像在文件系统中占用约190KB,分辨率为2000px宽和1667 px高。我已将PHP的内存限制设置为32MB。但是,当我尝试上传此.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。因此,您所看到的代码是它试图再次拾取文件进行处理的地方。在此之前,在此过程中,没有地方将文件一次加载到内存中,然后在不被销毁的情况下保留在那里(我认为那是会发生的事情)
如果您需要更多信息,请询问I,我将尝试做出相应答复。
提前致谢 :)
仅对于imagecreatefrompng / imagecreatefromjpeg,需要每个像素的图像宽度x图像高度x 4字节(32位)
因此,根据您的情况,大约为12MB
GD lib和其他PHP进程仅剩下20MB。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句