1 php upload resize crop memory-limit
我正在使用单个图像上传/裁剪/调整大小脚本来处理高达10MB的文件.
在测试时,我将php_ini内存限制设置为25M,并且在上传文件时仅耗尽大约1.4MB.
"Allowed memory size of 26214400 bytes exhausted (tried to allocate 10368 bytes)"
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪,不是10368 <26214400?(修辞问题)
或者这是否意味着我超过25MB的10368字节?我的脚本应该使用这么多内存吗?
码:
function make_thumbnails($updir, $img)
{
$thumbnail_width = 200;
$thumbnail_height = 150;
$thumb_preword = "thumb_";
$arr_image_details = GetImageSize($updir.$img);
$original_width = $arr_image_details[0];
$original_height = $arr_image_details[1];
if( $original_width > $original_height ){
$new_width = $thumbnail_width;
$new_height = intval($original_height*$new_width/$original_width);
} else {
$new_height = $thumbnail_height;
$new_width = intval($original_width*$new_height/$original_height);
}
$dest_x = intval(($thumbnail_width - $new_width) / 2);
$dest_y = intval(($thumbnail_height - $new_height) / 2);
if($arr_image_details[2]==1) { $imgt = "ImageGIF"; $imgcreatefrom = "ImageCreateFromGIF"; }
if($arr_image_details[2]==2) { $imgt = "ImageJPEG"; $imgcreatefrom = "ImageCreateFromJPEG"; }
if($arr_image_details[2]==3) { $imgt = "ImagePNG"; $imgcreatefrom = "ImageCreateFromPNG"; }
if( $imgt )
{
$old_image = $imgcreatefrom($updir.$img);
$new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imageCopyResized($new_image,$old_image,$dest_x,
$dest_y,0,0,$new_width,$new_height,$original_width,$original_height);
$imgt($new_image,$updir.$thumb_preword.$img);
// Added by your suggestions:
imagedestroy($old_image);
imagedestroy($new_image);
}
}
Run Code Online (Sandbox Code Playgroud)
Pek*_*ica 14
除了已经说过的话:
永远不要忘记处理压缩文件格式(如JPEG)需要比实际文件大小更多的内存.一个3000 x 3000像素JPG文件只能重500kb,但需要(大致)3000 x 3000 x 3(红色,绿色和蓝色各一个字节,依赖于模式甚至Alpha的一个字节)=至少27 MB .