PHP上传、生成缩略图、生成文字水印和图片水印

/*
'-##########################################-|
'| 程序设计:(学技巧) | |
'| Email:755150799@qq.com |
'| 结合自己以前做的上传和生成缩略和改编一个
'| 老前辈的生成图片水印做成这个 |
'| 上传+生成缩略图+生成文字水印和图片水印 |
'| 可以直接引用 |
'-##########################################-|
*/
//审明图片文件夹
$$bigfolder="img";
$$smallfolder="smallimg";
//审明文件夹名称 以年月日来建议文件夹
$$fdate=date("Ymd");
//echo $$fdate;
//审明文件名称。以年月日时分秒命名
$$fname=date("YmdHis");
$$bigname="0724e_com_".$$fname;
$$smallname="0724e_com_".$$fname."_s";
//echo $$fname."
".$$bigname."
".$$smallname;
//确定大小文件夹的名称和路经
$$bigaddrname=$$bigfolder."/".$$fdate."/".$$bigname;
$$smalladdrname=$$smallfolder."/".$$fdate."/".$$smallname;
//审明小图片的高度和宽度
$$RESIZEWIDTH=180;
$$RESIZEHEIGHT=150;
//审明水印的文字或图片的地址及字体的地址
$$imgaddr="img.jpg"; //图片水印
$$fontname="www.0724e.com"; //文字水印
//充许上传的文件扩展名
$$exit_name=array(".jpg",".gif",".png");
if (isset($$_POST['Submit'])){
//上传部分----------------------------
//定议上传名称和上传错误
$$upfile=$$_FILES['image']['name'];
$$uperror=$$_FILES['image']['error'];
//最简表单验证
switch ($$uperror) {
case 1:
die("
上传真过PHP设置充许的最大值点击返回
");
break;
case 2:
die("
上传超过了表单充许的最大值点击返回
");
break;
case 3:
die("
文件只有部分被上传了点击返回
");
break;
case 4:
die("
文件不有被上传点击返回
");
break;
}
//检测扩展是否是充许上传的文件类型
//取得文件扩展名
$$exname=strrchr($$upfile,".");
//判断取得扩展名是否在要求的扩展名内
if(!in_array($$exname,$$exit_name))
die("
文件扩展名不对。只允许上传jpg gif png的图片点击返回
");
//检测存放图片的目录和子目录是否存在,如果不存在则建目录和子目录,并给目录最大权限777 对LINUX或unix对WINDOWS没必要
//大图
if (!file_exists($$bigfolder)){
mkdir($$bigfolder,0777);
mkdir($$bigfolder."/".$$fdate,0777);
}else{
if (!file_exists($$bigfolder."/".$$fdate)){
mkdir($$bigfolder."/".$$fdate,0777);
}
}
//缩略图
if (!file_exists($$smallfolder)){
mkdir($$smallfolder,0777);
mkdir($$smallfolder."/".$$fdate,0777);
}else{
if (!file_exists($$smallfolder."/".$$fdate)){
mkdir($$smallfolder."/".$$fdate,0777);
}
}
//创建目录结束
//得到临时上传的文件
$$upfiletmp=$$_FILES['image']['tmp_name'];
//判断临时文件是否存在
if ($$uperror==6)
die("
找不到临时上传文件,上传失败点击返回
");
//水印部分==========================================
//水印函数开始============
/** $$groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;
* $$waterPos 水印位置,有10种状态,0为随机位置;
* 1为顶端居左,2为顶端居中,3为顶端居右;
* 4为中部居左,5为中部居中,6为中部居右;
* 7为底端居左,8为底端居中,9为底端居右;
* $$waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;
* $$waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文;
* $$textFont 文字大小,值为1、2、3、4或5,默认为5;
* $$textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色);
* */
function imageWaterMark($$groundImage,$$waterPos=0,$$waterImage="",$$waterText="", $$textFont=5,$$textColor="#FF0000")
{
$$isWaterImage = FALSE;
$$formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";
//读取水印文件
if(!empty($$waterImage) && file_exists($$waterImage)) {
$$isWaterImage = TRUE;
$$water_info = getimagesize($$waterImage);
$$water_w = $$water_info[0];//取得水印图片的宽
$$water_h = $$water_info[1];//取得水印图片的高
switch($$water_info[2]) { //取得水印图片的格式
case 1:$$water_im = imagecreatefromgif($$waterImage);break;
case 2:$$water_im = imagecreatefromjpeg($$waterImage);break;
case 3:$$water_im = imagecreatefrompng($$waterImage);break;
default:die($$formatMsg);
}
}
//读取背景图片
if(!empty($$groundImage) && file_exists($$groundImage)) {
$$ground_info = getimagesize($$groundImage);
$$ground_w = $$ground_info[0];//取得背景图片的宽
$$ground_h = $$ground_info[1];//取得背景图片的高
switch($$ground_info[2]) { //取得背景图片的格式
case 1:$$ground_im = imagecreatefromgif($$groundImage);break;
case 2:$$ground_im = imagecreatefromjpeg($$groundImage);break;
case 3:$$ground_im = imagecreatefrompng($$groundImage);break;
default:die($$formatMsg);
}
} else {
die("需要加水印的图片不存在!");
}
//水印位置
if($$isWaterImage) { //图片水印
$$w = $$water_w;
$$h = $$water_h;
$$label = "图片的";
} else { //文字水印
$$temp = imagettfbbox(ceil($$textFont*2.5),0,"./cour.ttf",$$waterText);//取得使用 TrueType 字体的文本的范围
$$w = $$temp[2] - $$temp[6];
$$h = $$temp[3] - $$temp[7];
unset($$temp);
$$label = "文字区域";
}
if( ($$ground_w<$$w) || ($$ground_h<$$h) ) {
echo "需要加水印的图片的长度或宽度比水印".$$label."还小,无法生成水印!";
return;
}
switch($$waterPos) {
case 0://随机
$$posX = rand(0,($$ground_w - $$w));
$$posY = rand(0,($$ground_h - $$h));
break;
case 1://1为顶端居左
$$posX = 0;
$$posY = 0;
break;
case 2://2为顶端居中
$$posX = ($$ground_w - $$w) / 2;
$$posY = 0;
break;
case 3://3为顶端居右
$$posX = $$ground_w - $$w;
$$posY = 0;
break;
case 4://4为中部居左
$$posX = 0;
$$posY = ($$ground_h - $$h) / 2;
break;
case 5://5为中部居中
$$posX = ($$ground_w - $$w) / 2;
$$posY = ($$ground_h - $$h) / 2;
break;
case 6://6为中部居右
$$posX = $$ground_w - $$w;
$$posY = ($$ground_h - $$h) / 2;
break;
case 7://7为底端居左
$$posX = 0;
$$posY = $$ground_h - $$h;
break;
case 8://8为底端居中
$$posX = ($$ground_w - $$w) / 2;
$$posY = $$ground_h - $$h;
break;
case 9://9为底端居右
$$posX = $$ground_w - $$w;
$$posY = $$ground_h - $$h;
break;
default://随机
$$posX = rand(0,($$ground_w - $$w));
$$posY = rand(0,($$ground_h - $$h));
break;
}
//设定图像的混色模式
imagealphablending($$ground_im, true);
if($$isWaterImage) { //图片水印
imagecopy($$ground_im, $$water_im, $$posX, $$posY, 0, 0, $$water_w,$$water_h);//拷贝水印到目标文件
} else {//文字水印
if( !empty($$textColor) && (strlen($$textColor)==7) ) {
$$R = hexdec(substr($$textColor,1,2));
$$G = hexdec(substr($$textColor,3,2));
$$B = hexdec(substr($$textColor,5));
} else {
die("水印文字颜色格式不正确!");
}
imagestring ( $$ground_im, $$textFont, $$posX, $$posY, $$waterText, imagecolorallocate($$ground_im, $$R, $$G, $$B));
}
//生成水印后的图片
@unlink($$groundImage);
switch($$ground_info[2]) {//取得背景图片的格式
case 1:imagegif($$ground_im,$$groundImage);break;
case 2:imagejpeg($$ground_im,$$groundImage);break;
case 3:imagepng($$ground_im,$$groundImage);break;
default:die($$errorMsg);
}
//释放内存
if(isset($$water_info)) unset($$water_info);
if(isset($$water_im)) imagedestroy($$water_im);
unset($$ground_info);
imagedestroy($$ground_im);
}
//水印函数完
//存在则移动完在上传
$$goodupfile=@move_uploaded_file($$upfiletmp,$$bigaddrname.$$exname);
if (!$$goodupfile){
die("
上传图片失败点击返回
");
}else{
//文字水印
imageWaterMark($$bigaddrname.$$exname,5,"",$$fontname,5,"#FF0000");
//图片水印
//imageWaterMark($$bigaddrname.$$exname,5,$$imgaddr);
//结束水印部分===================================
//缩略图部分------------------------------------------------------------
//判断缩略图大小函数-----
function ResizeImage($$im,$$maxwidth,$$maxheight,$$name){
$$width = imagesx($$im);
$$height = imagesy($$im);
if(($$maxwidth && $$width > $$maxwidth) || ($$maxheight && $$height > $$maxheight)){
if($$maxwidth && $$width > $$maxwidth){
$$widthratio = $$maxwidth/$$width;
$$RESIZEWIDTH=true;
}
if($$maxheight && $$height > $$maxheight){
$$heightratio = $$maxheight/$$height;
$$RESIZEHEIGHT=true;
}
if($$RESIZEWIDTH && $$RESIZEHEIGHT){
if($$widthratio < $$heightratio){
$$ratio = $$widthratio;
}else{
$$ratio = $$heightratio;
}
}elseif($$RESIZEWIDTH){
$$ratio = $$widthratio;
}elseif($$RESIZEHEIGHT){
$$ratio = $$heightratio;
}
$$newwidth = $$width * $$ratio;
$$newheight = $$height * $$ratio;
if(function_exists("imagecopyresampled")){
$$newim = imagecreatetruecolor($$newwidth, $$newheight);
imagecopyresampled($$newim, $$im, 0, 0, 0, 0, $$newwidth, $$newheight, $$width, $$height);
}else{
$$newim = imagecreate($$newwidth, $$newheight);
imagecopyresized($$newim, $$im, 0, 0, 0, 0, $$newwidth, $$newheight, $$width, $$height);
}
ImageJpeg ($$newim,$$smalladdrname.$$name.".jpg");
ImageDestroy ($$newim);
}else{
ImageJpeg ($$im,$$smalladdrname.$$name.".jpg");
}
}
//生成部分
if($$_FILES['image']['size']){
if($$_FILES['image']['type'] == "image/pjpeg"){
$$im = imagecreatefromjpeg($$bigaddrname.$$exname);
}elseif($$_FILES['image']['type'] == "image/x-png"){
$$im = imagecreatefrompng($$bigaddrname.$$exname);
}elseif($$_FILES['image']['type'] == "image/gif"){
$$im = imagecreatefromgif($$bigaddrname.$$exname);
}
if($$im){
if(file_exists($$smalladdrname.".jpg")){
unlink($$smalladdrname.".jpg");
}
ResizeImage($$im,$$RESIZEWIDTH,$$RESIZEHEIGHT,$$smalladdrname);
ImageDestroy ($$im);
}
}
echo "";
}
//缩略图结束-----------------------------------------------------
}
?>

+