Ну а если ручками, то можно как-то так:
$src_path = $_FILES["avatar"]["tmp_name"];
$dest_path = $path_file . $rand_name . ".$format";
// загружаем картинку
$type = exif_imagetype($src_path);
switch ($type) {
case IMAGETYPE_JPEG:
$src_img = imagecreatefromjpeg($src_path);
break;
case IMAGETYPE_PNG:
$src_img = imagecreatefrompng($src_path);
break;
case IMAGETYPE_GIF:
$src_img = imagecreatefromgif($src_path);
break;
case IMAGETYPE_BMP:
$src_img = imagecreatefrombmp($src_path);
break;
default:
// ???
// throw new \Exception("Unknown image type $type of file '$src_path'", 1);
break;
}
// уменьшаем в рзамер 200х200 (для правильного масштабирования нужно ещё учесть соотношение сторон)
$dest_img = imagescale($src_img, 200, 200, -1, IMG_BICUBIC_FIXED);
// сохраняем результат в JPEG
if (!imagejpeg($dest_img, $dest_path, 85)) {
// ???
// throw new \Exception("Can't save JPEG image '$dest_path'", 1);
}
// освобождаем память
imagedestroy($src_img);
imagedestroy($dest_img);
Выдрал из реального проекта. Этот код вместо строки с move_uploaded()