PHP给图片加水印

415 阅读1分钟

1.GD库要开启 代码:

/**
 * 合并图片,融合合并
 * @param $file_1 原图片路径1
 * @param $file_2 原图片路径2
 * @param $re_file 合成图片保存路径
 * @param $position 水印位置 1:左上;2:左下,3:右上;4:右下;5:中间或者自己设置(['x'=1,'y'=0])
 */
public function merageImg($file_1, $file_2, $re_file='',$position=5)
{
    if (!$re_file){
        if (!is_dir($this->path)) {
            mkdir($this->path, 0777, true);
        }
        $re_file = $this->path.'/d'.time().'.png';
    }

    //将两张图片分别取到两个画布中
    $image_1 = $this->canvas($file_1);
    $image_2 = $this->canvas($file_2);
    //创建一个和大图一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)
    $image_3 = imageCreatetruecolor(imagesx($image_1), imagesy($image_1));
    //为真彩色画布创建白色背景,再设置为透明
    $color = imagecolorallocate($image_3, 255, 255, 255);
    imagefill($image_3, 0, 0, $color);
    imageColorTransparent($image_3, $color);
    //首先将大图画布采样copy到真彩色画布中,不会失真
    imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));

    //水印起始位置
    $x = 0;
    $y = 0;
    if (is_array($position)){
        $x = $position['x'];
        $y = $position['y'];
    }else{
        switch ($position){
            case 1:

                break;
            case 2:
                $y = imagesy($image_1)-imagesy($image_2);
                break;
            case 3:
                $x = imagesx($image_1)-imagesx($image_2);
                break;
            case 4:
                $x = imagesx($image_1)-imagesx($image_2);
                $y = imagesy($image_1)-imagesy($image_2);
                break;
            case 5:
                $x = (imagesx($image_1)-imagesx($image_2))/2;
                $y = (imagesy($image_1)-imagesy($image_2))/2;
                break;
        }
    }
    //再将小图图片copy到已经具有人物图像的真彩色画布中,同样也不会失真
    imagecopymerge($image_3, $image_2, $x, $y, 0, 0, imagesx($image_2), imagesy($image_2), 100);
    //将画布保存到指定的gif文件
    imagejpeg($image_3, $re_file);
    return $re_file;
}

/**
 * 将图片取到两个画布中
 * @param $file 图片路径
 */
protected function canvas($file){
    if(!file_exists($file))
    {
        return '文件路径错误';
    }
    $img = '';
    $typeArr=explode(".",$file);
    switch($typeArr['2'])
    {
        case "png":
            $img=imagecreatefrompng($file);
            break;
        case "jpg":
            $img=imagecreatefromjpeg($file);
            break;
        case "jpeg":
            $img=imagecreatefromjpeg($file);
            break;
        case "gif":
            $img=imagecreatefromgif($file);
            break;
        case "wbmp":
            $img=imagecreatefromwbmp($file);
            break;
        case "webp":
            $img=imagecreatefromwebp($file);
            break;
        case "xbm":
            $img=imagecreatefromxbm($file);
            break;
        case "xpm":
            $img=imagecreatefromxpm($file);
            break;
        case "gd":
            $img=imagecreatefromgd($file);
            break;
        case "gd2":
            $img=imagecreatefromgd2($file);
            break;
        case "gd2part":
            $img=imagecreatefromgd2part($file);
            break;
    }
    return $img;
}

放到项目中就可以直接用了