1、给图片加文字水印
//$src 图片的绝对路径名称
//$content 水印文字
function imgtag($src,$content){
//获取图片信息
$info = getimagesize($src);
//获取图片扩展名
$type = image_type_to_extension($info[2],false);
//动态的把图片导入内存中
$fun = "imagecreatefrom{
$type}";
$image = $fun($src);
//指定字体颜色 和 透明度
$col = imagecolorallocatealpha($image,119,119,119,60);
//指定文字路径,绝对路径
$font = ROOT_PATH.'/extend/org/verify/zhttfs/1.ttf';
//给图片添加文字
$font_x = $info[0]/3;
$font_y = $info[1]/3;
//40文字尺寸,-45文字偏转角度,font_x和font_y 文字起始位置的左上角坐标
imagettftext($image, 40, -45, $font_x, $font_y, $col, $font, $content);
$func = "image{
$type}";
//动态的输出图片到浏览器中
//header('Content-type:'.$info['mime']);
//$func($image);
//保存到指定文件
$func($image,$src);
//销毁图片
imagedestroy($image);
}
2、合并两张图片
$QR = imagecreatefrompng('qrcode.png'); //目标图象连接资源。
$logo = imagecreatefromjpeg('logo.jpg'); //源图象连接资源
$QR_width = imagesx($QR); //二维码图片宽度 ,二维码宽高一致,获取一个即可
$logo_width = imagesx($logo); //logo图片宽度 ,log宽高一致,获取一个即可
$start = ($QR_width/2)-($logo_width/2);//获取logo放置左上角的坐标点
//方法一
//imagecopymerge($QR,$logo,$start,$start,0,0,$logo_width,$logo_width,100);
//方法二
imagecopyresampled($QR,$logo,$start,$start,0,0,50,50,$logo_width,$logo_width);
imagepng($QR, 'new_qrcode.png');
imagedestroy($QR);
imagedestroy($logo);
imagecopymerge 和 imagecopyresampled都可以把两张图片合成在一起
imagecopymerge 更适合给图片打水印,因为可以调整来源图片的透明度
参数说明,按先后顺序:
- 目标图像资源,可以理解为大的,作为背景的那张图。可以是从文件读取的图片资源,也可以是用imagecreatetruecolor()创建的画布
- 来源图像资源,小的图,同上
- 来源图像左上角在目标图像上的坐标点 X轴位置
- 来源图像左上角在目标图像上的坐标点 Y轴位置
- 来源图像截取的起点位置X轴坐标
- 来源图像截取的起点位置Y轴坐标。意思是,来源图像可以截取一部分,合并到大图上,也可以全部合并到大图上。当这两个参数为,0,0,表示从来源图像的左上角顶点位置开始截取。
- 来源图像x轴截取长度
- 来源图像Y轴截取长度。当截取起始位置为0,0,截取长宽与来源图像长宽一致,表示来源图像整个合并到了目标图像上
- 透明度0-100,100表示完全合并,来源图不透明;0表示,来源图完全透明
imagecopyresampled 更适合来源图片尺寸不统一,需要压缩后合并的场景。
参数和上面的参数基本类似,不同的是多了两个参数,用于在目标图像上指定来源图像的范围。
参数说明,按先后顺序:
- 目标图像资源
- 来源图像资源
- 来源图像左上角在目标图像上的坐标点 X轴位置
- 来源图像左上角在目标图像上的坐标点 Y轴位置
- 来源图像截取的起点位置X轴坐标
- 来源图像截取的起点位置Y轴坐标
- 目标图像允许来源图像的宽度
- 目标图像允许来源图像的高度。这个两个参数,配合参数3,4;就在目标图像上规定了来源图像的位置和大小。超出这个大小就压缩,不够就用黑色填充
- 来源图像X轴截取长度
- 来源图像Y轴截取长度
下面是官方文档的图示说明。左边是来源图,右边是目标图,把大圆的放进小圆中
3、生成圆形图片
该方法生成圆形图时,有些黑色的图片可能会有些异常
若需要的圆形图片尺寸较小,不要生成小图,太小的图圆边会有锯齿,使用图片时设定图片的宽高即可
/**
* 生成圆形图片
* @param $imgpath 图片地址/支持微信、QQ头像等没有后缀的网络图
* @param $saveName string 保存文件名,默认空。
* @return resource 返回图片资源或保存文件
*/
function yuan_img($imgpath,$saveName = '') {
$src_img = imagecreatefromstring(file_get_contents($imgpath));
$w = imagesx($src_img);$h = imagesy($src_img);
$w = $h = min($w, $h);
$img = imagecreatetruecolor($w, $h);
//这一句一定要有
imagesavealpha($img, true);
//拾取一个完全透明的颜色,最后一个参数127为全透明
$bg = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $bg);
$r = $w / 2; //圆半径
for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgbColor = imagecolorat($src_img, $x, $y);
if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
imagesetpixel($img, $x, $y, $rgbColor);
}
}
}
//返回资源
if(!$saveName) return $img;
//输出图片到文件
imagepng ($img,$saveName);
//释放空间
imagedestroy($src_img);
imagedestroy($img);
}