![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
[php]
<?php
/**
*Name:为图像加水印
*Author:骨头
* QQ:8779870
* Date:2006.12.22
*$watermark=new ImageWatermark(srcImage,watermark[,Position[,Transition]);
*if(!is_null($watermark->watermarkImage()))
* echo "";
*/
class ImageWatermark{
private $srcImage;//加水印文件名
private $srcImageWidth;
private $srcImageHeight;
private $srcImageType;
private $srcWatermarkImage;//水印文件
private $srcWatermarkImageWidth;
private $srcWatermarkImageHeight;
private $srcWatermarkImageType;
private $export; //输出文件名
private $pathImage;
private $watermarkTransition;//水印图片与原图片的融合度 (1=100)
private $watermarkPosition;//水印位置
private $watermarkText;//水印文字
private $watermarkTextSize=12;//水印字大小
private $watermarkTextAngle;//水印文字角度
private $watermarkTextfont;//水印字的大小,值1-5,默认为5
private $watermarkTextColor="#cccccc";//水印字体的颜色值
//构造函数
function __construct($srcImage,$srcWatermarkImage,$watermarkPosition="",$watermarkTransition="30"){
if($this->getImageType($srcImage)===false||!is_file($srcImage)) exit("加水印文件不正确");
if($this->getImageType($srcWatermarkImage)===false) exit("水印文件不正确");
$this->set("srcImage",$srcImage);
$this->set("srcWatermarkImage",$srcWatermarkImage);
$this->set("watermarkPosition",$watermarkPosition);
$this->set("watermarkTransition",$watermarkTransition);
$watermarkImageInfo=@getimagesize($this->srcWatermarkImage);
$this->set("srcWatermarkImageWidth",$watermarkImageInfo[0]);
$this->set("srcWatermarkImageHeight",$watermarkImageInfo[1]);
$this->set("srcWatermarkImageType",$watermarkImageInfo[2]);
$srcImageInfo=@getimagesize($this->srcImage);
$this->set("srcImageWidth",$srcImageInfo[0]);
$this->set("srcImageHeight",$srcImageInfo[1]);
$this->set("srcImageType",$srcImageInfo[2]);
if(($this->srcImageWidth-$this->srcWatermarkImageWidth<=0) or ($this->srcImageHeight-$this->srcWatermarkImageHeight<=0))
exit("水印图片比原图片大!");
}
function __destruct(){
}
//设定属性的值
private function set($var,$value){
$this->$var=$value;
}
//获取图片文件类型,如果非jpg,jpeg,gif,png则反回false
private function getImageType($imageName){
$name_array=explode(".",$imageName);
if(preg_match_all("/\.(jpg|jpeg|gif|png)$/",$imageName,$matches))
$type=strtolower($matches[1][0]);
else
$type=false;
return $type;
}
// 从水印文件或URL新建一图像
private function getWatermarkImage(){
switch($this->srcWatermarkImageType){
case 1: $w_im=imagecreatefromgif($this->srcWatermarkImage);break;
case 2: $w_im=imagecreatefromjpeg($this->srcWatermarkImage);break;
case 3: $w_im=imagecreatefrompng($this->srcwatermarkImage);break;
default: $w_im=false;
}
return $w_im;
}
//加水印文件或URL新建一图像
private function getImage(){
switch($this->srcImageType){
case 1
im=imagecreatefromgif($this->srcImage);break;
case 2
im=imagecreatefromjpeg($this->srcImage);break;
case 3
im=imagecreatefrompng($this->srcImage);break;
default
im=false;
}
return $im;
}
//水印放置的位置
private function getWatermarkImagePosition(){
switch($this->watermarkPosition){
case 0:
//随机
$wpX=rand(0,($this->srcImageWidth-$this->srcWatermarkImageWidth));
$wpY=rand(0,($this->srcImageHeight-$this->srcWatermarkImageHeight));
break;
case 1:
//顶端居左
$wpX=0;
$wpY=0;
break;
case 2:
//顶端居中
$wpX=($this->srcImageWidth-$this->srcWatermarkImageWidth)/2;
$wpY=0;
break;
case 3:
//顶端居右
$wpX=$this->srcImageWidth-$this->srcWatermarkImageWidth;
$wpY=0;
break;
case 4:
//中部居左
$wpX=0;
$wpY=($this->srcImageHeight-$this->srcWatermarkImageHeight)/2;
break;
case 5:
//中部居中
$wpX=($this->srcImageWidth-$this->srcWatermarkImageWidth)/2;
$wpY=($this->srcImageHeight-$this->srcWatermarkImageHeight)/2;
break;
case 6:
//中部居右
$wpX=$this->srcImageWidth-$this->srcWatermarkImageWidth;
$wpY=($this->srcImageHeight-$this->srcWatermarkImageHeight)/2;
break;
case 7:
//底部居左
$wpX=0;
$wpY=$this->srcImageHeight-$this->srcWatermarkImageHeight;
break;
case 8:
//底部居中
$wpX=($this->srcImageWidth-$this->srcWatermarkImageWidth)/2;
$wpY=$this->srcImageHeight-$this->srcWatermarkImageHeight;
break;
case 9:
//底部居右
$wpX=$this->srcImageWidth-$this->srcWatermarkImageWidth;
$wpY=$this->srcImageHeight-$this->srcWatermarkImageHeight;
break;
default:
//随机
$wpX=rand(0,($this->srcImageWidth-$this->srcWatermarkImageWidth));
$wpY=rand(0,($this->srcImageHeight-$this->srcWatermarkImageHeight));
}
return array("wpX"=>$wpX,"wpY"=>$wpY);
}
//生成图像
private function createImage(){
$pos=$this->getWatermarkImagePosition();
$posX=$pos['wpX'];
$posY=$pos['wpY'];
if(($des=$this->getImage())===false)
exit("加水印文件不正确");
if(($src=$this->getWatermarkImage())===false)
exit("水印文件不正确");
imagealphablending($des,true);//设定图像的混色模式
imagecopymerge($des,$src,$posX,$posY,0,0,$this->srcWatermarkImageWidth,$this->srcWatermarkImageHeight,$this->watermarkTransition);
return $des;
}
//把图像输出,若成功则返回true,失败返回null
public function watermarkImage(){
$imageType=$this->getImageType($this->srcImage);
if($imageType=="jpg")
$imageType="jpeg";
header("Content-type: image/{$imageType}");
$im=$this->createImage();
switch($imageType){
case 'gif':imagegif($im,$this->srcImage);break;
case 'png':imagepng($im,$this->srcImage);break;
case "jpeg":imagejpeg($im,$this->srcImage);break;
default:
exit("制做水印失败!");
}
imagedestroy($im);
return true;
}
}
?>
[/php]
[ 本帖最后由 goshawk 于 2006-12-23 09:03 AM 编辑 ]

