Yo uso el siguiente script, haber si te sirve de algo pues va muy bien:
 
Primero envio la imagen con "input type=file..." y la paso aqui:  
 Código PHP:
    //Empezamos la primera imagen    
    if($_FILES['imagen1']['name']!=""){
                //Dirección donde voy a subir 
                $folder="../imagenes/";
                //
                $archivo = $_FILES['imagen1'];
                $archivo_name=$_FILES['imagen1']['name'];
                $archivo_size=$_FILES['imagen1']['size'];
                $archivo_type=$_FILES['imagen1']['type'];
                $archivo_tmp=$_FILES['imagen1']['tmp_name'];
                //esto lo hago porque asi saco el nombre tal cual, sin extensiones
                $long=strlen($archivo_name);
                $archivo_name=substr($archivo_name, 0, $long-4);
                //Debemos poner el nombre del fichero y su nombre, de lo contrario no funciona
                move_uploaded_file($archivo_tmp, $folder.$archivo_name."_ini.jpg") or die("problemas uploading imagen");
                //mediana
                copyimag($archivo_name,"medium",$folder,"300");
                //pequeña
                copyimag($archivo_name,"small",$folder,"47");
                //borramos la imagen original
                if (isset($archivo_name))
                unlink("../imagenes/".$archivo_name."_ini.jpg");
            } 
    
  y de este lo envio aqui:  
 Código PHP:
    //funcion para copiar y minimizar foto
function copyimag($id,$prefijo,$ruta,$size){ 
    //list toma los valores del array generado por getimage
    list($width, $height, $value, $params) = GetImageSize($ruta.$id."_ini.jpg");
    //creo foto reducida
    if($size<$height){
        $new_width  =  intval(($size*$width)/$height);
        $new_height  = $size;
        //limito si acho a 150 de alto es mayor a 200
        if($new_width>200&&$size==150){
            $new_width  = 200;
        }
        //echo "new_w=".$new_width;
        //echo "new_h=".$new_height;
        //codigo para crear la nueva imagen
        $newImage = imagecreatetruecolor($new_width, $new_height);
        $cpyImage = imagecreatefromjpeg($ruta.$id."_ini.jpg");
        imagecopyresized($newImage, $cpyImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height);                                                      
        imagejpeg($newImage,$ruta.$id."_".$prefijo.".jpg");
    }else{
        copy($ruta.$id."_ini.jpg",$ruta.$id."_".$prefijo.".jpg");
    }
} 
    
  que te genera tres imagenes: samll, medium, big y te las guarda en una carpeta para poder trabajar con ellas.
La verdad es que va muy bien, me lo paso un compañero de trabajo y es estupendo.