2011-03-09 38 views
6

我想对用户上传的图像设置一些限制,所以处理它们的脚本永远不会耗尽内存。如何计算处理图像所需的内存?

需要更多记忆的图像是具有更高分辨率的图像。它们不需要以字节为单位的大尺寸。例如,一张分辨率为4000x2500的46kb图像和一些透明胶片(PNG)花费了大约90mb的大小来调整大小。

有没有办法预先准确计算所需的内存?

任何想法?

+1

我对图像处理知之甚少,但是解压缩后的位图文件大小并不是一般的大概? – drudge 2011-03-09 23:43:34

+0

我使用的一般经验法则:水平*垂直* 4只是为了使用GD加载图像,加上相同的计算大小的图像...以字节为单位 – 2011-03-09 23:51:51

回答

3

通常,对于源图像和目标图像,经验法则是width x height x 4(rgba),并且不要忘记脚本本身已经消耗的内存量。

+1

它不工作。我有这个:(4000 * 2462 + 300 * 185)* 4/1024/1024 = 37.78mb。没有图像处理部分的脚本大约需要1mb。随着图像处理,需要86.77mb。 – HappyDeveloper 2011-03-10 00:11:05

+0

这是奇特的,它一直为我工作。对于测试,您可以在图像调用之前和之后始终尝试打印'memory_get_usage(true)',让您知道使用了多少,并设计自己的算法。 – steveo225 2011-03-10 00:16:22

+0

也许我正在使用的图像库是在做一些愚蠢的事情。但是我用另一个库进行了测试,发生了同样的情况。如果我只使用GD,我相信它可以正常工作,所以我会接受你的答案。 – HappyDeveloper 2011-03-10 00:30:11

0

文件上传后使用GD库可以使用getimagesize()。然后,您可以检查高度和宽度,以确定是要处理它还是返回一个错误,并且还会返回每种颜色使用的位数,如果您还想考虑这一点。

因此,您的验证可以在文件大小和尺寸。