PHP实例解析:实现给上传图片加水印图案
来源:互联网 发布:淘宝客服必备知识 编辑:程序博客网 时间:2024/04/29 07:13
用PHP给上传图片加水印的程序是通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面。如果你对PHP的GD库比较熟悉,看懂这篇文章一点都不难了!
/*****************************************************参数说明:$max_file_size : 上传文件大小限制, 单位BYTE$destination_folder : 上传文件路径$watermark : 是否附加水印(1为加水印,其他为不加水印);使用说明:1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;2. 将extension_dir =改为你的php_gd2.dll所在目录;3. http://www.knowsky.com/php.asp;****************************************************///上传文件类型列表 $uptypes=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');$max_file_size=2000000; //上传文件大小限制, 单位BYTE $destination_folder="uploadimg/"; //上传文件路径 $watermark=1; //是否附加水印(1为加水印,其他为不加水印); $watertype=1; //水印类型(1为文字,2为图片) $waterposition=1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中); $waterstring="http://www.xplore.cn/"; //水印字符串 $waterimg="xplore.gif"; //水印图片 $imgpreview=1; //是否生成预览图(1为生成,其他为不生成); $imgpreviewsize=1/2; //缩略图比例 ?>
<html><head><title>ZwelL图片上传程序</title><style type="text/css"><!--body{font-size: 9pt;}input{background-color: #66CCFF;border: 1px inset #CCCCCC;}--></style></head><body><form enctype="multipart/form-data" method="post" name="upform">上传文件:<input name="upfile" type="file"><input type="submit" value="上传"><br>允许上传的文件类型为:<?=implode(', ',$uptypes)?></form><?phpif ($_SERVER['REQUEST_METHOD'] == 'POST'){if (!is_uploaded_file($_FILES["upfile"][tmp_name]))//是否存在文件 {echo "图片不存在!";exit;}$file = $_FILES["upfile"];if($max_file_size < $file["size"])//检查文件大小 {echo "文件太大!";exit;}if(!in_array($file["type"], $uptypes))//检查文件类型 {echo "文件类型不符!".$file["type"];exit;}if(!file_exists($destination_folder)){mkdir($destination_folder);}$filename=$file["tmp_name"];$image_size = getimagesize($filename);$pinfo=pathinfo($file["name"]);$ftype=$pinfo['extension'];$destination = $destination_folder.time().".".$ftype;if (file_exists($destination) && $overwrite != true){echo "同名文件已经存在了";exit;}if(!move_uploaded_file ($filename, $destination)){echo "移动文件出错";exit;}$pinfo=pathinfo($destination);$fname=$pinfo[basename];echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>".$destination_folder.$fname."</font><br>"; echo " 宽度:".$image_size[0];echo " 长度:".$image_size[1];echo "<br> 大小:".$file["size"]." bytes";if($watermark==1){$iinfo=getimagesize($destination,$iinfo);$nimage=imagecreatetruecolor($image_size[0],$image_size[1]);$white=imagecolorallocate($nimage,255,255,255);$black=imagecolorallocate($nimage,0,0,0);$red=imagecolorallocate($nimage,255,0,0);imagefill($nimage,0,0,$white);switch ($iinfo[2]){case 1:$simage =imagecreatefromgif($destination);break;case 2:$simage =imagecreatefromjpeg($destination);break;case 3:$simage =imagecreatefrompng($destination);break;case 6:$simage =imagecreatefromwbmp($destination);break;default:die("不支持的文件类型");exit;}imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);switch($watertype){case 1: //加水印字符串 imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);break;case 2: //加水印图片 $simage1 =imagecreatefromgif("xplore.gif");imagecopy($nimage,$simage1,0,0,0,0,85,15);imagedestroy($simage1);break;}switch ($iinfo[2]){case 1://imagegif($nimage, $destination); imagejpeg($nimage, $destination);break;case 2:imagejpeg($nimage, $destination);break;case 3:imagepng($nimage, $destination);break;case 6:imagewbmp($nimage, $destination);//imagejpeg($nimage, $destination); break;}//覆盖原上传文件 imagedestroy($nimage);imagedestroy($simage);}if($imgpreview==1){echo "<br>图片预览:<br>";echo "<ccid_file values="\" width=".($image_size[0]*$imgpreviewsize)."height=".($image_size[1]*$imgpreviewsize);"echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\" />";}}?></body></html>
下面这个函数是可以用于加水印的
/** * 图片加水印(适用于png/jpg/gif格式) * * @author flynetcn * * @param $srcImg 原图片 * @param $waterImg 水印图片 * @param $savepath 保存路径 * @param $savename 保存名字 * @param $positon 水印位置 * 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右 * @param $alpha 透明度 -- 0:完全透明, 100:完全不透明 * * @return 成功 -- 加水印后的新图片地址 * 失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败 * -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败 */function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30, $disconce = 10){ $temp = pathinfo($srcImg); $name = $temp['basename']; $path = $temp['dirname']; $exte = $temp['extension']; $savename = $savename ? $savename : $name; $savepath = $savepath ? $savepath : $path; $savefile = $savepath .'/'. $savename; $srcinfo = @getimagesize($srcImg); if (!$srcinfo) { return -1; //原文件不存在 } $waterinfo = @getimagesize($waterImg); if (!$waterinfo) { return -2; //水印图片不存在 } $srcImgObj = image_create_from_ext($srcImg); if (!$srcImgObj) { return -3; //原文件图像对象建立失败 } $waterImgObj = image_create_from_ext($waterImg); if (!$waterImgObj) { return -4; //水印文件图像对象建立失败 } switch ($positon) {//1顶部居左case 1: $x=$y=0; break;//2顶部居右case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;//3居中case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;//4底部居左case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;//5底部居右case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;default: $x=$y=0; } imagecopy($srcImgObj, $waterImgObj, $x-$disconce, $y-$disconce, 0, 0, $waterinfo[0], $waterinfo[1]); switch ($srcinfo[2]) {case 1: imagegif($srcImgObj, $savefile); break;case 2: imagejpeg($srcImgObj, $savefile); break;case 3: imagepng($srcImgObj, $savefile); break;default: return -5; //保存失败 } imagedestroy($srcImgObj); imagedestroy($waterImgObj); return $savefile;}
测试上方函数
$srcImg = 'F:\workprj\trunk\data\static\images\bner_0827.jpg';$waterImg = 'F:\workprj\trunk\data\static\images\close.png'; echo 4545;$a = img_water_mark($srcImg, $waterImg,'F:\workprj','test.png');var_dump($a);
0 0
- PHP实例解析:实现给上传图片加水印图案
- PHP实例:实现给上传图片加水印图案
- php给上传图片加水印图案
- PHP实例程序:实现给上传图片加水印图案的做法
- php给上传图片加图片水印
- php给图片加水印实例函数
- PHP实现给图片加图片水印
- PHP实现给图片加文字水印
- PHP-给图片加水印
- PHP图片上传加水印
- 图片加水印上传(PHP)
- PHP代码实现给图片加文字水印
- php实现图片加水印
- php 给图片加水印的函数
- php给图片加文字水印
- PHP给图片加文字水印和图片水印
- PHP图片上传加水印(转)
- php多张图片上传加水印
- Java:注解(Annotation)自定义注解入门
- raw_input和input的区别
- javascript中错误使用var造成undefined
- 升级_开阔视野之Oracle图形化升级(升级后dbca建库)—10.2.0.1.0升为10.2.0.5.0
- maven下面怎么使用lib下的Jar包
- PHP实例解析:实现给上传图片加水印图案
- android中的系统广播
- 数模+lingo
- MINI2440启动配置文件/etc/init.d/rcS文件分析
- shell判断文件,目录是否存在或者具有权限
- Android: 在onCreate()中获得对象尺寸
- 在linux下安装mysql服务
- hdu 1078 搜索
- 树莓派Shell脚本文件