Foros del Web » Programando para Internet » PHP »

watermark que funcione bien

Estas en el tema de watermark que funcione bien en el foro de PHP en Foros del Web. Hola ya se que el tema de las marcas de agua en los archivos JPG se ha hablado mucho en este foro, pero es que ...
  #1 (permalink)  
Antiguo 02/12/2007, 09:13
 
Fecha de Ingreso: noviembre-2007
Mensajes: 30
Antigüedad: 16 años, 5 meses
Puntos: 0
watermark que funcione bien

Hola ya se que el tema de las marcas de agua en los archivos JPG se ha hablado mucho en este foro, pero es que no encuentro un solo scrip que funcione bien. Tengo las librerias GD o (como se llamen) instaladas. Tengo este código extraido delhttp://www.elguruprogramador.com.ar/articulos/marcas-de-agua-automaticas-con-php-y-gd.htm y es el unico que me funciona pero el problema es que me pone la marca de agua justo en el centro de la imagen y lo que deseo es que sea en una esquina.
Si alguien sabe de este tema, por favor, editen el código o recomiendenme otro de caracteristicas similares porque yo no se cuales son las variables que determinan la posición de la marca de agua en la imagen.

Alla va el código
Código PHP:
<?php

$image 
$_GET['i'];
$watermark "water.png";

$im imagecreatefrompng($watermark);

$ext substr($image, -3);


if(
strtolower($ext) == "gif") {
if (!
$im2 imagecreatefromgif($image)) {
echo 
"Error opening $image!"; exit;
}
} else if(
strtolower($ext) == "jpg") {
if (!
$im2 imagecreatefromjpeg($image)) {
echo 
"Error opening $image!"; exit;
}
} else if(
strtolower($ext) == "png") {
if (!
$im2 imagecreatefrompng($image)) {
echo 
"Error opening $image!"; exit;
}
} else {
die;
}

imagecopy($im2$im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));

if(
$_GET[repeat]) {
$waterless imagesx($im2) - imagesx($im);
$rest ceil($waterless/imagesx($im)/2);

for(
$n=1$n<=$rest$n++) {
imagecopy($im2$im, ((imagesx($im2)/2)-(imagesx($im)/2))-(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));
imagecopy($im2$im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));
}
}

header("Content-Type: image/jpeg");
imagejpeg($im2);
imagedestroy($im);
imagedestroy($im2);

?>
  #2 (permalink)  
Antiguo 02/12/2007, 18:06
 
Fecha de Ingreso: septiembre-2007
Mensajes: 220
Antigüedad: 16 años, 7 meses
Puntos: 1
Re: watermark que funcione bien

Código PHP:
function obtenerImagenResource($file)
{
  if (!
is_string($file))
  {
      return 
false;
  }  
  
    
$data getimagesize($file);
    if (
$data === false)
    {
        return 
false;
    }
    
    switch (
$data['mime'])
    {
      case 
'image/jpeg':
      case 
'image/pjpeg':
        return 
imagecreatefromjpeg($file);
        break;
        
      case 
'image/png':
        return 
imagecreatefrompng($file);
        
      case 
'image/gif':
        return 
imagecreatefromgif($file);
        
    }
    
    return 
false;
}

function 
obtenerPosiciones($x$y, &$imagen, &$marca)
{
    
$imagen_ancho imagesx($imagen);
    
$imagen_alto imagesy($imagen);
    
    
$marca_ancho imagesx($marca);
    
$marca_alto imagesy($marca);
    
    
$z 40;
    
$anchox round((($imagen_ancho $marca_ancho) / $z) * $marca_ancho);
    
$altox round((($imagen_alto $marca_alto) / $z) * $marca_ancho);
    
    switch (
$x)
    {
      case 
'left':
        
$x $anchox;
        break;
        
      case 
'center':
        
$x round(($imagen_ancho 2) - ($marca_ancho 2));
        break;
        
      case 
'right':
        
$x $imagen_ancho $marca_ancho $anchox;
        break;
        
      default:
        if (!
is_numeric($x) || $x > ($imagen_ancho $marca_ancho))
        {
            
$x 0;
        }
    }
    
    switch (
$y)
    {
        case 
'top':
          
$y $altox;
          break;
          
        case 
'middle':
          
$y =  round(($imagen_alto 2) - ($marca_alto 2));
          break;
          
        case 
'bottom':
          
$y $imagen_alto $marca_alto $altox;
          break;
          
        default:
          if (!
is_numeric($y) || $y > ($imagen_alto $marca_alto))
          {
              
$y 0;
          }
    }
    
    return array(
$x$y);
}

function 
obtenerImagen($imagen$marca$x 0$y 0)
{
    
$imagen obtenerImagenResource($imagen);
    if (
$imagen === false)
    {
        return 
false;
    }
    
$marca obtenerImagenResource($marca);
    if (
$marca === false)
    {
      if (
$imagen !== false)
      {
          
imagedestroy($imagen);
      }
        return 
false;
    }
    
    list(
$x$y) = obtenerPosiciones($x$y$imagen$marca);
    
    
imagecopy($imagen$marca$x$y00imagesx($marca), imagesy($marca));
    
    
ob_start();
    if (
imagejpeg($imagen))
    {
        
$return ob_get_contents();
    }
    
ob_end_clean();
    
    
imagedestroy($imagen);
    
imagedestroy($marca);
    
    return 
$return;
}

$imagen 'http://www.google.es/intl/en_com/images/logo_plain.png';
$marca 'http://www.kibit.cl/blog/wp-content/uploads/icons/google_earth_logo.png';

header("Content-Type: image/jpeg");
echo 
obtenerImagen($imagen$marca'center''middle'); 
  #3 (permalink)  
Antiguo 03/12/2007, 06:56
 
Fecha de Ingreso: noviembre-2007
Mensajes: 30
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: watermark que funcione bien

muchas gracias Sanubrio
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 17:49.