代码之家  ›  专栏  ›  技术社区  ›  Andreas Gohr

估计libGD操作所需的内存

  •  2
  • Andreas Gohr  · 技术社区  · 14 年前

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

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

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

    测试表明,这比图书馆实际使用的内存要多得多。有人能提出更好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Alix Axel    14 年前
        2
  •  1
  •   Pekka    14 年前

    我可以想象 可以通过分析找出GD的峰值内存使用量 imagecopyresampled 的源代码,但这可能是困难的,需要扩展的分析,不同版本的不同,通常是不可靠的。

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

    file 参数,显然)

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

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