美文网首页
防微信个人二维码中间放头像

防微信个人二维码中间放头像

作者: ambition_wy | 来源:发表于2017-12-23 15:07 被阅读0次

在做个人二维码的是时候需求需要中间有一个头像。

<?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

相关文章

网友评论

      本文标题:防微信个人二维码中间放头像

      本文链接:https://www.haomeiwen.com/subject/hacqgxtx.html