【问题标题】:Estimate required memory for libGD operation估计 libGD 操作所需的内存
【发布时间】:2011-04-03 00:50:33
【问题描述】:

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

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

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

测试表明,这比库实际使用的内存要多得多。谁能推荐一个更好的方法?

【问题讨论】:

  • 你的意思是它使用比宽 x 高 x 4 多得多,还是少得多?
  • 顺便在这里见到你很高兴!
  • 澄清:libGD 使用的内存少于我的近似计算,导致调整大小被拒绝,这本来可以毫无问题地完成。

标签: php memory image-processing gdlib


【解决方案1】:

【讨论】:

    【解决方案2】:

    我想必须可以通过分析 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 参数)

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 2017-02-28
      • 2020-10-02
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多