После того как пользователь загрузил изображение, я пытаюсь создать его миниатюру. Проблема заключается в том, что когда мой скрипт пытается загрузить большое изображение в память, чтобы перепрограммировать его (например, на iPad на 2448 пикселей x 3264 пикселей), у него заканчивается память при вызове 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); }
Есть ли способ решить эту проблему с помощью оговорки, что я не могу увеличить память или использовать другую библиотеку изображений?