imagecopyresized
принимает в качестве второго параметра ресурс изображения, а не имя файла. Сначала нужно загрузить файл. Если вы знаете тип файла, вы можете использовать imagecreatefromFILETYPE
для его загрузки. Например, если это JPEG, используйте imagecreatefromjpeg
и передайте ему имя файла - это вернет ресурс изображения.
Если вы не знаете тип файла, еще не все потеряно. Вы можете прочитать файл как строку и использовать imagecreatefromstring
(который автоматически определяет тип файла) для загрузки следующим образом:
$oldImage = imagecreatefromstring(file_get_contents($_FILES['image']['tmp_name']));
Я работал над чем-то похожим. Я пробовал Ghostscript и ImageMagic. Это хорошие инструменты, но для их настройки требуется немного времени. В итоге я использовал sips на сервере Snow Leopard. Не уверен, что он встроен в сервер Linux, но это более быстрое решение, которое я нашел, если вам нужно что-то сделать быстро.
$ _ FILES ['image'] ['tmp_name']
- это путь, а не ресурс изображения. Вы должны использовать одну из функций imagecreatefrom * () для создания ресурса.
Вот моя реализация сохранения уменьшенной картинки:
Функция изменения размера и сохранения:
function SaveThumbnail($imagePath, $saveAs, $max_x, $max_y)
{
ini_set("memory_limit","32M");
$im = imagecreatefromjpeg ($imagePath);
$x = imagesx($im);
$y = imagesy($im);
if (($max_x/$max_y) < ($x/$y))
{
$save = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x));
}
else
{
$save = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y));
}
imagecopyresized($save, $im, 0, 0, 0, 0, imagesx($save), imagesy($save), $x, $y);
imagejpeg($save, $saveAs);
imagedestroy($im);
imagedestroy($save);
}
Использование:
$thumb_dir = "/path/to/thumbnaildir/"
$thumb_name = "thumb.jpg"
$muf = move_uploaded_file($_FILES['imgfile']['tmp_name'], "/tmp/test.jpg")
if($muf)
{
SaveThumbnail("/tmp/test.jpg", $thumb_dir . $thumb_name, 128, 128);
}