免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1209 | 回复: 0
打印 上一主题 下一主题

php上传文件 并 为文件添加水印文字或图片 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览
  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. <!--
  36. body
  37. {
  38.      font-size: 9pt;
  39. }
  40. input
  41. {
  42.      background-color: yellow;
  43.      border: 1px inset #CCCCCC;
  44. }
  45. -->
  46. </style>
  47. </head>

  48. <body>
  49. <form enctype="multipart/form-data" method="post" name="upform">
  50.   上传文件:
  51.   <input name="upfile" type="file">
  52.   <input type="submit" value="上传"><br>
  53.   允许上传的文件类型为:<?=implode(', ',$uptypes)?> <!--将uptypes数组中的元素用','链接成字符串返回-->
  54. </form>

  55. <?php
  56. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  57. {
  58.     //是否存在文件

  59.     if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
  60.     {
  61.          echo "图片不存在!";
  62.          exit;
  63.     }

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

  65.     //检查文件大小

  66.     if($max_file_size < $file["size"])
  67.     {
  68.         echo "文件太大!不能超过2M!";
  69.         exit;
  70.     }

  71.     //检查文件类型

  72.     if(!in_array($file["type"], $uptypes))
  73.     {
  74.         echo "文件类型不符!".$file["type"];
  75.         exit;
  76.     }
  77.     
  78.     //上传到的文件夹不存在则自动创建

  79.     if(!file_exists($destination_folder))
  80.     {
  81.         mkdir($destination_folder);
  82.     }

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

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

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

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

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

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

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

  90.     
  91.     //检查同名文件是否存在

  92.     if (file_exists($destination) && $overwrite != true)
  93.     {
  94.         echo "同名文件已经存在了";
  95.         exit;
  96.     }
  97.     
  98.     //移动文件到指定目录

  99.     if(!move_uploaded_file ($filename, $destination))
  100.     {
  101.         echo "移动文件出错";
  102.         exit;
  103.     }

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

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

  106.    // echo " <font color=red>已经成功上传!</font><br>文件名: <font color=blue>".$destination_folder.$fname."</font><br>";

  107.    // echo " <font color=red>已经成功上传!</font><br>文件名: <font color=blue>".$destination."</font><br>";

  108.     echo " <font color=red>已经成功上传!</font><br>文件名: <font color=blue>".$destination_folder.$filenamecustom."</font><br>";
  109.     echo " 宽度:".$image_size[0];
  110.     echo " 长度:".$image_size[1];
  111.     echo "<br> 大小:".$file["size"]." bytes";

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

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

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

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

  118.         $black=imagecolorallocate($nimage,0,0,0);
  119.         $red=imagecolorallocate($nimage,255,0,0);

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

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

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

  130.             break;
  131.             case 2:
  132.             $simage =imagecreatefromjpeg($destination);
  133.             break;
  134.             case 3:
  135.             $simage =imagecreatefrompng($destination);
  136.             break;
  137.             case 6:
  138.             $simage =imagecreatefromwbmp($destination);
  139.             break;
  140.             default:
  141.             die("不支持的文件类型"); //Equivalent to exit()

  142.             exit;
  143.         }

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

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

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

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


  148.         switch($watertype)
  149.         {
  150.             case 1: //加水印字符串

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

  152.             break;
  153.             case 2: //加水印图片

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

  157.             break;
  158.         }

  159.         switch ($iinfo[2])
  160.         {
  161.             case 1:
  162.             //imagegif($nimage, $destination);

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

  164.             break;
  165.             case 2:
  166.             imagejpeg($nimage, $destination);
  167.             break;
  168.             case 3:
  169.             imagepng($nimage, $destination);
  170.             break;
  171.             case 6:
  172.             imagewbmp($nimage, $destination);
  173.             //imagejpeg($nimage, $destination);

  174.             break;
  175.         }

  176.         //释放内存

  177.         imagedestroy($nimage);
  178.         imagedestroy($simage);
  179.     }

  180.     if($imgpreview==1)
  181.     {
  182.     echo "<br>图片预览:<br>";
  183.     echo "<img src=\"".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
  184.     echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";
  185.     }
  186. }
  187. ?>
  188. </body>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP