麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
为我加水印类
悬赏分:20 - 2007年08月22日

[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 1im=imagecreatefromgif($this->srcImage);break;
case 2im=imagecreatefromjpeg($this->srcImage);break;
case 3im=imagecreatefrompng($this->srcImage);break;
defaultim=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 编辑 ]

提问者:goshawk   08-22 12:12
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
52 + 17 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM