用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php给图片加水印实例函数

时间:2015-01-23  来源:西部数据  作者:西部数据

在php中要实现图片增加水印我们要用到的函数有很多,imagecreatefromjpeg,imagecreatefrompng,getimagesize等等函数,这些都是属于php GD库的函数,所以我们必须在php.ini中打开GD库才可以让php使用这些函数生成图片水印了.

实现水印功能主要就是靠这些函数功能操作.

1.imagecreatefromjpeg // 打开JPG图片

2.imagecreatefromgif    // 打开GIF图片

3.imagecreatefrompng // 打开PNG图片

4.imagecreatefromwbmp // 打开WBMP图片(比较少用)

5.getimagesize // 获取图片大小信息

6.imagecopymerge // 把多张图片整合(添加水印的主要函数)

7.imagejpeg // 保存JPG图片

8.imagegif    // 保存GIF图片

9.imagepng // 保存PNG图片

PHP实例代码如下:

  1. echo img_water_mark("1.jpg","walter.gif",null,"2.jpg",5,80);
  2. /** 
  3.  * 图片加水印(适用于png/jpg/gif格式) 
  4.  *  
  5.  * @author flynetcn 
  6.  * 
  7.  * @param $srcImg    原图片 
  8.  * @param $waterImg  水印图片 
  9.  * @param $savepath  保存路径 
  10.  * @param $savename  保存名字 
  11.  * @param $positon   水印位置  
  12.  *                   1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右  
  13.  * @param $alpha     透明度 -- 0:完全透明, 100:完全不透明 
  14.  *  
  15.  * @return 成功 -- 加水印后的新图片地址 
  16.  *      失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败 
  17.  *              -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败 
  18.  */ 
  19. function img_water_mark($srcImg$waterImg$savepath=null, $savename=null, $positon=5, $alpha=30) 
  20.  $temp = pathinfo($srcImg); 
  21.  $name = $temp[basename]; 
  22.  $path = $temp[dirname]; 
  23.  $exte = $temp[extension]; 
  24.  $savename = $savename ? $savename : $name
  25.  $savepath = $savepath ? $savepath : $path
  26.  $savefile = $savepath ."/"$savename
  27.  $srcinfo = @getimagesize($srcImg); 
  28.  if (!$srcinfo) { 
  29.   return -1;  //原文件不存在 
  30.  } 
  31.  $waterinfo = @getimagesize($waterImg); 
  32.  if (!$waterinfo) { 
  33.   return -2;  //水印图片不存在 
  34.  } 
  35.  $srcImgObj = image_create_from_ext($srcImg); 
  36.  if (!$srcImgObj) { 
  37.   return -3;  //原文件图像对象建立失败 
  38.  } 
  39.  $waterImgObj = image_create_from_ext($waterImg); 
  40.  if (!$waterImgObj) { 
  41.   return -4;  //水印文件图像对象建立失败 
  42.  } 
  43.  switch ($positon) { 
  44.  //1顶部居左 
  45.  case 1: $x=$y=0; break
  46.  //2顶部居右 
  47.  case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break
  48.  //3居中 
  49.  case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break
  50.  //4底部居左 
  51.  case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break
  52.  //5底部居右 
  53.  case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break
  54.  default$x=$y=0; 
  55.  } 
  56.  imagecopymerge($srcImgObj$waterImgObj$x$y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha); 
  57.  switch ($srcinfo[2]) { 
  58.  case 1: imagegif($srcImgObj$savefile); break
  59.  case 2: imagejpeg($srcImgObj$savefile); break
  60.  case 3: imagepng($srcImgObj$savefile); break
  61.  defaultreturn -5;  //保存失败 
  62.  } 
  63.  imagedestroy($srcImgObj); 
  64.  imagedestroy($waterImgObj); 
  65.  return $savefile
  66. }//开源代码phpfensi.com 
  67.  
  68. function image_create_from_ext($imgfile
  69.  $info = getimagesize($imgfile); 
  70.  $im = null; 
  71.  switch ($info[2]) { 
  72.  case 1: $im=imagecreatefromgif($imgfile); break
  73.  case 2: $im=imagecreatefromjpeg($imgfile); break
  74.  case 3: $im=imagecreatefrompng($imgfile); break
  75.  } 
  76.  return $im

目前支持jpg、gif、png等图片格式.

用法举例,代码如下:

  1. if($pic = watermark('./image.jpg','./watermark.png')) 
  2.     echo '<img src="' . $pic . '" border=0 />' ; 
  3. else  
  4.     echo '<img src="./image.jpg" border=0 />'

下面演示一个完整全水印增加函数,代码如下:

  1. <?php    
  2. /**************************************************************  
  3.  
  4. 参数说明:    
  5. $max_file_size  : 上传文件大小限制, 单位BYTE    
  6. $destination_folder : 上传文件路径    
  7. $watermark   : 是否附加水印(1为加水印,其他为不加水印);   
  8.  
  9. 使用说明:    
  10. 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;    
  11. 2. 将extension_dir =改为你的php_gd2.dll所在目录;    
  12. **************************************************************/   
  13.  
  14. //上传文件类型列表    
  15. $uptypes=array(    
  16.    'image/jpg',    
  17.    'image/jpeg',    
  18.    'image/png',    
  19.    'image/pjpeg',    
  20.    'image/gif',    
  21.    'image/bmp',    
  22.    'image/x-png'    
  23. );   
  24.  
  25. $max_file_size=2000000;     //上传文件大小限制, 单位BYTE    
  26. $destination_folder="uploadimg/"//上传文件路径    
  27. $watermark=1;      //是否附加水印(1为加水印,其他为不加水印);    
  28. $watertype=1;      //水印类型(1为文字,2为图片)    
  29. $waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);    
  30. $waterstring="http://www.111cn.net/";  //水印字符串    
  31. $waterimg="xplore.gif";    //水印图片    
  32. $imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);    
  33. $imgpreviewsize=1/1;    //缩略图比例    
  34. ?>    
  35. <html>    
  36. <head>    
  37. <title>图片打水印程序演示!WWW.MOP8.COM</title>    
  38. <style type="text/css">    
  39. <!--    
  40. body    
  41. {    
  42.     font-size: 9pt;    
  43. }    
  44. input    
  45. {    
  46.     background-color: #66CCFF;    
  47.     border: 1px inset #CCCCCC;    
  48. }    
  49. -->    
  50. </style>    
  51. </head>   
  52.  
  53. <body>    
  54. <center>   
  55. <form enctype="multipart/form-data" method="post" name="upform">    
  56.  上传文件:    
  57.  <input name="upfile" type="file">    
  58.  <input type="submit" value="上传"><P>    
  59.  允许上传的文件类型为:<?=implode(', ',$uptypes)?>    
  60. </form>    
  61. <FONT COLOR="#FF0000">本演示空间由TuWoo提供,本程序采用文字水印的方式.</FONT></CENTER>   
  62. <?php    
  63. if ($_SERVER['REQUEST_METHOD'] == 'POST')    
  64. {    
  65.    if (!is_uploaded_file($_FILES["upfile"][tmp_name]))    
  66.    //是否存在文件    
  67.    {    
  68.         echo "图片不存在!";    
  69.         exit;    
  70.    }   
  71.  
  72.    $file = $_FILES["upfile"];    
  73.    if($max_file_size < $file["size"])    
  74.    //检查文件大小    
  75.    {    
  76.        echo "文件太大!";    
  77.        exit;    
  78.    }   
  79.  
  80.    if(!in_array($file["type"], $uptypes))    
  81.    //检查文件类型    
  82.    {    
  83.        echo "文件类型不符!".$file["type"];    
  84.        exit;    
  85.    }   
  86.  
  87.    if(!file_exists($destination_folder))    
  88.    {    
  89.        mkdir($destination_folder);    
  90.    }   
  91.  
  92.    $filename=$file["tmp_name"];    
  93.    $image_size = getimagesize($filename);    
  94.    $pinfo=pathinfo($file["name"]);    
  95.    $ftype=$pinfo['extension'];    
  96.    $destination = $destination_folder.time().".".$ftype;    
  97.    if (file_exists($destination) && $overwrite != true)    
  98.    {    
  99.        echo "同名文件已经存在了";    
  100.        exit;    
  101.    }   
  102.  
  103.    if(!move_uploaded_file ($filename$destination))    
  104.    {    
  105.        echo "移动文件出错";    
  106.        exit;    
  107.    }   
  108.  
  109.    $pinfo=pathinfo($destination);    
  110.    $fname=$pinfo[basename];    
  111.    echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";    
  112.    echo " 宽度:".$image_size[0];    
  113.    echo " 长度:".$image_size[1];    
  114.    echo "<br> 大小:".$file["size"]." bytes";   
  115.  
  116.    if($watermark==1)    
  117.    {    
  118.        $iinfo=getimagesize($destination,$iinfo);    
  119.        $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);    
  120.        $white=imagecolorallocate($nimage,255,255,255);    
  121.        $black=imagecolorallocate($nimage,0,0,0);    
  122.        $red=imagecolorallocate($nimage,255,0,0);    
  123.        imagefill($nimage,0,0,$white);    
  124.        switch ($iinfo[2])    
  125.        {    
  126.            case 1:    
  127.            $simage =imagecreatefromgif($destination);    
  128.            break;    
  129.            case 2:    
  130.            $simage =imagecreatefromjpeg($destination);    
  131.            break;    
  132.            case 3:    
  133.            $simage =imagecreatefrompng($destination);    
  134.            break;    
  135.            case 6:    
  136.            $simage =imagecreatefromwbmp($destination);    
  137.            break;    
  138.            default:    
  139.            die("不支持的文件类型");    
  140.            exit;    
  141.        }   
  142.  
  143.        imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);    
  144.        imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);  
  145.  
  146.        switch($watertype)    
  147.        {    
  148.            case 1:   //加水印字符串    
  149.            imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);    
  150.            break;    
  151.            case 2:   //加水印图片    
  152.            $simage1 =imagecreatefromgif("xplore.gif");    
  153.            imagecopy($nimage,$simage1,0,0,0,0,85,15);    
  154.            imagedestroy($simage1);    
  155.            break;    
  156.        }   
  157.  
  158.        switch ($iinfo[2])    
  159.        {    
  160.            case 1:    
  161.            //imagegif($nimage, $destination);    
  162.            imagejpeg($nimage$destination);    
  163.            break;    
  164.            case 2:    
  165.            imagejpeg($nimage$destination);    
  166.            break;    
  167.            case 3:    
  168.            imagepng($nimage$destination);    
  169.            break;    
  170.            case 6:    
  171.            imagewbmp($nimage$destination);    
  172.            //imagejpeg($nimage, $destination);    
  173.            break;    
  174.        }   
  175.  
  176.        //覆盖原上传文件    
  177.        imagedestroy($nimage);    
  178.        imagedestroy($simage);    
  179.    }   
  180.  
  181.    if($imgpreview==1)    
  182.    {    
  183.    echo "<br>图片预览:<br>";    
  184.    echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);    
  185.    echo " alt="图片预览:r文件名:".$destination."r上传时间:">";    
  186.    }    
  187. }    
  188. ?>    
  189. </body>    
  190. </html> 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门