Esto no es un blog. Es una sección que programé para ir publicando aquellas cositas que me parecen interesantes y, por cualquier motivo, quiero tener a mano. Copia lo que quieras, usa lo que quieras (pero respeta sus licencias).
Escrito por: Martín el 11-05-2009 16:37:05

Hace unos días, necesitando crear dinámicamente una marca de agua sobre las fotos que subía por file upload en PHP, programé unos cambios a una función que uso habitualmente para los upload, con lo que se fusionan ambas imágenes.
Aunque en el ejemplo, la marca de agua es excesiva, puede hacerse a tu gusto, siempre que exportes el archivo en formato PNG 32 con fondo transparente.
Puse una DEMO del funcionamiento en esta dirección, donde, a partir de la imagen subida, se genera una copia con marca de agua y una miniatura sin marca alguna.
¿El código?
Muy fácil, aquí abajo lo tienes.
Que lo disfrutes!
Código PHP
function foto($img_original,$img_nueva,$img_nueva_anchura,$img_nueva_altura,$img_nueva_calidad,$extension){
$watermark = "archivos/ejemplo.png";
$im = imagecreatefrompng($watermark);
if (strtolower($extension)=="jpg") $img = imagecreatefromjpeg($img_original);
if (strtolower($extension)=="gif") $img = imagecreatefromgif($img_original);
if (strtolower($extension)=="png") $img = imagecreatefrompng($img_original);
$ancho = imagesx($img);
$alto = imagesy($img);
$nuevoalto = $img_nueva_anchura*$alto/$ancho;
$thumb = imagecreatetruecolor($img_nueva_anchura,$nuevoalto);
imagecopyresampled($thumb,$img,0,0,0,0,$img_nueva_anchura,$nuevoalto,$ancho,$alto);
$nuevoalto2 = 150*$alto/$ancho;
$thumb2 = imagecreatetruecolor(150,$nuevoalto2);
imagecopyresampled($thumb2,$img,0,0,0,0,150,$nuevoalto2,$ancho,$alto);
imagecopy($thumb, $im, (imagesx($thumb)/2)-(imagesx($im)/2), (imagesy($thumb)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
if ($extension=="jpg") {imagejpeg($thumb,"archivos/".$img_nueva,$img_nueva_calidad);imagejpeg($thumb2,"archivos/th_".$img_nueva,$img_nueva_calidad);}
if ($extension=="gif") {imagegif($thumb,"archivos/".$img_nueva,$img_nueva_calidad);imagegif($thumb2,"archivos/th_".$img_nueva,$img_nueva_calidad);}
if ($extension=="png") {imagepng($thumb,"archivos/".$img_nueva,$img_nueva_calidad);imagepng($thumb2,"archivos/th_".$img_nueva,$img_nueva_calidad);}
}
if($_POST["accion"]!="") $_GET["accion"]=$_POST["accion"];
if(!$_GET[accion]) $_GET[accion]="form";
switch($_GET[accion])
{
case "subir":
{
echo "<h1>Ver resultado.</h1>";
$nombre = time();
if (is_uploaded_file($_FILES["archivo1"]["tmp_name"]))
{
$extension = explode(".",$_FILES["archivo1"]["name"]);
$hay = count($extension)-1;
$ext = strtolower($extension[$hay]);
$nuevonombre = $nombre.".".$ext;
$dir ="archivos/";
chmod("$dir", 0777);
if ($ext=="jpg" || $ext=="gif" || $ext=="png") foto($_FILES['archivo1']['tmp_name'],$nuevonombre,'640','','80',$ext);
else move_uploaded_file($_FILES["archivo1"]["tmp_name"],"$dir/$nuevonombre");
}
echo "<img src='archivos/$nuevonombre' /><img src='archivos/th_$nuevonombre' />";
break;
}
case "form":
{
echo "<h1>Agregar una Imagen.</h1>";
echo "<form method=POST action=".$_SERVER["PHP_SELF"]." enctype=multipart/form-data>";
echo "<fieldset>Foto 1:<input type=file name=archivo1 /></fieldset>";
echo "<fieldset><input type=hidden name=accion value=subir /><input type=submit name=submit value='Enviar' class='enviar' />";
echo "</fieldset></form>";
break;
}
}
echo "<p>| <img src=images/page_add.png alt='' align=absmiddle border=0 /> <a href=".$_SERVER["PHP_SELF"]."?accion=form>Agregar un registro</a> |</p>";