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: 18 años, 10 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), 0, 0, imagesx($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), 0, 0, imagesx($im), imagesy($im));
imagecopy($im2, $im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($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: 19 años
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, $y, 0, 0, imagesx($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: 18 años, 10 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 23:33.