gpt4 book ai didi

php - 尝试在 php 中调整图像大小时如何处理此内存泄漏?

转载 作者:行者123 更新时间:2023-12-02 05:17:31 25 4
gpt4 key购买 nike

我尝试调整一个目录中所有图像的大小。在我尝试调整包含 70 张图片的目录之前,我的代码一直有效。我已经使用了 imagedestroy 和 unset。但我仍然失败,出现“ fatal error :允许的 67108864 字节内存大小耗尽(试图分配 17232 字节)”。(我的 php 内存设置为 64M,无法修改)

$file = scandir ( $dir );
foreach ( $file as $key => $filename ) {
$src = $dir . '/' . $filename;
$dst = $dir . '/' . $filename;
$width = 660; // max width
$height = 2000; // max height
$message = image_resize ( $src, $dst, $width, $height, $crop = 0 );
if ($message == 1)
echo "$filename resize success!</br>";
else
echo "$filename $message</br>";
}

function image_resize($src, $dst, $width, $height, $crop = 0) {
if (! list ( $w, $h ) = getimagesize ( $src ))
return "Unsupported picture type!";

$type = strtolower ( substr ( strrchr ( $src, "." ), 1 ) );
if ($type == 'jpeg')
$type = 'jpg';
switch ($type) {
case 'bmp' :
$img = imagecreatefromwbmp ( $src );
break;
case 'gif' :
$img = imagecreatefromgif ( $src );
break;
case 'jpg' :
$img = imagecreatefromjpeg ( $src );
break;
case 'png' :
$img = imagecreatefrompng ( $src );
break;
default :
return "Unsupported picture type!";
}

// resize
if ($crop) {
if ($w < $width or $h < $height) {
imagedestroy ( $img );
unset ( $img );
return "Picture is too small!";
}
$ratio = max ( $width / $w, $height / $h );
$h = $height / $ratio;
$x = ($w - $width / $ratio) / 2;
$w = $width / $ratio;
} else {
if ($w < $width and $h < $height) {
imagedestroy ( $img );
unset ( $img );
return "Picture is too small!";
}
$ratio = min ( $width / $w, $height / $h );
$width = $w * $ratio;
$height = $h * $ratio;
$x = 0;
}

$new = imagecreatetruecolor ( $width, $height );

// preserve transparency
if ($type == "gif" or $type == "png") {
imagecolortransparent ( $new, imagecolorallocatealpha ( $new, 0, 0, 0, 127 ) );
imagealphablending ( $new, false );
imagesavealpha ( $new, true );
}

imagecopyresampled ( $new, $img, 0, 0, $x, 0, $width, $height, $w, $h );

switch ($type) {
case 'bmp' :
imagewbmp ( $new, $dst );
break;
case 'gif' :
imagegif ( $new, $dst );
break;
case 'jpg' :
imagejpeg ( $new, $dst );
break;
case 'png' :
imagepng ( $new, $dst );
break;
}
imagedestroy ( $img );
imagedestroy ( $new );
unset ( $img );
unset ( $new );
return true;
}

最佳答案

你有这个问题,因为你必须改变 php.inimax_execution_time 和 memory_limit您可以使用您想要的内存限制更改 php.ini 或使用 ini_set

在 php.ini 中

memory_limit = 128mb;

在你的 php 脚本中

ini_set('memory_limit','16M');

在 .htaccess 中

php_value memory_limit 8M;

注意:此方法仅在 PHP 作为 apache 模块执行时才有效。

关于php - 尝试在 php 中调整图像大小时如何处理此内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27979388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com