PNG上传错误-分配的内存大小错误

Prathamesh Datar

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章