本文主要是介绍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生成文字水印和图片水印的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!