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 $stampPositionX= transparentWatermarkOnRight;
    var $stampPositionY= transparentWatermarkOnBottom;
    
    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=max( min($rgbImage["red"]+$rgbStamp["red"]+$randomizer-0x80, 0xFF), 0x00);
                $g=max( min($rgbImage["green"]+$rgbStamp["green"]+$randomizer-0x80, 0xFF), 0x00);
                $b=max( min($rgbImage["blue"]+$rgbStamp["blue"]+$randomizer-0x80, 0xFF), 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->stampImage) imagedestroy( $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 ( transparentWatermarkOnRight, transparentWatermarkOnBottom);
    // 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