PHP给图片加水印具体实现

给图片加水印实现方法如下:

  1 class Mark
  2 {
  3     public function __construct()
  4     {
  5  
  6     }
  7  
  8 /**
  9  * 加水印
 10  * @param  file     $srcImg   要加水印的图片
 11  * @param  file     $waterImg 水印图片
 12  * @param  integer  $position 水印图片放置位置  1:左上,2:右上,3:居中,4:左下,5:右下
 13  * @param  integer  $alpha    水印图片透明度   0-100
 14  * @return resource           返回加水印后的图像资源
 15  */
 16     public function waterMark($srcImg, $waterImg, $position=5, $alpha)
 17     {
 18         /**
 19          * 获取原图及水印图的宽高值(px)
 20          * @var [type]
 21          */
 22         $srcImgInfo = @getimagesize($srcImg);
 23         if(!$srcImgInfo) return FALSE;
 24         $srcW = $srcImgInfo[0];
 25         $srcH = $srcImgInfo[1];
 26  
 27         $waterInfo = @getimagesize($waterImg);
 28         if (!$waterInfo)return FALSE;//水印图片不存在或路径错误
 29         $waterW = $waterInfo[0];//宽度
 30         $waterH = $waterInfo[1];//高度
 31  
 32  
 33         /**
 34          * 生成图像资源
 35          * @var [type]
 36          */
 37         $srcImgObj = $this->imageCreateFromExt($srcImg);
 38         if (!$srcImgObj) return FALSE;
 39  
 40         $waterImgObj = $this->imageCreateFromExt($waterImg);
 41         if (!$waterImgObj) return FALSE;
 42         //计算水印的位置
 43         switch ($position)
 44         {
 45         //1顶部居左
 46         case 1:
 47             $srcX = $srcY = 0;
 48             break;
 49         //2顶部居右
 50         case 2:
 51             $srcX = $srcW - $waterW;
 52             $srcY = 0;
 53             break;
 54         //3居中
 55         case 3:
 56             $srcX = ($srcW -$waterW)/2;
 57             $srcY = ($srcH -$waterH)/2;
 58             break;
 59         //4底部居左
 60         case 4:
 61             $srcX = 0;
 62             $srcY = $srcH -$waterH;
 63             break;
 64         //5底部居右
 65         case 5:
 66             $srcX = $srcW - $waterW;
 67             $srcY = $srcH - $waterH;
 68             break;
 69         default:
 70             $srcX = $srcY = 0;
 71         }
 72         //合并原图和水印图片
 73         imagecopymerge($srcImgObj, $waterImgObj, $srcX, $srcY, 0, 0, $waterW, $waterH, $alpha);
 74         imagedestroy($waterImgObj);//关闭水印图像资源
 75         //返回合并后的图像资源,外部得到图像资源后可直接输出到浏览器也可保存成图片文件
 76         return $srcImgObj;
 77         }
 78  
 79     /**
 80     * 根据提供的原图格式创建新图像资源
 81     * @param file $imgfile
 82     * @return Ambigous <NULL, resource>
 83     */
 84     private function imageCreateFromExt($imgfile)
 85     {
 86         //获取图片的格式;格式:1、gif,2、jpg,3、png
 87         $imageType = getimagesize($imgfile)[2];
 88         $im = null;
 89         switch ($imageType) {
 90         case 1:
 91             $im = imagecreatefromgif($imgfile);
 92             break;
 93         case 2:
 94             $im = imagecreatefromjpeg($imgfile);
 95             break;
 96         case 3:
 97             $im = imagecreatefrompng($imgfile);
 98             break;
 99         default:
100             $im = imagecreatefrompng($imgfile);
101         }
102         return $im;
103     }
104 }

 

posted @ 2014-07-10 10:51  文兄在这  阅读(272)  评论(0编辑  收藏  举报