2010-08-24 30 views
2

在尝试使用libGD在PHP中调整图像大小之前,我想检查是否有足够的内存可用于执行此操作,因为“内存不足”会彻底杀死PHP进程,并且可以不会被捉住。为libGD操作估计所需内存

我的想法是,我需要的内存4字节,在原有的每个像素(RGBA)和新形象:

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

试验表明,这比库更多的内存似乎真的使用。任何人都可以提出更好的方法?

+0

你的意思是它使用远远多于宽x高x 4或更少? – 2010-08-24 07:44:00

+0

很高兴见到你在这里! – 2010-08-24 08:05:21

+0

澄清:libGD使用的内存少于我近似计算的内存,导致调整大小被拒绝,而这可能是没有问题的。 – 2010-08-24 09:03:25

回答

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参数,很明显)

如果该脚本失败并出现“内存不足”错误,则会知道图像太大。

如果成功调整图像大小,它可能会返回包含调整大小结果的临时文件的路径。事情会从那里正常进行。