<?php $charset = 'utf-8'; header("content-type:text/html;charset=".$charset); /****************************************************************************** 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folder : 上传文件路径 $watermark : 是否附加水印(1为加水印,其他为不加水印); 使用说明: 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库; 2. 将extension_dir =改为你的php_gd2.dll所在目录; ******************************************************************************/ //上传文件类型列表 $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=5; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中); $waterstring= "http://sunshiyan.com"; //水印字符串 $waterimg="xplore.gif"; //水印图片 $imgpreview=1; //是否生成预览图(1为生成,其他为不生成); $imgpreviewsize=1; //缩略图比例 ?> <html> <head> <title>图片上传程序</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> <?php if ($_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);//将设置好的目录给赋值$pathinfo变量 $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)//是否加水印1为加0为不加 { $iinfo=getimagesize($destination,$iinfo);//获得此路径中文件的大小(即上传的这个图片的size信息) $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);//建立长,宽,的画布 $white=imagecolorallocate($nimage,255,255,255);//imagecolorallocate(hanle/画布名,红,绿,蓝) $black=imagecolorallocate($nimage,0,0,0); $red=imagecolorallocate($nimage,255,0,0); imagefill($nimage,0,0,$white);//画布用白色填充imagefill(画布名,横坐标,纵坐标,颜色) switch ($iinfo[2]) { case 1: $simage =imagecreatefromgif($destination);//建立gif图片 break; case 2: $simage =imagecreatefromjpeg($destination);//建立jpeg图片 break; case 3: $simage =imagecreatefrompng($destination);//建立png图片 break; case 6: $simage =imagecreatefromwbmp($destination);//建立bmp图片 break; default: die("不支持的文件类型"); exit; } imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); // 新建画布,新建图象 //bool imagecopy ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h ) // //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。 //imagefilledrectangle($nimage,1,$image_size[1]-15,180,$image_size[1],null); //ImageFilledRectangle --- 建立一個矩形並且填滿顏色 //語法 : int imagefilledrectangle (int im, int x1, int y1, int x2, int y2, int col) //ImageFilledRectangle( )在圖形 im中,建立一個填滿顏色 col的矩形,從左上方的坐標 x1,y1到右下方的坐標 x2,y2, //坐標 0,0是圖形的左上角。 switch($watertype)//选择水印类型 { case 1: //加水印字符串 imagestring($nimage,5,30,$image_size[1]-15,$waterstring,$white); imagettftext($nimage,12,4,100,100,$red,"simsun.ttc",$waterstring); imagettftext($nimage,12,1,380,430,$red,"simsun.ttc",$waterstring); imagettftext($nimage,12,4,22,430,$white,"simsun.ttc",$waterstring); //语法: int imagestring(int im, int font, int x, int y, string s, int col); //本函式在图片上绘出水平的横式字串。参数 font 为字形,设为 1 到 5 表示使用内定字形。 //参数 x、y 为字串起点坐标。字串的内容放在参数 s 上。参数 col 表示字串的颜色。 break; case 2: //加水印图片 $simage1 =imagecreatefromgif($waterimg); imagecopy($nimage,$simage1,0,0,0,0,128,128); imagedestroy($simage1); break; } switch ($iinfo[2]) { case 1: imagegif($nimage, $destination);//将jpg图片输出到浏览器 break; case 2: imagejpeg($nimage, $destination); break; case 3: imagepng($nimage, $destination);//将png图片输出到浏览器 break; case 6: imagewbmp($nimage, $destination);//将bmp图片输出的浏览器 break; } //覆盖原上传文件 imagedestroy($nimage); imagedestroy($simage); } if($imgpreview==1) { echo "<br>图片预览:<br>"; echo "<img src=\"".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize); echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; } } ?> </body> </html>
版权声明:《 php 上传文件并添加水印 》为zhangkang原创文章,转载请注明出处!
最后编辑:2019-5-5 20:05:13