Foros del Web » Programando para Internet » PHP »

ayuda con transparentWatermark class

Estas en el tema de ayuda con transparentWatermark class en el foro de PHP en Foros del Web. hola a todos, conversando con google me tope esta class espra hacer marcas de agua en las imagenes aca se las pongo, pero lo que ...
  #1 (permalink)  
Antiguo 30/06/2005, 08:33
Avatar de alexjnm  
Fecha de Ingreso: octubre-2004
Ubicación: cuba
Mensajes: 218
Antigüedad: 13 años, 1 mes
Puntos: 1
ayuda con transparentWatermark class

hola a todos, conversando con google me tope esta class espra hacer marcas de agua en las imagenes aca se las pongo, pero lo que me preocupa es que me hace las imagenes en la rais de stio, cuando lo que yo quiero es que me las ponga en una carpeta.

classe
Código PHP:
<?
/**
* transparentWatermark  class 
* Put watermark in image with transparent and randomize effect
*
* Last change: 2004-04-16
*
* author Lionel Micault <lionel 'dot' micault 'at' laposte 'dot' net>
* version 1.01
*
* constructor transparentWatermark( $stampFile="")
* public function markImageFile ( $imageFile, $resultImageFile="")
* public function markImage ( $imageResource)
* public function setStampPosition ( $Xposition, $Yposition)
* public function setStamp( $stampFile)
* public function getLastErrror()
*/


// position constants
define ("transparentWatermarkOnTop", -1);
define ("transparentWatermarkOnMiddle"0);
define ("transparentWatermarkOnBottom"1);
define ("transparentWatermarkOnLeft", -1);
define ("transparentWatermarkOnCenter"0);
define ("transparentWatermarkOnRight"1);

// randomize level constants
define ("transparentWatermarkRandPixelLightLevel"5);
define ("transparentWatermarkRandPixelPositionLevel"1);

class 
transparentWatermark  {
    var 
$stampImage=0;
    var 
$stampWidth;
    var 
$stampHeight;
    var 
$stampPositionXtransparentWatermarkOnRight;
    var 
$stampPositionYtransparentWatermarkOnBottom;
    
    var 
$errorMsg="";
    
    
/**
    * Constructor
    *
    * @param string $stampFile  filename of stamp image
    * @return boolean
    * @access public
    * @uses setStamp()
    */
    
function transparentWatermark$stampFile="") {
        return( 
$this->setStamp$stampFile));
    }
    
    
/**
    * mark an image file and  display/save it
    *
    * @param int $imageFile  image file (JPEG or PNG format)
    * @param int $resultImageFile new image file (same format)
    * @return boolean
    * @access public
    * @uses readImage()
    * @uses markImage()
    * @uses writeImage()
    * @uses readImage()
    * @uses errorMsg
    */
    
function markImageFile $imageFile$resultImageFile="") {
        if (!
$this->stampImage) {
            
$this->errorMsg="Stamp image is not set.";
            return(
false);
        }

        
$imageinfos = @getimagesize($imageFile);
        
$type   $imageinfos[2];
        
        
$image=$this->readImage($imageFile$type);
        if (!
$image) {
            
$this->errorMsg="Error on loading '$imageFile', image must be a valid PNG or JPEG file.";
            return(
false);
        }
        
        
$this->markImage $image);
        
        if (
$resultImageFile!="") {
            
$this->writeImage$image$resultImageFile$type);
        }
        else {
            
$this->displayImage$image$type);
        }
        return( 
true);
        
    }
    
    
/**
    * mark an image
    *
    * @param int $imageResource resource of image
    * @return boolean
    * @access public
    * @uses stampWidth
    * @uses stampHeight
    * @uses stampImage
    * @uses stampPositionX
    * @uses stampPositionY
    */
    
function markImage $imageResource) {
        if (!
$this->stampImage) {
            
$this->errorMsg="Stamp image is not set.";
            return(
false);
        }
        
$imageWidth  imagesx$imageResource);
        
$imageHeight imagesy$imageResource);

        
//set position of logo
        
switch ($this->stampPositionX) {
            case 
transparentWatermarkOnLeft
            
$leftStamp=0;
            break;
            case 
transparentWatermarkOnCenter:
            
$leftStamp=($imageWidth $this->stampWidth)/2;
            break;
            case 
transparentWatermarkOnRight:
            
$leftStamp=$imageWidth $this->stampWidth;
            break;
            default :
            
$leftStamp=0;
        }
        switch (
$this->stampPositionY) {
            case 
transparentWatermarkOnTop:
            
$topStamp=0;
            break;
            case 
transparentWatermarkOnMiddle:
            
$topStamp=($imageHeight $this->stampHeight)/2;
            break;
            case 
transparentWatermarkOnBottom:
            
$topStamp=$imageHeight $this->stampHeight;
            break;
            default:
            
$topStamp=0;
        }
        
        
// randomize position
        
$leftStamp+=rand(-transparentWatermarkRandPixelPositionLevel, +transparentWatermarkRandPixelPositionLevel);
        
$topStamp+=rand(-transparentWatermarkRandPixelPositionLevel, +transparentWatermarkRandPixelPositionLevel);
                
        
// for each pixel of stamp
        
for ($x=0$x<$this->stampWidth$x++) {
            if ((
$x+$leftStamp<0)||($x+$leftStamp>=$imageWidth)) continue;
            for (
$y=0$y<$this->stampHeight$y++) {
                if ((
$y+$topStamp<0)||($y+$topStamp>=$imageHeight)) continue;
                
                
// search RGB values of stamp image pixel
                
$indexStamp=ImageColorAt($this->stampImage$x$y);
                
$rgbStamp=imagecolorsforindex $this->stampImage$indexStamp);

                
                
// search RGB values of image pixel
                
$indexImage=ImageColorAt$imageResource$x+$leftStamp$y+$topStamp);
                
$rgbImage=imagecolorsforindex $imageResource$indexImage);

                
// randomize light shift
                
$stampAverage=($rgbStamp["red"]+$rgbStamp["green"]+$rgbStamp["blue"])/3;
                if (
$stampAverage>10$randomizer=rand(-transparentWatermarkRandPixelLightLevel, +transparentWatermarkRandPixelLightLevel);
                else 
$randomizer=0;
                
                
// compute new values of colors pixel
                
$r=maxmin($rgbImage["red"]+$rgbStamp["red"]+$randomizer-0x800xFF), 0x00);
                
$g=maxmin($rgbImage["green"]+$rgbStamp["green"]+$randomizer-0x800xFF), 0x00);
                
$b=maxmin($rgbImage["blue"]+$rgbStamp["blue"]+$randomizer-0x800xFF), 0x00);
                
                
// change  image pixel
                
imagesetpixel $imageResource$x+$leftStamp$y+$topStamp, ($r<<16)+($g<<8)+$b);
            }
        }
    }
    
    
/**
    * set stamp position on image
    *
    * @param int $Xposition x position
    * @param int $Yposition y position
    * @return void
    * @access public
    * $this->stampPositionX
    * $this->stampPositionY
    * @uses errorMsg
    */
    
function setStampPosition $Xposition$Yposition) {
        
// set X position
        
switch ($Xposition) {
            case 
transparentWatermarkOnLeft
            case 
transparentWatermarkOnCenter:
            case 
transparentWatermarkOnRight:
            
$this->stampPositionX=$Xposition;
            break;
        }
        
// set Y position
        
switch ($Yposition) {
            case 
transparentWatermarkOnTop:
            case 
transparentWatermarkOnMiddle:
            case 
transparentWatermarkOnBottom:
            
$this->stampPositionY=$Yposition;
            break;
        }
    }
    
    
/**
    * set stamp image for watermak
    *
    * @param string $stampFile  image file (JPEG or PNG)
    * @return boolean
    * @access public
    * @uses readImage()
    * @uses stampImage
    * @uses stampWidth
    * @uses stampHeight
    * @uses errorMsg
    */
    
function setStamp$stampFile) {
        
$imageinfos = @getimagesize($stampFile);
        
$width  $imageinfos[0];
        
$height $imageinfos[1];
        
$type   $imageinfos[2];
        
        if (
$this->stampImageimagedestroy$this->stampImage);
        
        
$this->stampImage=$this->readImage($stampFile$type);
        
        if (!
$this->stampImage) {
            
$this->errorMsg="Error on loading '$stampFile', stamp image must be a valid PNG or JPEG file.";
            return(
false);
        }
        else {
            
$this->stampWidth=$width;
            
$this->stampHeight=$height;
            return(
true);
        }
    }


    
    
    
/**
    * retrieve last error message
    *
    * @return string
    * @access public
    * @uses errorMsg
    */
    
function getLastErrror() {
        return(
$this->errorMsg);
    }
    
    
/**
    * read image from file 
    *
    * @param string $file  image file (JPEG or PNG)
    * @param int $type  file type (2:JPEG or 3:PNG)
    * @return resource
    * @access protected
    * @uses errorMsg
    */
    
function readImage$file$type) {
        switch (
$type) {
            case 
2:    //JPEG
            
return(ImageCreateFromJPEG($file));
            break;
            
            case 
3:    //PNG
            
return(ImageCreateFromPNG($file));
            break;
            
            default:
            
$this->errorMsg="File format not supported.";
            return(
false);
        }
    }
    
/**
    * write image to file 
    *
    * @param resource $image  image 
    * @param string $file  image file (JPEG or PNG)
    * @param int $type  file type (2:JPEG or 3:PNG)
    * @return void
    * @access protected
    * @uses errorMsg
    */
    
function writeImage$image$file$type) {
        switch (
$type) {
            case 
2:    //JPEG
            
Imagejpeg$image$file);
            break;
            
            case 
3:    //PNG
            
Imagepng$image$file);
            break;
            
            default:
            
$this->errorMsg="File format not supported.";
        }
    }
    
/**
    * send image to stdout
    *
    * @param resource $image  image 
    * @param int $type  image type (2:JPEG or 3:PNG)
    * @return void
    * @access protected
    * @uses errorMsg
    */
    
function displayImage$image$type) {
        switch (
$type) {
            case 
2:    //JPEG
            
header("Content-Type: image/jpeg");
            
Imagejpeg$image);
            break;
            
            case 
3:    //PNG
            
header("Content-Type: image/png");
            
Imagepng$image);
            break;
            
            default:
            
$this->errorMsg="File format not supported.";
        }
    }
}
?>
esta es la forma de llamarla
Código PHP:
include_once("transparentWatermark.inc");

//set file names
$logo="logo.png";
$image="test.jpg";
$markedImage="marca".$image;

//no compute new watermark on same image
if (!file_exists($markedImage) ) {
    
// open classe with logo
    
$WM=new  transparentWatermark($logo);
    
// set logo's position (50,50)
    
$WM->setStampPosition transparentWatermarkOnRighttransparentWatermarkOnBottom);
    
// create new image with logo
    
if (!$WM->markImageFile $image$markedImage)) 
         die(
"Error:".$WM->getLastErrror()."\r\n");
}else{
unlink($markedImage);
}
// redirection to watermarked image

header("Location: $markedImage");
?> 
como se prodra hacer para que me guarde las nuevas imagenes en una carpera que yo lediga

saludos alex
__________________
__________________________________________________ _________
A beses el camino mas largo es la solución mas eficaz :)
  #2 (permalink)  
Antiguo 30/06/2005, 10:14
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 12 años, 6 meses
Puntos: 2
Código PHP:
$markedImage="marca".$image
Cambia la siguiente linea por algo como:
Código PHP:
$markedImage=realpath("../micarpeta/marca".$image); 
Saludos.
  #3 (permalink)  
Antiguo 30/06/2005, 10:38
Avatar de alexjnm  
Fecha de Ingreso: octubre-2004
Ubicación: cuba
Mensajes: 218
Antigüedad: 13 años, 1 mes
Puntos: 1
gracias

hola, me dise que no pude mostrat la imagen por que contine error
pero sin envargo me crea la imagen.

el error:
The image “http://localhost/web4arte/” cannot be displayed, because it contains errors.
__________________
__________________________________________________ _________
A beses el camino mas largo es la solución mas eficaz :)
  #4 (permalink)  
Antiguo 30/06/2005, 11:09
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 12 años, 6 meses
Puntos: 2
Código PHP:
 $markedImage="./micarpeta/marca".$image
hice unas pruebas, y me creo la imagen sin problemas. Lo unico qu eme dio problemas fue la funcion realpath con la estructura header. asi que quita la llamada la funcion y dejalo como lo he puesto.
Con eso debe de funcionar, a menos que por alguna razon no se esten creando adecuadamente tus imagenes.
  #5 (permalink)  
Antiguo 30/06/2005, 15:10
Avatar de alexjnm  
Fecha de Ingreso: octubre-2004
Ubicación: cuba
Mensajes: 218
Antigüedad: 13 años, 1 mes
Puntos: 1
gracias

ya funciona gracias por la ayuda espero poder ayudarte algundia
saludos alex
__________________
__________________________________________________ _________
A beses el camino mas largo es la solución mas eficaz :)
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 14:33.