imagecreatefromjpeg耗尽内存限制,但这是错误的

时间:2018-05-09 13:30:43

标签: php

我将PHP配置文件中的memory_limit设置为100MB。 我有一个图像上传脚本,对于一些小图像工作正常,但我试图上传一个相对较大的图像(13MB),并得到以下错误:

Allowed memory size of 104857600 bytes exhausted (tried to allocate 45056 bytes)

指向此行:$image = imagecreatefromjpeg($file['tmp_name']);

如果它远低于限制,它会被耗尽的原因是什么?广告它只尝试分配45056字节,这只是0.045 MB?

由于

1 个答案:

答案 0 :(得分:0)

这不是错误,你只是误解了它告诉你的内容。它尝试将额外的 45056字节分配给它已经拥有的任何内存,并且超过了104857600的限制。

至于图像使用那么多内存的原因:JPEG是一种压缩存储格式。为了在屏幕上显示它,计算机需要知道每个单独的像素。每个像素有三个颜色值(在一些图像格式中甚至更多,加上可能是透明层),每个通常大1个字节(某些格式使用更多,其他格式更少)。给定5000×10000像素的图像:

5000 * 10000 * 3 / 1024 / 1024 = 143.0511474609 MB

要一次将所有像素存储在内存中以便它可以操作或显示图像,您需要143 MB的可用RAM。基本上,将JPEG转换为BMP,你知道真正需要多少空间。

相关问题