Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/12/2007, 18:06
Sanubrio
 
Fecha de Ingreso: septiembre-2007
Mensajes: 220
Antigüedad: 19 años, 1 mes
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');