Ah simple vista te falta indicarle a GD que no mescle el canal alfa y a la vez que guarde la info completa del canal alfa....
Código PHP:
Ver original<?php
// obtener paámetro
// prever un par de posibles errores
if (!$foto) die('indica ruta de acceso a imagen...');
// enviar encabezado
header('content-type: image/jpeg');
// crear instancia de la marca de agua y almacenar en variable
//desactivamos la mezcla
//eh indicamos a GD que guarde la info de alfa
imagesevealpha($marcadeagua,true);
// obtener información de ancho y altura de la marca de agua
$marcadeagua_ancho = imagesx($marcadeagua); $marcadeagua_altura = imagesy($marcadeagua);
// crear instancia de la foto y almacenar en variable
// obtener información de tamaño de la foto y calcular coordenadas de posicionamiento
$destino_x = $dimensiones[0] - $marcadeagua_ancho - 5;
$destino_y = $dimensiones[1] - $marcadeagua_altura - 5;
// combinar marca de agua con foto
imagecopymerge($mifoto, $marcadeagua, $destino_x, $destino_y, 0, 0, $marcadeagua_ancho, $marcadeagua_altura, 60);
// enviar imagen creada al browser
//aquí puedes indicar la calidad de la imagen, recuerda que entre menos compresión
//mas pesará la imagen
imagejpeg($mifoto, null, 75); //donde 75 será la calidad de la imagen generada
// destruir los objetos creados y liberar la memoria consumida
Ahora, a menos que las imagenes sean pequeñas o que no son muchas las imagenes a tratar o en su defecto que sean pocas veces las que vas a editarlas es mejor guardar la imagen editada en un fichero fisico para evitar estar haciendo trabajar de mas al servidor...