Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631155
  • 博文数量: 87
  • 博客积分: 3399
  • 博客等级: 中校
  • 技术积分: 1422
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 21:20
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(51)

2011年(33)

2010年(2)

分类: 系统运维

2011-08-14 20:16:26

  1. <?php
  2. /******************************************************************************

  3. 参数说明:
  4. $max_file_size : 上传文件大小限制, 单位BYTE
  5. $destination_folder : 上传文件路径
  6. $watermark : 是否附加水印(1为加水印,其他为不加水印);

  7. 使用说明:
  8. 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
  9. 2. 将extension_dir =改为你的php_gd2.dll所在目录;
  10. ******************************************************************************/

  11. //上传文件类型列表

  12. $uptypes=array(
  13.     'image/jpg',
  14.     'image/jpeg',
  15.     'image/png',
  16.     'image/pjpeg',
  17.     'image/gif',
  18.     'image/bmp',
  19.     'image/x-png'
  20. );

  21. $max_file_size=2000000; //大约2M,上传文件大小限制, 单位BYTE

  22. $destination_folder="uploadimg/"; //上传文件路径

  23. $watermark=1; //是否附加水印(1为加水印,其他为不加水印);

  24. $watertype=1; //水印类型(1为文字,2为图片)

  25. $waterposition=1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);

  26. $waterstring="JYS studio"; //水印字符串

  27. $waterimg="xplore.gif";//水印图片

  28. $imgpreview=1; //是否生成预览图(1为生成,其他为不生成);

  29. $imgpreviewsize=1/2; //缩略图比例

  30. ?>
  31. <html>
  32. <head>
  33. <title>ZwelL图片上传程序</title>
  34. <style type="text/css">

  35. </style>
  36. </head>

  37. <body>
  38. <form enctype="multipart/form-data" method="post" name="upform">
  39.   上传文件:
  40.   <input name="upfile" type="file">
  41.   <input type="submit" value="上传"><br>
  42.   允许上传的文件类型为:<?=implode(', ',$uptypes)?>
  43. </form>

  44. <?php
  45. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  46. {
  47.     //是否存在文件

  48.     if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
  49.     {
  50.          echo "图片不存在!";
  51.          exit;
  52.     }

  53.     $file = $_FILES["upfile"];

  54.     //检查文件大小

  55.     if($max_file_size < $file["size"])
  56.     {
  57.         echo "文件太大!不能超过2M!";
  58.         exit;
  59.     }

  60.     //检查文件类型

  61.     if(!in_array($file["type"], $uptypes))
  62.     {
  63.         echo "文件类型不符!".$file["type"];
  64.         exit;
  65.     }
  66.     
  67.     //上传到的文件夹不存在则自动创建

  68.     if(!file_exists($destination_folder))
  69.     {
  70.         mkdir($destination_folder);
  71.     }

  72.     $filename=$file["tmp_name"]; //系统自动生成的临时文件名

  73.     $filenamecustom = $file["name"]; //用户上传的文件名

  74.     $image_size = getimagesize($filename); //图像大小

  75.     $pinfo=pathinfo($file["name"]); //上传文件的路径信息

  76.     $ftype=$pinfo['extension']; //上传文件的扩展名

  77.     //$destination = $destination_folder.time().".".$ftype;//上传文件的目录+文件名+文件类型,文件名由time()生成

  78.     $destination = $destination_folder.$filenamecustom.".".$ftype;//上传文件的目录+用户文件名+文件类型

  79.     
  80.     //检查同名文件是否存在

  81.     if (file_exists($destination) && $overwrite != true)
  82.     {
  83.         echo "同名文件已经存在了";
  84.         exit;
  85.     }
  86.     
  87.     //移动文件到指定目录

  88.     if(!move_uploaded_file ($filename, $destination))
  89.     {
  90.         echo "移动文件出错";
  91.         exit;
  92.     }

  93.     $pinfo=pathinfo($destination); //上传到服务器上的文件的路径信息

  94.     $fname=$pinfo[basename]; //上传到服务器上的文件名

  95.    // echo " 已经成功上传!
    文件名: ".$destination_folder.$fname."
    ";

  96.    // echo " 已经成功上传!
    文件名: ".$destination."
    ";

  97.     echo " 已经成功上传!
    文件名: "
    .$destination_folder.$filenamecustom."
    ";
  98.     echo " 宽度:".$image_size[0];
  99.     echo " 长度:".$image_size[1];
  100.     echo "
    大小:"
    .$file["size"]." bytes";

  101.     if($watermark==1)
  102.     {
  103.         $iinfo=getimagesize($destination,$iinfo); //取得图像大小、类型

  104.         $nimage=imagecreatetruecolor($image_size[0],$image_size[1]); //新建一个真彩色图像,返回一个图像标识符,

  105.                                                                      //代表了一幅大小为 x_size 和 y_size 的黑色图像。

  106.         $white=imagecolorallocate($nimage,255,255,255); //nimage分配颜色

  107.         $black=imagecolorallocate($nimage,0,0,0);
  108.         $red=imagecolorallocate($nimage,255,0,0);

  109.         imagefill($nimage,0,0,$white); //在 nimage 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充

  110.                                        //(即与 x, y 点颜色相同且相邻的点都会被填充)。

  111.     /*
  112.     1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),
  113.     9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
  114.     */
  115.         switch ($iinfo[2])
  116.         {
  117.             case 1:
  118.             $simage =imagecreatefromgif($destination); //从给定的文件名取得的图像

  119.             break;
  120.             case 2:
  121.             $simage =imagecreatefromjpeg($destination);
  122.             break;
  123.             case 3:
  124.             $simage =imagecreatefrompng($destination);
  125.             break;
  126.             case 6:
  127.             $simage =imagecreatefromwbmp($destination);
  128.             break;
  129.             default:
  130.             die("不支持的文件类型"); //Equivalent to exit()

  131.             exit;
  132.         }

  133.         imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);//将simage从0,0开始,$image_size[0]宽、$image_size[1]高

  134.                                                                          //的一部分拷贝到nimage中坐标为0,0的位置上

  135.         imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);//在nimage 图像中用white颜色画一个左上角坐标为1,$image_size[1]-15

  136.                                                                                    //右下角坐标为80,$image_size[1]的矩形


  137.         switch($watertype)
  138.         {
  139.             case 1: //加水印字符串

  140.             imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);//用黑色将waterstring画到nimage的3,$image_size[1]-15坐标处,字体为内置字体2

  141.             break;
  142.             case 2: //加水印图片

  143.             $simage1 =imagecreatefromgif("xplore.gif");
  144.             imagecopy($nimage,$simage1,0,0,0,0,85,15);
  145.             imagedestroy($simage1); //释放与 simagel 关联的内存

  146.             break;
  147.         }

  148.         switch ($iinfo[2])
  149.         {
  150.             case 1:
  151.             //imagegif($nimage, $destination);

  152.             imagejpeg($nimage, $destination); //从 nimage 图像以 destination 为文件名创建一个 JPEG 图像。nimage 参数是 imagecreatetruecolor() 函数的返回值。

  153.             break;
  154.             case 2:
  155.             imagejpeg($nimage, $destination);
  156.             break;
  157.             case 3:
  158.             imagepng($nimage, $destination);
  159.             break;
  160.             case 6:
  161.             imagewbmp($nimage, $destination);
  162.             //imagejpeg($nimage, $destination);

  163.             break;
  164.         }

  165.         //释放内存

  166.         imagedestroy($nimage);
  167.         imagedestroy($simage);
  168.     }

  169.     if($imgpreview==1)
  170.     {
  171.     echo "
    图片预览:
    "
    ;
  172.     echo ".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
  173.     echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";
  174.     }
  175. }
  176. ?>
  177. </body>
阅读(5035) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~