"para guardar la imagen se encuentra casi al final del codigo"
Código PHP:
   <?
header("Content-type: image/jpeg");
if($_POST){ 
// Creamos la cadena aletoria 
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 
$cad = ""; 
for($i=0;$i<12;$i++) { 
$cad .= substr($str,rand(0,62),1); 
} 
// Fin de la creacion de la cadena aletoria 
$tamano = $_FILES [ 'file' ][ 'size' ]; // Leemos el tamaño del fichero 
$tamaño_max="500000"; // Tamaño maximo permitido 
if( $tamano < $tamaño_max){ // Comprovamos el tamaño  
$destino = 'tmp' ; // Carpeta donde se guardata 
$sep=explode('image/',$_FILES["file"]["type"]); // Separamos image/ 
$tipo=$sep[1]; // Optenemos el tipo de imagen que es 
if($tipo == "gif" || $tipo == "pjpeg" || $tipo == "bmp"| $tipo == "jpeg" || $tipo == "png" || $tipo == "jpg" ){ // Si el tipo de imagen a subir es el mismo de los permitidos, segimos. Puedes agregar mas tipos de imagen 
move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' .$cad.'.'.$tipo);  // Subimos el archivo 
} 
else echo "el tipo de archivo no es de los permitidos";// Si no es el tipo permitido lo desimos 
} 
else echo "El archivo supera el peso permitido.";// Si supera el tamaño de permitido lo desimos 
}  
$imagen = $destino.'/'.$cad.'.'.$tipo;
 
     function redimensionar_imagen($imagen, $nombre_imagen_asociada)
     {
       //indicamos el directorio donde se van a colgar las imágenes
       $directorio = "tmp/" ;
       //establecemos los límites de ancho y alto
       $nuevo_ancho = 438;
       $nuevo_alto = 328;
 
       //Recojo información de la imágen
       $info_imagen = getimagesize($imagen);
       $alto = $info_imagen[1];
       $ancho = $info_imagen[0];
       $tipo_imagen = $info_imagen[2];
 
       //Determino las nuevas medidas en función de los límites
       /*if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
       {
         if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
         {
           $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;    
         }
         else
         {
           $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);  
         }
       }
       else //si la imagen es más pequeña que los límites la dejo igual.
       {
         $nuevo_alto = $alto;
         $nuevo_ancho = $ancho;
       } */
 
       // dependiendo del tipo de imagen tengo que usar diferentes funciones
       switch ($tipo_imagen) {
         case 1: //si es gif …
           $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
           $imagen_vieja = imagecreatefromgif($imagen);
           //cambio de tamaño…
           imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
           if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
         break;
 
         case 2: //si es jpeg …
           $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
           $imagen_vieja = imagecreatefromjpeg($imagen);
           //cambio de tamaño…
           imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
           if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
         break;
 
         case 3: //si es png …
           $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
           $imagen_vieja = imagecreatefrompng($imagen);
           //cambio de tamaño…
           imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
           if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
 
         break;
       }
       return true; //si todo ha ido bien devuelve true
 
     }
 
   $nombre_imagen_asociada = "".$cad.".".$tipo."";
   
   redimensionar_imagen($imagen, $nombre_imagen_asociada);
   
   
    $imgbase = "source/imgbase.jpg";
  $imgup =  $destino.'/'.$cad.'.'.$tipo;
  
 $imagena = imagecreatefromjpeg(''.$imgbase .'');
  $imagen1 = imagecreatefromjpeg(''.$imgup .'');
  
 imagecopymerge($imagena, $imagen1, 31, 31, 0, 0, 438, 328, 75);
  //Colores
$blanco = imagecolorallocate($imagena, 255, 255, 255);
$gris = imagecolorallocate($imagena, 128, 128, 128);
$negro = imagecolorallocate($imagena, 0, 0, 0);
 
//Fuente
$fuente = 'verdanab.ttf';
 $textoo = $_POST['texto'];
  $textoo1 = $_POST['texto1'];
 $linea3 = $_POST['linea3'];
 
//Centrar
$dimensions = imagettfbbox(20, 0, $fuente, $textoo);
$textWidth = abs($dimensions[4] - $dimensions[0]);
$xx =(imagesx($imagena)-$textWidth)/2;
 
$dimensions1 = imagettfbbox(12, 0, $fuente, $textoo1);
$textWidth1 = abs($dimensions1[4] - $dimensions1[0]);
$xx1 =(imagesx($imagena)-$textWidth1)/2;
 
$dimensions11 = imagettfbbox(12, 0, $fuente, $linea3);
$textWidth11 = abs($dimensions11[4] - $dimensions11[0]);
$xx11 =(imagesx($imagena)-$textWidth11)/2;
 
 
 
imagettftext($imagena, 21, 0, $xx, 388, $blanco, $fuente, $textoo);
imagettftext($imagena, 12, 0,  $xx1, 410, $blanco, $fuente, $textoo1);
imagettftext($imagena, 12, 0,  $xx11, 425, $blanco, $fuente, $linea3);
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 
$cadena = ""; 
for($i=0;$i<12;$i++) { 
$cadena .= substr($str,rand(0,62),1); 
} 
$path ="tmp/".$cadena.".jpeg";
imagejpeg($imagena,$path);
imagedestroy($imagena);
 
 
 
?>    
 

