php 上传文件并添加水印

<?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>
发表评论 / Comment

用心评论~