一聚教程网:一个值得你收藏的教程网站

热门教程

PHP给图片加水印实例函数教程

时间:2022-06-24 21:01:33 编辑:袖梨 来源:一聚教程网

在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 ' . $pic . '" border=0 />' ; 
  3. else  
  4.     echo ''

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

	

  1. /**************************************************************  
  2.  
  3. 参数说明:    
  4. $max_file_size  : 上传文件大小限制, 单位BYTE    
  5. $destination_folder : 上传文件路径    
  6. $watermark   : 是否附加水印(1为加水印,其他为不加水印);   
  7.  
  8. 使用说明:    
  9. 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;    
  10. 2. 将extension_dir =改为你的php_gd2.dll所在目录;    
  11. **************************************************************/   
  12.  
  13. //上传文件类型列表    
  14. $uptypes=array(    
  15.    'image/jpg',    
  16.    'image/jpeg',    
  17.    'image/png',    
  18.    'image/pjpeg',    
  19.    'image/gif',    
  20.    'image/bmp',    
  21.    'image/x-png'    
  22. );   
  23.  
  24. $max_file_size=2000000;     //上传文件大小限制, 单位BYTE    
  25. $destination_folder="uploadimg/"//上传文件路径    
  26. $watermark=1;      //是否附加水印(1为加水印,其他为不加水印);    
  27. $watertype=1;      //水印类型(1为文字,2为图片)    
  28. $waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);    
  29. $waterstring="http://www.111com.net/";  //水印字符串    
  30. $waterimg="xplore.gif";    //水印图片    
  31. $imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);    
  32. $imgpreviewsize=1/1;    //缩略图比例    
  33. ?>    
  34.     
  35.     
  36. 图片打水印程序演示!WWW.MOP8.COM    
  37. "text/css">    
  38.     
  39.     
  40.    
  41.  
  42.     
  43.    
  44. "multipart/form-data" method="post" name="upform">    
  45.  上传文件:    
  46.  "upfile" type="file">    
  47.  "submit" value="上传">

        

  48.  允许上传的文件类型为:', ',$uptypes)?>    
  49.     
  50. "#FF0000">本演示空间由TuWoo提供,本程序采用文字水印的方式.   
  51. if ($_SERVER['REQUEST_METHOD'] == 'POST')    
  52. {    
  53.    if (!is_uploaded_file($_FILES["upfile"][tmp_name]))    
  54.    //是否存在文件    
  55.    {    
  56.         echo "图片不存在!";    
  57.         exit;    
  58.    }   
  59.  
  60.    $file = $_FILES["upfile"];    
  61.    if($max_file_size < $file["size"])    
  62.    //检查文件大小    
  63.    {    
  64.        echo "文件太大!";    
  65.        exit;    
  66.    }   
  67.  
  68.    if(!in_array($file["type"], $uptypes))    
  69.    //检查文件类型    
  70.    {    
  71.        echo "文件类型不符!".$file["type"];    
  72.        exit;    
  73.    }   
  74.  
  75.    if(!file_exists($destination_folder))    
  76.    {    
  77.        mkdir($destination_folder);    
  78.    }   
  79.  
  80.    $filename=$file["tmp_name"];    
  81.    $image_size = getimagesize($filename);    
  82.    $pinfo=pathinfo($file["name"]);    
  83.    $ftype=$pinfo['extension'];    
  84.    $destination = $destination_folder.time().".".$ftype;    
  85.    if (file_exists($destination) && $overwrite != true)    
  86.    {    
  87.        echo "同名文件已经存在了";    
  88.        exit;    
  89.    }   
  90.  
  91.    if(!move_uploaded_file ($filename$destination))    
  92.    {    
  93.        echo "移动文件出错";    
  94.        exit;    
  95.    }   
  96.  
  97.    $pinfo=pathinfo($destination);    
  98.    $fname=$pinfo[basename];    
  99.    echo 已经成功上传
    文件名:  "
    .$destination_folder.$fname."
    "
    ;    
  100.    echo " 宽度:".$image_size[0];    
  101.    echo " 长度:".$image_size[1];    
  102.    echo "
     大小:"
    .$file["size"]." bytes";   
  103.  
  104.    if($watermark==1)    
  105.    {    
  106.        $iinfo=getimagesize($destination,$iinfo);    
  107.        $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);    
  108.        $white=imagecolorallocate($nimage,255,255,255);    
  109.        $black=imagecolorallocate($nimage,0,0,0);    
  110.        $red=imagecolorallocate($nimage,255,0,0);    
  111.        imagefill($nimage,0,0,$white);    
  112.        switch ($iinfo[2])    
  113.        {    
  114.            case 1:    
  115.            $simage =imagecreatefromgif($destination);    
  116.            break;    
  117.            case 2:    
  118.            $simage =imagecreatefromjpeg($destination);    
  119.            break;    
  120.            case 3:    
  121.            $simage =imagecreatefrompng($destination);    
  122.            break;    
  123.            case 6:    
  124.            $simage =imagecreatefromwbmp($destination);    
  125.            break;    
  126.            default:    
  127.            die("不支持的文件类型");    
  128.            exit;    
  129.        }   
  130.  
  131.        imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);    
  132.        imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);  
  133.  
  134.        switch($watertype)    
  135.        {    
  136.            case 1:   //加水印字符串    
  137.            imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);    
  138.            break;    
  139.            case 2:   //加水印图片    
  140.            $simage1 =imagecreatefromgif("xplore.gif");    
  141.            imagecopy($nimage,$simage1,0,0,0,0,85,15);    
  142.            imagedestroy($simage1);    
  143.            break;    
  144.        }   
  145.  
  146.        switch ($iinfo[2])    
  147.        {    
  148.            case 1:    
  149.            //imagegif($nimage, $destination);    
  150.            imagejpeg($nimage$destination);    
  151.            break;    
  152.            case 2:    
  153.            imagejpeg($nimage$destination);    
  154.            break;    
  155.            case 3:    
  156.            imagepng($nimage$destination);    
  157.            break;    
  158.            case 6:    
  159.            imagewbmp($nimage$destination);    
  160.            //imagejpeg($nimage, $destination);    
  161.            break;    
  162.        }   
  163.  
  164.        //覆盖原上传文件    
  165.        imagedestroy($nimage);    
  166.        imagedestroy($simage);    
  167.    }   
  168.  
  169.    if($imgpreview==1)    
  170.    {    
  171.    echo "
    图片预览:
    "
    ;    
  172.    echo "".$destination."" vars">$image_size[0]*$imgpreviewsize)." vars">$image_size[1]*$imgpreviewsize);    
  173.    echo " alt="图片预览:r文件名:".$destination."r上传时间:">";    
  174.    }    
  175. }    
  176. ?>    
  177.     
  178.  

热门栏目