我尝试调整一个目录中所有图像的大小。我的代码工作找到,直到我尝试调整包含 70 张图片的目录大小。我已经使用图像销毁和取消设置。但我仍然失败了"致命错误:允许 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 模块执行时,此方法才有效。