调整图像大小时,PHP内存不足

时间:2015-03-14 21:46:06

标签: php

我编写了一个脚本来尝试将图像的尺寸重新调整为目标(在我的示例中为25kb)。但有时我会得到

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 5529 bytes)

在此过程中。也许有一些技术(我试过unset())在这个循环中释放空间。

private function resizeTo($target){
    $x = 9;
    for($x; $x > 0; $x--){
        // Expose w/h from $this->info
        list($width, $height) = $this->info;
        $newWidth = $width * $x / 10;           
        $newHeight = ($height / $width) * $newWidth;
        $tmp = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($tmp, $this->image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

        if (file_exists($this->finalPath)) 
            unlink($this->finalPath);

        imagepng($tmp, $this->finalPath);
        if(filesize($this->finalPath) <= $target) return true;
        else unset($tmp);
    }
    $this->error = "Could not resize to $target kb after 10 attempts. Please upload a smaller image.";
}

图片来自$ _FILES []中的表单上传。

难以识别的部分是它会在200kb的图像上失败,但会传递330 kb的(特定)图像。所以我不确定确切原因或传入文件大小的确定失败。

1 个答案:

答案 0 :(得分:0)

如果我们希望认为图像的重新采样是正确的,那么您应该尝试imagedestroy($tmp);而不是取消设置。 Haven没有测试它如何影响记忆,但实际上应该破坏资源。