2

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

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

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

测试表明,这比库实际使用的内存要多得多。任何人都可以提出更好的方法吗?

4

2 回答 2

2

你应该看看这个评论还有这个

于 2010-08-24T09:43:35.013 回答
1

我想通过分析 GD 的源代码一定可以找出 GD 的内存使用峰值imagecopyresampled,但这可能很难,需要扩展分析,因版本而异,而且通常不可靠。

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

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

file显然,清理参数)

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

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

于 2010-08-24T08:11:00.023 回答