我编写了一个脚本来尝试将图像的尺寸重新调整为目标(在我的示例中为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的(特定)图像。所以我不确定确切原因或传入文件大小的确定失败。
答案 0 :(得分:0)
如果我们希望认为图像的重新采样是正确的,那么您应该尝试imagedestroy($tmp);
而不是取消设置。 Haven没有测试它如何影响记忆,但实际上应该破坏资源。