смотрите в сторону
imagecopyresampled
примерно так работает, ресайзит с идеальным качеством:
$src = imagecreatefromfile( $full_name );
$dest = imagecreatetruecolor( $new_width, $new_height );
imagecopyresampled( $dest, $src, 0, 0, 0, 0, $new_width, $new_height, imagesx( $src ), imagesy( $src ) );
далее $dest сохраняете в файл или еще куда.