Ресайз фото по большей стороне

function resize($newWidth, $targetFile, $originalFile) {

    $info = getimagesize($originalFile);
    $mime = $info['mime'];

    switch ($mime) {
            case 'image/jpeg':
                    $image_create_func = 'imagecreatefromjpeg';
                    $image_save_func = 'imagejpeg';
                    $new_image_ext = 'jpg';
                    break;

            case 'image/png':
                    $image_create_func = 'imagecreatefrompng';
                    $image_save_func = 'imagepng';
                    $new_image_ext = 'png';
                    break;

            case 'image/gif':
                    $image_create_func = 'imagecreatefromgif';
                    $image_save_func = 'imagegif';
                    $new_image_ext = 'gif';
                    break;

            default: 
                    throw Exception('Unknown image type.');
    }

    $img = $image_create_func($originalFile);
    list($width, $height) = getimagesize($originalFile);
	
	if ((!$width) || (!$height)) { $GLOBALS['errors'][] = 'Image couldn\'t be resized because it wasn\'t a valid image.'; return false; }

    if (($width <= $newWidth) && ($height <= $newWidth)) { return $image; } //no resizing needed
    
    //try max width first...
    $ratio = $newWidth / $width;
    $new_w = $newWidth;
    $new_h = $height * $ratio;
    
    //if that didn't work
    if ($new_h > $newWidth) {
        $ratio = $newWidth / $height;
        $new_h = $newWidth;
        $new_w = $width * $ratio;
    }
	
    $tmp = imagecreatetruecolor($new_w, $new_h);
    imagecopyresampled($tmp, $img, 0, 0, 0, 0, $new_w, $new_h, $width, $height);

    if (file_exists($targetFile)) {
            unlink($targetFile);
    }
    $image_save_func($tmp, "$targetFile.$new_image_ext");
}

использовать:

resize(800, $img, $img);