php生成文字水印和图片水印

/*  
 * 制作图片水印
 * @param  string $old_img 原图地址
 * @param string $water 水印图地址
 * @param int $offset_x 水平偏移量
 * @param int $offset_y 垂直偏移量
 * @return string 新图片地址
 * @author zhao <2019-11-4>
 */
private function makeImgWater($ori_img, $water_img, $offset_x, $offset_y)
{   

    $original = getimagesize($ori_img); //得到图片的信息数组
    $watermark = getimagesize($water_img);
    
    //$original[2]是图片类型,其中1表示gif、2表示jpg、3表示png 
    $s_original = $this->imgCreateFrom($ori_img, $original[2]);//把两个图片写入画布
    $s_watermark = $this->imgCreateFrom($water_img, $watermark[2]);
    
    //dst_im 目标图像链接资源。src_img源图像链接资源。dst_x 目标点的x坐标。 dst_y终点的y坐标。src_x 源点的x坐标。src_y
     //源点的y坐标。src_w 源宽度。src_h 源高度。
     //打图片水印,将图片绘制到画布上 0,0即从坐标0,0开始取
    imagecopy($s_original, $s_watermark, $offset_x, $offset_y, 0, 0, $watermark[0], $watermark[1]);
    $up_path = ROOT_PATH . 'public/uploads/file/' . date("Y-m-d");
    if (!is_dir($up_path)) {
        mkdir($up_path);
    }
    $img_name = time() . '.jpg'; //图片名,防止和文字水印图片冲突
    $new_img = $up_path . '/' . $img_name;//图片名
    $loop = imagejpeg($s_original, $new_img);//生成新的图片(jpg格式),如果用imagepng可以生成png格式
    if($loop){
        //上传到服务器,返回新图片地址
        return $new_img;
        
    }

}


/**
 * 制作文字水印
 * @param string $ori_img 原图地址
 * @param string $water_text [<水印文字>]
 * @param int $font_size [<字号>] 
 * @param int $pos_x [<水平偏移量>]
 * @param int $pos_y [<垂直偏移量>]
 * @param int $tilt [<文字的倾斜度, 默认为0>]
 * @return string 新图片地址
 * @author zhao <[<2019-10-5>]>
 */
private function makeTextWater($ori_img, $water_text, $font_size, $pos_x, $pos_y, $tilt=0)
{   
    $original = getimagesize($ori_img); //得到原图片的信息数组
      //$original[2]是图片类型,其中1表示gif、2表示jpg、3表示png 
    $s_original = $this->imgCreateFrom($ori_img, $original[2]);//把图片写入画布
    //文字水印部分
    $color = imagecolorallocate($s_original,0,0,0);// 为一幅图像分配颜色 0,0,0默认黑色

    //打文字水印
    imagettftext($s_original, $font_size, $tilt, $pos_x, $pos_y, $color,  ROOT_PATH .'public/static/assets/fonts/MSYH.TTC', $water_text);
    $up_path = ROOT_PATH . 'public/uploads/file/' . date("Y-m-d");
    if (!is_dir($up_path)) {
        mkdir($up_path);
    }
    $img_name = time() . '.jpg';~~~~
    $new_img = $up_path . '/' . $img_name;//图片名
    $loop = imagejpeg($s_original, $new_img);//生成新的图片(png格式)

    if($loop){
        //返回图片地址
        return $new_img;
    }

}


/**
 * 根据文件类型 创建一个新画布
 */
private function imgCreateFrom($img_src, $val){
    switch($val){
        case 1 : $img = imagecreatefromgif($img_src);
            break;
        case 2 : $img = imagecreatefromjpeg($img_src);
            break;
        case 3 : $img = imagecreatefrompng($img_src);
            break;
    }
    return $img;

}

用PHP实现图片水印很简单,毕竟都有封装好的系统函数可以直接调用. 且可以多次调用,来实现图片加多个水印的效果,比如在一个foreach循环里调用多次文字水印方法,每次传不同的坐标和文字,把生成的图片地址返回再作为下一次调用的原图地址.即可在一张图片的不同位置添加水印.图片水印也同理.

你可能感兴趣的:(php,c,c++,c#,java)