在做个人二维码的是时候需求需要中间有一个头像。
<?php
/** 画圆角
* @param $radius 圆角位置
* @param $color_r 色值0-255
* @param $color_g 色值0-255
* @param $color_b 色值0-255
* @return resource 返回圆角
*/
function get_lt_rounder_corner($radius, $color_r, $color_g, $color_b)
{
// 创建一个正方形的图像
$img = imagecreatetruecolor($radius, $radius);
// 图像的背景
$bgcolor = imagecolorallocate($img, $color_r, $color_g, $color_b);
$fgcolor = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $bgcolor);
// $radius,$radius:以图像的右下角开始画弧
// $radius*2, $radius*2:已宽度、高度画弧
// 180, 270:指定了角度的起始和结束点
// fgcolor:指定颜色
imagefilledarc($img, $radius, $radius, $radius * 2, $radius * 2, 180, 270, $fgcolor, IMG_ARC_PIE);
// 将弧角图片的颜色设置为透明
imagecolortransparent($img, $fgcolor);
return $img;
}
/**
* 画一个带圆角的头像图
* @param $im 底图
* @param $dst_x 画出的图的(0,0)位于底图的x轴位置
* @param $dst_y 画出的图的(0,0)位于底图的y轴位置
* @param $image_w 画的图的宽
* @param $image_h 画的图的高
* @param $radius 圆角的值
* @return $im 返回带圆角的图像
*/
function imagebackgroundmycard($im, $dst_x, $dst_y, $image_w, $image_h, $radius)
{
$lt_corner = get_lt_rounder_corner($radius, 255, 255, 255);//圆角的背景色
// lt(左上角)
imagecopymerge($im, $lt_corner, 0, 0, 0, 0, $radius, $radius, 100);
// lb(左下角)
$lb_corner = imagerotate($lt_corner, 90, 0);
imagecopymerge($im, $lb_corner, 0, $image_h - $radius, 0, 0, $radius, $radius, 100);
// rb(右上角)
$rb_corner = imagerotate($lt_corner, 180, 0);
imagecopymerge($im, $rb_corner, $image_w - $radius, $image_h - $radius, 0, 0, $radius, $radius, 100);
// rt(右下角)
$rt_corner = imagerotate($lt_corner, 270, 0);
imagecopymerge($im, $rt_corner, $image_w - $radius, 0, 0, 0, $radius, $radius, 100);
return $im;
}
//获取二维码
$qrcode = file_get_contents('./2.png');
$qrcode = imagecreatefromstring($qrcode);
$qrcode_width = imagesx($qrcode);//得到宽度
$qrcode_height = imagesy($qrcode);//得到高度
//圆角背景图片
$corner = file_get_contents('./bj.gif');
$corner = imagecreatefromstring($corner);
$corner_width = imagesx($corner);//得到宽度
$corner_height = imagesy($corner);//得到高度
//计算圆角图片的宽高及相对于二维码的摆放位置,将圆角图片拷贝到二维码中央
//想要logo中的白色背景大一点可以改数字,数字越小背景越大
$corner_qr_height = $corner_qr_width = $qrcode_width/4;
$from_width = ($qrcode_width-$corner_qr_width)/2;
imagecopyresampled($qrcode, $corner, $from_width, $from_width, 0, 0, $corner_qr_width, $corner_qr_height, $corner_width, $corner_height);
//获取头像
$logo = imagecreatefromstring(file_get_contents('./1.png'));
$logo_width = imagesx($logo);//得到宽度
$logo_height = imagesy($logo);//得到高度
//矩形上面加圆角
$radius = 30;//圆角的像素,值越大越圆
$dst_x = 10;//距离白色大背景左边的距离
$y = 10;//距离白色大背景顶端的距离
//这里调用函数,绘制淡色的圆角背景,得到带圆角的头像
imagebackgroundmycard($logo, $dst_x, $y, $logo_width, $logo_height, $radius);
//计算logo图片的宽高及相对于二维码的摆放位置,将logo拷贝到二维码中央
//想要logo中的图像大一点可以改数字,数字越小头像越大
$logo_qr_height = $logo_qr_width = $qrcode_width/4 - 7;
$from_width = ($qrcode_width-$logo_qr_width)/2;
imagecopyresampled($qrcode, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
//保存图片
imagepng($qrcode, "./qrcode.png");
//直接输出图片 在浏览器显示
header('Content-type: image/png');
imagepng($qrcode);
imagedestroy($qrcode);
imagedestroy($corner);
imagedestroy($logo);
圆角图片,可以右键保存下来
bj.gif
网友评论