php 水印文字 水印图片
不经意间成为了php coder,边学边做
因为项目需要用用到水印文字 ,水印图片自己就整理了一下,留作记录,便于日后学习
$text_list = array();
//一次性加多个水印文字
$text_list[0]['dst_path'] = "img/1.png";//水印底图路径
$text_list[0]['size'] =20;//字体大小
$text_list[0]['angle'] =0;//水印文字旋转角度
$text_list[0]['x'] =100;//水印文字x坐标
$text_list[0]['y'] =200;//水印文字y坐标
$text_list[0]['color'] =array(255,0,0); //水印文字颜色
$text_list[0]['font_file'] = "1.ttf"; //水印文字用到的字体文件
$text_list[0]['content'] = "晨露微凉"; //水印内容
$text_list[1]['dst_path'] = "img/1.png";//水印底图路径
$text_list[1]['size'] =20;//字体大小
$text_list[1]['angle'] =0;//水印文字旋转角度
$text_list[1]['x'] =222;//水印文字x坐标
$text_list[1]['y'] =300;//水印文字y坐标
$text_list[1]['color'] =array(255,255,0); //水印文字颜色
$text_list[1]['font_file'] = "1.ttf"; //水印文字用到的字体文件
$text_list[1]['content'] = "jokechat"; //水印内容
$text_list['avatar']['dst_path'] ="img/1.png";//底图路径
$text_list['avatar']['src_path'] ="img/avatar.jpg";//资源图路径
$text_list['avatar']['x'] =100;
$text_list['avatar']['y'] =200;
$text_list['avatar']['w'] =100;
$text_list['avatar']['h'] =100;
$text_list['avatar']['opacity'] =100; //资源图片透明度
water_text($text_list);
/*给图片加文字水印的方法*/
function water_text($text_list)
{
$dst_path = $text_list[0]['dst_path'];
$dst = imagecreatefromstring(file_get_contents($dst_path));
/*imagecreatefromstring()--从字符串中的图像流新建一个图像,返回一个图像标示符,其表达了从给定字符串得来的图像
图像格式将自动监测,只要php支持jpeg,png,gif,wbmp,gd2.*/
foreach($text_list as $key=> $text)
{
//如果是数字就处理一下 数字表示批量水印文字
if(is_numeric($key))
{
$black = imagecolorallocate($dst, $text['color'][0], $text['color'][1], $text['color'][2]);
imagefttext($dst, $text['size'], $text['angle'], $text['x'], $text['y'], $black, $text['font_file'], $text['content']);
}
}
//获取图片原始信息
$src_info = getimagesize ( $text_list['avatar']['src_path'] );
// 创建图片的实例
$src = imagecreatefromstring ( file_get_contents ( $text_list['avatar']['src_path'] ) );
// 创建一个彩色的底图
$image = imagecreatetruecolor ( $text_list['avatar']['w'] , $text_list['avatar']['h'] );
// 设定水印图片大小
imagecopyresized ( $image, $src, 0, 0, 0, 0, $text_list['avatar']['w'], $text_list['avatar']['h'], $src_info [0], $src_info [1] );
// copy图片并且重置图片大小
// 将水印图片复制到目标图片上,最后个参数是设置透明度,可以半透明效果
imagecopymerge ( $dst, $image, $text_list['avatar']['x'] , $text_list['avatar']['y'] , 0, 0, $text_list['avatar']['w'] , $text_list['avatar']['h'] , $text_list['avatar']['opacity'] );
/*imagefttext($img,$size,$angle,$x,$y,$color,$fontfile,$text)
$img由图像创建函数返回的图像资源
size要使用的水印的字体大小
angle(角度)文字的倾斜角度,如果是0度代表文字从左往右,如果是90度代表从上往下
x,y水印文字的第一个文字的起始位置
color是水印文字的颜色
fontfile,你希望使用truetype字体的路径*/
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
/*list(mixed $varname[,mixed $......])--把数组中的值赋给一些变量
像array()一样,这不是真正的函数,而是语言结构,List()用一步操作给一组变量进行赋值*/
/*getimagesize()能获取到什么信息?
getimagesize函数会返回图像的所有信息,包括大小,类型等等*/
//存储的文件名称 如果是windows系统存储中文文件名称需要转换为GBK编码
$name =iconv('UTF-8', 'GBK', "晨露微凉");
switch($dst_type) {
case 1 :
//GIF
header("content-type:image/gif");
imagegif($dst, $name . ".gif");
// /imagegif($dst);
break;
case 2 :
//JPG
header("content-type:image/jpeg");
imagejpeg($dst, "./inviter/".$name . ".jpg");
//imagejpeg($dst);
break;
case 3 :
//PNG
header("content-type:image/png");
imagepng($dst, "./inviter/".$name . ".png");
//imagepng($dst);
break;
default :
break;
/*imagepng--以PNG格式将图像输出到浏览器或文件
imagepng()将GD图像流(image)以png格式输出到标注输出(通常为浏览器),或者如果用filename给出了文件名则将其输出到文件*/
}
imagedestroy($dst);
}
从网上copy而来,具体来源补课追踪,加一改良,留待后续完善