首页 > 语言 > PHP > 正文

PHP图片加水印实现方法

2024-09-04 11:46:54
字体:大 中 小
来源:转载
供稿:网友

本文实例讲述了PHP图片加水印实现方法。分享给大家供大家参考,具体如下:

  1. <?php 
  2.  
  3. echo img_water_mark("2008112023204423477802.gif", "copyImg.png", $savepath=null, $savename="123.gif", $positon=2, $alpha=60); 
  4.  
  5. /** 
  6.  
  7.  * 图片加水印(适用于png/jpg/gif格式) 
  8.  
  9.  *  
  10.  
  11.  * @author flynetcn 
  12.  
  13.  * 
  14.  
  15.  * @param $srcImg 原图片 
  16.  
  17.  * @param $waterImg 水印图片 
  18.  
  19.  * @param $savepath 保存路径 
  20.  
  21.  * @param $savename 保存名字 
  22.  
  23.  * @param $positon 水印位置  
  24.  
  25.  * 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右  
  26.  
  27.  * @param $alpha 透明度 -- 0:完全透明, 100:完全不透明 
  28.  
  29.  *  
  30.  
  31.  * @return 成功 -- 加水印后的新图片地址 
  32.  
  33.  *     失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败-4:水印文件图像对象建立失败, -5:加水印后的新图片保存失败 
  34.  
  35.  */ 
  36.  
  37. function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30) 
  38.  
  39. { 
  40.  
  41.   $temp = pathinfo($srcImg); 
  42.  
  43.   $name = $temp['basename']; 
  44.  
  45.   $path = $temp['dirname']; 
  46.  
  47.   $exte = $temp['extension']; 
  48.  
  49.   $savename = $savename ? $savename : $name; 
  50.  
  51.   $savepath = $savepath ? $savepath : $path; 
  52.  
  53.   $savefile = $savepath .'/'. $savename; 
  54.  
  55.   $srcinfo = @getimagesize($srcImg); 
  56.  
  57.   if (!$srcinfo) { 
  58.  
  59.     return -1; //原文件不存在 
  60.  
  61.   } 
  62.  
  63.   $waterinfo = @getimagesize($waterImg); 
  64.  
  65.   if (!$waterinfo) { 
  66.  
  67.     return -2; //水印图片不存在 
  68.  
  69.   } 
  70.  
  71.   $srcImgObj = image_create_from_ext($srcImg); 
  72.  
  73.   if (!$srcImgObj) { 
  74.  
  75.     return -3; //原文件图像对象建立失败 
  76.  
  77.   } 
  78.  
  79.   $waterImgObj = image_create_from_ext($waterImg); 
  80.  
  81.   if (!$waterImgObj) { 
  82.  
  83.     return -4; //水印文件图像对象建立失败 
  84.  
  85.   } 
  86.  
  87.   switch ($positon) { 
  88.  
  89.   //1顶部居左 
  90.  
  91.   case 1: $x=$y=0; break; 
  92.  
  93.   //2顶部居右 
  94.  
  95.   case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break; 
  96.  
  97.   //3居中 
  98.  
  99.   case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break; 
  100.  
  101.   //4底部居左 
  102.  
  103.   case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break; 
  104.  
  105.   //5底部居右 
  106.  
  107.   case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break; 
  108.  
  109.   default: $x=$y=0; 
  110.  
  111.   } 
  112.  
  113.   imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha); 
  114.  
  115.   switch ($srcinfo[2]) { 
  116.  
  117.   case 1: imagegif($srcImgObj, $savefile); break; 
  118.  
  119.   case 2: imagejpeg($srcImgObj, $savefile); break; 
  120.  
  121.   case 3: imagepng($srcImgObj, $savefile); break; 
  122.  
  123.   default: return -5; //保存失败 
  124.  
  125.   } 
  126.  
  127.   imagedestroy($srcImgObj); 
  128.  
  129.   imagedestroy($waterImgObj); 
  130.  
  131.   return $savefile; 
  132.  
  133. } 
  134. //Vevb.com 
  135. function image_create_from_ext($imgfile) 
  136.  
  137. { 
  138.  
  139.   $info = getimagesize($imgfile); 
  140.  
  141.   $im = null; 
  142.  
  143.   switch ($info[2]) { 
  144.  
  145.   case 1: $im=imagecreatefromgif($imgfile); break; 
  146.  
  147.   case 2: $im=imagecreatefromjpeg($imgfile); break; 
  148.  
  149.   case 3: $im=imagecreatefrompng($imgfile); break; 
  150.  
  151.   } 
  152.  
  153.   return $im; 
  154.  
  155. } 
  156.  
  157. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表