在尝试使用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;
}
测试显示,这个内存比图书馆真的好多了。谁能提出更好的方法?
答案 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
参数)
如果该脚本因“内存不足”错误而失败,您将知道图像太大。
如果成功设法调整图像大小,它可以返回包含调整大小结果的临时文件的路径。通常会从那里开始。