首页 > 代码库 > PHP给图片加水印具体实现

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 }