估计libGD操作所需的内存

时间:2010-08-24 07:42:27

标签: php memory image-processing gdlib

在尝试使用libGD在PHP中调整图像大小之前,我想检查是否有足够的内存可用于执行操作,因为“内存不足”完全杀死了PHP进程并且无法捕获。< / p>

我的想法是,我需要在原始图像和新图像中为每个像素(RGBA)提供4个字节的内存:

// check available memory
if(!is_mem_available(($from_w * $from_h * 4) + ($to_w * $to_h * 4))){
     return false;
}

测试显示,这个内存比图书馆真的好多了。谁能提出更好的方法?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我想通过分析imagecopyresampled的源代码,必须才能找到GD的峰值内存使用量,但这可能很难,需要扩展性能分析,因版本而异,并且通常不可靠。

根据您的具体情况,我们会想到一种不同的方法:调整图像大小时,在同一服务器上调用另一个PHP脚本,但使用http:

$file = urlencode("/path/to/file");
$result = file_get_contents("http://example.com/dir/canary.php?file=$file&width=1000&height=2000"); 

(显然清理file参数)

如果该脚本因“内存不足”错误而失败,您将知道图像太大。

如果成功设法调整图像大小,它可以返回包含调整大小结果的临时文件的路径。通常会从那里开始。