用户上传图片后,我正在尝试创建图片的缩略图。问题是,当我的脚本尝试将大图像加载到内存中以便重新采样(例如在2448px x 3264px的iPad上拍摄)时,调用imagecreatefromjpeg
时内存不足。我无法增加可用内存,因为它是一个共享服务器,我出于同样的原因无法安装任何替代图像库。
$name = "upload/1/" . $filename;
move_uploaded_file($_FILES['myFile']['tmp_name'], $name);
createthumb($name, "upload/1/th_" . $filename, 230, 172);
function createthumb($name, $filename, $new_w, $new_h) {
global $Postcode;
$system=explode('.', $name);
if (preg_match('/jpg|jpeg/',$system[1])) {
$src_img=imagecreatefromjpeg($name);
}
if (preg_match('/png/',$system[1])) {
$src_img=imagecreatefrompng($name);
}
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
if ($old_x > $old_y) {
$thumb_w=$new_w;
$thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y) {
$thumb_w=$old_x*($new_w/$old_y);
$thumb_h=$new_h;
}
if ($old_x == $old_y) {
$thumb_w=$new_w;
$thumb_h=$new_h;
}
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
if (preg_match("/png/",$system[1])){
imagepng($dst_img, $filename);
}
else {
imagejpeg($dst_img, $filename);
}
imagedestroy($dst_img);
}
我有什么方法可以解决这个问题,但我不能增加内存或使用不同的图像库吗?