Есть библиотеки которые ресайзят и обрезают картинки, у меня например так:
function imageResize($file_path, $new_width){
//Получаем ширину и высоту исходника
list($w, $h) = getimagesize($file_path);
//Получаем коэфицент соотношения сторон
$proportions = $h / $w;
$new_w = $new_width;
$new_h = $new_w * $proportions; // Получаем высоту уменьшенной картинки пропорционально новой ширине
$thumb = imagecreatetruecolor($new_w, $new_h);
$source = imagecreatefromjpeg($file_path);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $new_w, $new_h, $w, $h);
imagejpeg($thumb, $_FILES['image']['tmp_name']);
return $_FILES['image']['tmp_name'];
imagedestroy($thumb);
}
Скрипт берет картинку из временной папки, уменьшает и возвращает туда же, а потом уже мы её загружаем куда надо предварительно переименовав.