我正尝试将图像上传到我创建的应用程序中。 .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