PHP给图片加水印

<?php

/**
 *图片加水印
 *@param $srcImg 原图
 *@param $waterImg 水印图片
 *@param $savepath 保存路径
 *@param $savename 保存名字
 *@param $position 水印位置
 *1:左上  2:右上 3:居中 4:左下 5:右下
 *@param $opacity 透明度
 *0:全透明 100:完全不透明
 *@return  成功 -- 加水印后的新图片地址
 *         失败 -- -1:源文件不存在,-2:水印不存在,-3源文件图片对象建立失败,-4:水印文件图像对象建立失败,-5:加水印后的新图片保存失败
 * 获取源文件路径、宽高等信息,得出保存后文件保存路径、水印放置位置->建立源文件和水印图片对象->合并图片对象(imagecopymerge)->销毁图片对象
 */


function img_create_from_ext($imgfile){
    $info = getimagesize($imgfile);
    $im = null;
    switch ($info[2]) {
        case 1:
            $im = imagecreatefromgif($imgfile);
            break;
        case 2:
            $im = imagecreatefromjpeg($imgfile);
            break;
        case 3:
            $im = imagecreatefrompng($imgfile);
            break;
    }
    return $im;
}

function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $position=5, $opacity=50){
    $temp = pathinfo($srcImg);
    $name = $temp['basename'];
    $path = $temp['dirname'];
    $exte = $temp['extension'];
    $savename = $savename ? $savename : $name;
    $savepath = $savepath ? $savepath : $path;
    $savefile = $savepath.'/'.$savename; 

    $srcinfo = @getimagesize($srcImg);
    if(!$srcinfo){
        return -1;
    }
    $waterinfo = @getimagesize($waterImg);
    if(!$waterinfo){
        return -2;
    }
    $srcImgObj = img_create_from_ext($srcImg);
    if(!$srcImgObj){
        return -3;
    }
    $waterImgObj = img_create_from_ext($waterImg);
    if(!$waterImgObj){
        return -4;
    }
    switch ($position) {
        case 1:
            $x=$y=0;
            break;
        case 2:
            $x=$srcinfo[0] - $waterinfo[0];
            $y=0;
            break;
        case 3:
            $x=($srcinfo[0] - $waterinfo[0])/2;
            $y=($srcinfo[1] - $waterinfo[1])/2;
            break;
        case 4:
            $x=0;
            $y=$srcinfo[1] - $waterinfo[1];
            break;
        case 5:
            $x=$srcinfo[0] - $waterinfo[0];
            $y=$srcinfo[1] - $waterinfo[1];
            break;
    }
    // 合并图片+水印
    imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $opacity);

    switch ($srcinfo[2]) {
        case 1:
            imagegif($srcImgObj, $savefile);
            break;
        case 2:
            imagejpeg($srcImgObj, $savefile);
            break;
        case 3:
            imagepng($srcImgObj, $savefile);
            break;
        default: return -5;
    }
    imagedestroy($srcImgObj);
    imagedestroy($waterImgObj);
    return $savefile;
}


?>
原文地址:https://www.cnblogs.com/wangmeijian/p/6096937.html