Писал тут функцию для загрузки джпегов для фотогалереи, на выходе вполне приличные результаты получил...
Приму советы по улучшению

Код:
<?php
// Используемые константы
define("UPLOAD", "E:\\InetPub\\...\\photos\\"); // Винды!!!
define("PHOTOPATH", "../photos/");
// Функция
function uploadphoto ($maxthumbsize,$maxlargesize,$name,$path,$field) {
$result=array();
if ($_FILES[$field]['error']==0) {
$types=array("image/pjpeg", "image/jpeg");
if (in_array($_FILES[$field]['type'],$types)) {
$tmpname="tmp_".md5(date("U")).".jpg";
$relpath=($path=="") ? PHOTOPATH : PHOTOPATH.$path."/";
$locpath=($path=="") ? UPLOAD : UPLOAD.$path."\\"; // Винды!!!
if (move_uploaded_file($_FILES[$field]['tmp_name'], $locpath.$tmpname)) {
$message="Файл успешно загружен на сервер.";
list($width,$height,$type,$attr) = getimagesize($relpath.$tmpname);
$quality=70; // Качество
$source=imagecreatefromjpeg($relpath.$tmpname);
if ($maxthumbsize>0) {
$ratiothumb=($height/$width > 1) ? $height/$maxthumbsize : $width/$maxthumbsize;
$thumbwidth=intval($width/$ratiothumb);
$thumbheight=intval($height/$ratiothumb);
$thumb=imagecreatetruecolor($thumbwidth,$thumbheight);
imagecopyresampled($thumb,$source,0,0,0,0,$thumbwidth,$thumbheight,$width,$height);
imagejpeg($thumb,$relpath."thumb_".$name.".jpg",$quality);
imagedestroy($thumb);
$message.="\nСоздано изображение с именем thumb_".$name.".jpg";
}
if ($maxlargesize>0) {
$ratiolarge=($height/$width > 1) ? $height/$maxlargesize : $width/$maxlargesize;
if ($height<$maxlargesize&&$width<$maxlargesize) $ratiolarge=1;
$largewidth=intval($width/$ratiolarge);
$largeheight=intval($height/$ratiolarge);
$large=imagecreatetruecolor($largewidth,$largeheight);
imagecopyresampled($large,$source,0,0,0,0,$largewidth,$largeheight,$width,$height);
imagejpeg($large,$relpath."large_".$name.".jpg",$quality);
imagedestroy($large);
$message.="\nСоздано изображение с именем large_".$name.".jpg";
}
imagedestroy($source);
@unlink($relpath.$tmpname);
$result[0]=0;
$result[1]=$message;
$result[2]="thumb_".$name.".jpg";
$result[3]="large_".$name.".jpg";
return $result;
} else {
$result[0]=6;
$result[1]="Ошибка при копировании файла, возможно, отсутствует разрешение на запись в ".$locpath;
$result[2]="";
$result[3]="";
return $result;
}
} else {
$result[0]=5;
$result[1]="Неверный тип файла (".$_FILES[$field]['type'].")";
$result[2]="";
$result[3]="";
return $result;
}
} else {
$errorcode=$_FILES[$field]['error'];
$result[0]=$errorcode;
$filerrors=array ( "", "Размер файла превышает допустимый (php.ini)", "Размер файла превышает допустимый (form)", "Файл загружен частично", "Файл не выбран" );
$result[1]=$filerrors[$errorcode];
$result[2]="";
$result[3]="";
return $result;
}
}
// Вызов
$some_array=uploadphoto($maxthumbsize,$maxlargesize,$name,$path,$field);
// (размер превьюшки (большей стороны) или 0, размер полной фотки (большей строны) или 0, новое имя файла (добавляется префикс), путь относительно констант или "", имя поля из которого происходит загрузка файла)
// Возвращает: (код ошибки, текст ошибки, имя файла превьюшки, имя файла полной фотки)
?>
ЗЫ: В коде появляются лишние пробелы в именах переменных -- убрать!