在网站开发过程中,对图片进行自动处理是一项常见的需求。本文将详细介绍如何通过自定义函数实现图片的自动上传、压缩和水印功能。以下是具体的操作步骤以及代码实现。
首先,在e/class/userfun.php文件中添加一个自定义函数user_TranImgAuto,用于处理图片上传、缩放及水印操作。
function user_TranImgAuto($mid,$f,$isadd,$isq,$value,$cs){
global $empire,$dbtbpre,$public_r,$emod_r,$class_r,$tranpicturetype,$musername;
$filetf=$f.'file';//变量名
if(!$_FILES[$filetf]['name']){
return '';
}
$classid=(int)$_POST@['classid'];//栏目ID
$id=(int)$_POST@['id'];//信息ID
$filepass=(int)$_POST@['filepass'];
$filetype=GetFiletype($_FILES[$filetf]['name']);//文件类型
$pr=$empire->fetch1("select qaddtran,qaddtransize,qaddtranimgtype from {$dbtbpre}enewspublic limit 1");
if(!$pr['qaddtran']){
printerror("CloseQTranPic","",1);//系统关闭上传图片功能
}
if(!strstr($pr['qaddtranimgtype'],"|".$filetype."|"]){
printerror("NotQTranFiletype","",1);//您上传的文件扩展名有误
}
if($_FILES[$filetf]['size']>$pr['qaddtransize']*1024){
printerror("TooBigQTranFile","",1);//您上传的文件大小超过系统限制
}
if(!strstr($tranpicturetype,','.$filetype.',')){
printerror("NotQTranFiletype","",1);//您上传的文件扩展名有误
}
$tfr=DoTranFile($_FILES[$filetf]['tmp_name'],$_FILES[$filetf]['name'],$_FILES[$filetf]['type'],$_FILES[$filetf]['size'],$classid);
if($tfr['tran']){
$csr=explode(',',$cs);
$maxwidth=$csr[0];
$maxheight=$csr[1];
$datu=$csr[2];//是否保留原图判断
$suiyi=$csr[3];//是否加水印判断
include_once(ECMS_PATH.'e/class/gd.php');
$yname=$tfr['yname'];//大图完整地址
if($suiyi=="yes" and $datu=="yes"){
imageWaterMark($tfr[yname],5,"../data/mark/maskdef.gif","",5,"#FF0000","../data/mark/cour.ttf",100,100);//执行加水印
}
$name=$tfr['name'];//缩图完整地址
$filer=ResizeImage($yname,$name,$maxwidth,$maxheight,$public_r['spickill']);
if($datu=="no"){
DelFiletext($yname);//删除大图
}
if($filer['file']){
$type=1;
$filetime=date("Y-m-d H:i:s");
$filesize=@filesize($filer['file']);
$filename=GetFilename(str_replace(ECMS_PATH,'',$filer['file']));
$adduser='[Member]'.$musername;
$infoid=$isadd==1?0:$id;
if($datu=="yes"){
$empire->query("insert into {$dbtbpre}enewsfile(filename,filesize,adduser,path,filetime,classid,no,type,id,cjid,fpath) values('$tfr[filename]','$filesize','$adduser','$tfr[filepath]','$filetime','$classid','".addslashes(RepPostStr($_POST@[title]))."','$type','$infoid','$filepass','$public_r[fpath]');");
}
$value=$tfr['url'];//返回原图地址
}else{
$value='';
}
}else{
$value='';
}
return $value;
}
接下来,在标题图片字段(如titlepic)中添加处理函数调用。
具体字段处理函数添加说明如下:
user_TranImgAuto##160,120,yes,yes
参数解释:
160 宽度
120 高度
no 代表删除大图保留缩图,同时下面第4个参数无效;yes 代表保留大图和小图
no 代表不加水印;yes 代表加水印
通过以上步骤,您可以轻松实现图片的自动上传、压缩和水印功能。这种方法不仅提高了开发效率,还确保了图片处理的一致性和规范性。
希望本文能对您的项目有所帮助!如果您有任何疑问或需要进一步的帮助,请随时联系我。