PHP头条
热点:

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


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

www.phpzy.comtrue/php/36306.htmlTechArticlePHP给图片加水印实例函数教程 在php中要实现图片增加水印我们要用到的函数有很多,imagecreatefromjpeg,imagecreatefrompng,getimagesize等等函数,这些都是属于php GD库的函数,所以我们必须在...

相关文章

    暂无相关文章

PHP之友评论

今天推荐