您的位置:首页 > 编程语言 > PHP开发

php图片水印与缩略图

2010-05-21 21:32 337 查看
最近由于客户需求,写了一个图片压缩的函数,可加水印。
由于我使用PHP开发也只是2个月的事,肯定会存在一些不足,希望各位大侠不吝赐教,有什么问题可以发邮件给我,邮箱是:silence0721@gmail.com。下面是源码
<?php
/*************************************************************************************
函数功能:图片操作(压缩/放大),可加水印文字/图片

made by S71ENCE

参数说明:
$imgHave->被操作的图片路径
$isAutoReduce->图片是否自动按照大小等级压缩 是(1)
$isAppoint->是否手动进行压缩 是(1)
$multiple->手动指定压缩比例
$isWaterStr->是否加水印文字 是(1)
$waterStr->水印文字
$isWatermark->是否加水印图片 是(1)
$imglogo->水印图片路径
$isDisplay->是否显示图片 是(1)
$isCreate->是否生成压缩后的图片 是(1)

注:1.生成新图时不可显示图片,即$isDisplay和$isCreate不可同时置为1
2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩
3.不建议启用水印,若要启用,建议原图片大小最好在1000以内
4.水印文字中不可含有中文
5.新生成的图片在原目录文件中,支持N个层级
**********************************************************************************/

function image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate)
{
//获取原图
$imgInfo=getimagesize($imgHave);

switch($imgInfo[2])
{
case 1:
$imgGet=@imagecreatefromgif($imgHave);
break;

case 2:
$imgGet=@imagecreatefromjpeg($imgHave);
break;

case 3:
$imgGet=@imagecreatefrompng($imgHave);
break;
}

//文字水印
if($isWaterStr==1)
{
//imagettftext(原图,文字大小,文字旋转,水印起始坐标X,水印起始坐标Y,$te,'simhei.ttf',$str);
$te=imagecolorallocate($imgGet,255,255,255);
$str=iconv("gbk","UTF-8",$waterStr);//水印文字
imagettftext($imgGet,16,0,$imgInfo[0]-200,$imgInfo[1]-20,$te,'MSYH.TTF',$str);
}

//图片水印
if($isWatermark==1)
{
//水印图片处理
$logoInfo=getimagesize($imglogo);

switch($logoInfo[2])
{
case 1:
$logo=@imagecreatefromgif($imglogo);
break;

case 2:
$logo=@imagecreatefromjpeg($imglogo);
break;

case 3:
$logo=@imagecreatefrompng($imglogo);
break;
}
//水印logo图片
//函数说明:imagecopy(原图,水印图片,水印坐标X,水印坐标Y,水印图片开始坐标X,水印图片开始坐标Y,'水印图片宽','水印图片高');
imagecopy($imgGet,$logo,0,0,0,0,$logoInfo[0],$logoInfo[1]);
}

//自动图片压缩 按图片大小分级自动压缩,3个压缩等级,宽高小于1000的不进行压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAutoReduce==1)
{
if($imgInfo[0]>3000 || $imgInfo[1]>3000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.2,$imgInfo[1]*0.2);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.2,$imgInfo[1]*0.2,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>2000 || $imgInfo[1]>2000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.3,$imgInfo[1]*0.3);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.3,$imgInfo[1]*0.3,$imgInfo[0],$imgInfo[1]);
}
else if($imgInfo[0]>1000 || $imgInfo[1]>1000)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*0.5,$imgInfo[1]*0.5);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*0.5,$imgInfo[1]*0.5,$imgInfo[0],$imgInfo[1]);
}
else
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*1,$imgInfo[1]*1);
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*1,$imgInfo[1]*1,$imgInfo[0],$imgInfo[1]);
}
}

//手动图片压缩
//imagecopyresized(画布,原图,画布起始X坐标,画布起始Y坐标,原图起始X坐标,原图起始X坐标,新图片宽,新图片高,原图片宽,原图片高);
if($isAppoint)
{
$newImageGet=imagecreatetruecolor($imgInfo[0]*$multiple,$imgInfo[1]*$multiple);//生成画布
imagecopyresized($newImageGet,$imgGet,0,0,0,0,$imgInfo[0]*$multiple,$imgInfo[1]*$multiple,$imgInfo[0],$imgInfo[1]);
}

//图像输出
if($isDisplay==1)
{
header("Content-type: image/jpeg");
return imagejpeg($newImageGet);
}

//新图像生成
if($isCreate==1)
{
$newName=explode("/",$imgHave);
$newNameString="";

for($i=0;$i<count($newName)-1;$i++)
{
$newNameString.=$newName[$i]."/";
}

$newImgName=$newNameString."new".$newName[$i];

if(imagejpeg($newImageGet,$newImgName) && imagejpeg($imgGet,$imgHave))
{
return "图片生成成功!<br/>新图:".$newImgName."<br/>原图:".$imgHave;
}
else
{
return "图片生成失败,请检查配置是否正确!";
}
}
}

/************************************************************************************
函数调用方法:

$imgHave="../image/125T501N450-1TX5.jpg"; //被操作的图片路径
$isAutoReduce=0;//图片是否自动按照大小等级压缩 是(1)
$isAppoint=1;//是否手动进行压缩 是(1)
$multiple=0.5;//手动指定压缩比例
$isWaterStr=0;//是否加水印文字
$waterStr="www.cyooy.com";//水印文字
$isWatermark=0;//是否加水印图片 是(1)
$imglogo="../image/Logo_about.gif";//水印图片路径
$isDisplay=1;//是否显示图片 是(1)
$isCreate=0;//是否生成压缩后的图片 是(1)
echo image_control($imgHave,$isAutoReduce,$isAppoint,$multiple,$isWaterStr,$waterStr,$isWatermark,$imglogo,$isDisplay,$isCreate);

*************************************************************************************/
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: