Foros del Web » Programando para Internet » PHP »

despues de subir foto, ponerle marca de agua ¿Cómo?

Estas en el tema de despues de subir foto, ponerle marca de agua ¿Cómo? en el foro de PHP en Foros del Web. Hola de nuevo compañeros, abro este nuevo post, debido a que me queda un problema mas que no me sale... inicio el problema que tenia ...
  #1 (permalink)  
Antiguo 31/01/2012, 21:30
 
Fecha de Ingreso: enero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta despues de subir foto, ponerle marca de agua ¿Cómo?

Hola de nuevo compañeros, abro este nuevo post, debido a que me queda un problema mas que no me sale...

inicio el problema que tenia en este post
http://www.forosdelweb.com/f18/no-funciona-script-pato12-por-que-972930/
trata de subir imagen al servidor (el script es de pato12) por cierto este problema fué solucionado gracias a Nemutagk.

ahora lo que quiero hacer este a la hora de subir una foto/imagen al servidor, esta tenga una marca de agua de un logo por ejemplo.

Posteo el cod que estoy usando.

Aqui el enlace donde esta la demostración del avanze..
viettelenperu. com/demos/sube/

aqui los codigos que se esta utilizando

sube.php
Código PHP:
<? 
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 
$tamano_max="50000000000"// Tamaño maximo permitido 
if( $tamano $tamano_max){ // Comprovamos el tamaño 
$destino 'fotos' // 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 == "jpeg" || $tipo == "bmp"){ // 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 
include('verimagen.php'); // Incluimos la plantilla 

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 

?>

marca.php El archivo de la marca de agua
Código PHP:
<?php  
// obtener paámetro
$foto = isset($_GET['foto']) ? trim(addslashes($_GET['foto'])) : '';

// prever un par de posibles errores
if (!$foto) die('indica ruta de acceso a imagen...');
if (!
file_exists($foto)) die('No se encuentra el achivo: '.$foto);

// enviar encabezado
header('content-type: image/jpeg');

// crear instancia de la marca de agua y almacenar en variable
$marcadeagua imagecreatefrompng('mimarcadeagua.png');

// 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
$mifoto imagecreatefromjpeg($foto);

// obtener información de tamaño de la foto y calcular coordenadas de posicionamiento
$dimensiones getimagesize($foto);
$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_y00$marcadeagua_ancho$marcadeagua_altura60);

// enviar imagen creada al browser
imagejpeg($mifoto);

// destruir los objetos creados y liberar la memoria consumida
imagedestroy($mifoto);
imagedestroy($marcadeagua);

?>
verimagen.php

Código PHP:
<?php 
$url 
"http://www.viettelenperu.com/demos/sube/"?>
Tu foto a sido enviada con exito!.<br><strong>Datos:</strong><br>
<ul>
<li>Tipo: <?=$tipo?></li>
<li>Url de la Foto <?php echo $url?><?=$destino '/' .$cad.'.'.$tipo?></li>
</ul>
  <img src="http://www.viettelenperu.com/demos/sube/marca.php?foto=<?php echo $url?><?=$destino.'/'.$cad.'.'.$tipo?>" border="0">
No me funciona... que hago mal?

Agrego: La foto sube, lo veo con mi ftp en la carpeta de fotos.

Agradesco sus ayudas...

Última edición por samajapi; 31/01/2012 a las 21:35
  #2 (permalink)  
Antiguo 31/01/2012, 21:42
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: despues de subir foto, ponerle marca de agua ¿Cómo?

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
  1. <?php  
  2. // obtener paámetro
  3. $foto = isset($_GET['foto']) ? trim(addslashes($_GET['foto'])) : '';
  4.  
  5. // prever un par de posibles errores
  6. if (!$foto) die('indica ruta de acceso a imagen...');
  7. if (!file_exists($foto)) die('No se encuentra el achivo: '.$foto);
  8.  
  9. // enviar encabezado
  10. header('content-type: image/jpeg');
  11.  
  12. // crear instancia de la marca de agua y almacenar en variable
  13. $marcadeagua = imagecreatefrompng('mimarcadeagua.png');
  14.  
  15. //desactivamos la mezcla
  16. imagealphablending($marcadeagua,false);
  17.  
  18. //eh indicamos a GD que guarde la info de alfa
  19. imagesevealpha($marcadeagua,true);
  20.  
  21. // obtener información de ancho y altura de la marca de agua
  22. $marcadeagua_ancho = imagesx($marcadeagua);
  23. $marcadeagua_altura = imagesy($marcadeagua);
  24.  
  25. // crear instancia de la foto y almacenar en variable
  26. $mifoto = imagecreatefromjpeg($foto);
  27.  
  28. // obtener información de tamaño de la foto y calcular coordenadas de posicionamiento
  29. $dimensiones = getimagesize($foto);
  30. $destino_x = $dimensiones[0] - $marcadeagua_ancho - 5;
  31. $destino_y = $dimensiones[1] - $marcadeagua_altura - 5;
  32.  
  33. // combinar marca de agua con foto
  34. imagecopymerge($mifoto, $marcadeagua, $destino_x, $destino_y, 0, 0, $marcadeagua_ancho, $marcadeagua_altura, 60);
  35.  
  36. // enviar imagen creada al browser
  37.  
  38. //aquí puedes indicar la calidad de la imagen, recuerda que entre menos compresión
  39. //mas pesará la imagen
  40. imagejpeg($mifoto, null, 75); //donde 75 será la calidad de la imagen generada
  41.  
  42. // destruir los objetos creados y liberar la memoria consumida
  43. imagedestroy($mifoto);
  44. imagedestroy($marcadeagua);

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...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 31/01/2012, 22:24
 
Fecha de Ingreso: enero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: despues de subir foto, ponerle marca de agua ¿Cómo?

Nemutagk, he probado con la corrección tuya, pero no se muestra la marca de agua y menos la imagen :s, a que se debe?

como se ve aqui viettelenperu.com/demos/sube/ no sale la imagen con la marca, solo sale la imagen sola.
  #4 (permalink)  
Antiguo 31/01/2012, 23:16
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: despues de subir foto, ponerle marca de agua ¿Cómo?

a ver, probe este código y funciona con un png-8, agrega la marca de agua con la transparencia

Código PHP:
Ver original
  1. // enviar encabezado
  2. header('Content-Type: image/png');
  3.  
  4. // crear instancia de la marca de agua y almacenar en variable
  5. $marcadeagua = imagecreatefrompng('marca.png');
  6.  
  7. //desactivamos la mezcla
  8. imagealphablending($marcadeagua,false);
  9.  
  10. //eh indicamos a GD que guarde la info de alfa
  11. imagesavealpha($marcadeagua,true);
  12.  
  13. // obtener información de ancho y altura de la marca de agua
  14. $marcadeagua_ancho = imagesx($marcadeagua);
  15. $marcadeagua_altura = imagesy($marcadeagua);
  16.  
  17. // crear instancia de la foto y almacenar en variable
  18. $mifoto = $imagecreatefromjpeg('foto.jpg');
  19.  
  20. imagealphablending($mifoto, true);
  21.  
  22. // obtener información de tamaño de la foto y calcular coordenadas de posicionamiento
  23. $dimensiones = getimagesize('imagen.jpg');
  24. $destino_x = $dimensiones[0] - $marcadeagua_ancho - 5;
  25. $destino_y = $dimensiones[1] - $marcadeagua_altura - 5;
  26.  
  27. // combinar marca de agua con foto
  28. imagecopymerge($mifoto, $marcadeagua, $destino_x, $destino_y, 0, 0, $marcadeagua_ancho, $marcadeagua_altura, 100);
  29.  
  30. // enviar imagen creada al browser
  31.  
  32. //aquí puedes indicar la calidad de la imagen, recuerda que entre menos compresión
  33. //mas pesará la imagen
  34. imagepng($mifoto); //donde 75 será la calidad de la imagen generada
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 31/01/2012, 23:50
 
Fecha de Ingreso: enero-2012
Mensajes: 12
Antigüedad: 12 años, 9 meses
Puntos: 0
De acuerdo Respuesta: despues de subir foto, ponerle marca de agua ¿Cómo?

Holas Holas... ya pude encontrar una solución...

es la siguiente este codigo hace correcto la marca de agua...

Código PHP:
<?php 
header
('content-type: image/jpeg'); 
$watermark imagecreatefrompng('watermark.png'); //aca ponen su imagen watemark en png 
$watermark_width imagesx($watermark); 
$watermark_height imagesy($watermark); 
$image imagecreatetruecolor($watermark_width$watermark_height); 
$image imagecreatefromjpeg($_GET['src']); 
$size getimagesize($_GET['src']); 
$dest_x $size[0] - $watermark_width 5
$dest_y $size[1] - $watermark_height 5
imagecopymerge($image$watermark$dest_x$dest_y00$watermark_width$watermark_height100); imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 
?>
y para visualizarlo

Código PHP:
<img src="url/archivo.php?src=direccion_de_la_imagen.jpg"
Listo, ya esta... ahora me falta reducir el tamaño de la imagen... abriré otro post...

Todo este avanze es gracias a Nemutagk, man te pasaste... muchas gracias por la ayuda...

Etiquetas: agua, foto, marca
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.