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