PHP 生成带logo二维码并修改背景颜色,利用画布布局二维样式

本文详细介绍了一种使用PHP生成带有logo的二维码的方法,包括如何设置二维码的内容、尺寸、颜色及容错级别,同时演示了如何将二维码与背景图进行合成,最终生成一张完整的二维码图片。

二维码

先上图在这里插入图片描述

<?php


include 'lib/phpqrcode.php';
require_once 'lib/image.php';
$value = "localhost/1?sourcetype=3" . "&tablenum=2";//二维码内容

$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 20;//生成图片大小
//生成二维码图片
//开始生成
$color = [
    [255, 255, 255],//背景色
    [82, 103, 220],//定位角的颜色
    [82, 103, 220],//中间内容的颜色
];
//参数 活动模板图片,二维码url,模板内二维码的位置
/**
 * $template 背景图
 * $url      二维码内容
 * $sx,$y    坐标
 * $color    二维背景颜色
 */
$template = 'qrimg.png';//背景图
$url = $value;
function getActivityImg($template, $url, $x, $y, $color)
{
    //二维码中间添加logo
    /******************************固定logo图片大小*******************************/
    $logo_raw = "1212.jpg";//logo图

    $imgHandle = new Image_process("$logo_raw");
    $imgHandle->fixSizeImage(150, 150); //固定logo图片大小值
    /******************************固定logo图片大小*******************************/
    $logo = "1212.jpg";//固定大小logo图路径
    $QR = "base.png";
    $last = "last.png";
    $errorCorrectionLevel = 'Q'; //防错等级
    $matrixPointSize = 8; //二维码大小
    //生成二维码
    //参数内容:二维码储存内容,生成存储,防错等级,二维码大小,白边大小
    \QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 1, false, $color);

    //合并logo跟二维码-----------------start
    $QR = imagecreatefromstring(file_get_contents($QR));
    $logo = imagecreatefromstring(file_get_contents($logo));
    $QR_width = imagesx($QR);
    $logo_width = imagesx($logo);
    $logo_height = imagesy($logo);
    $logo_qr_width = $QR_width / 5;
    $scale = $logo_width / $logo_qr_width;
    $logo_qr_height = $logo_height / $scale;
    $from_width = ($QR_width - $logo_qr_width) / 2;
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
    imagepng($QR, $last); // 生成带log的二维码图片 存储到last
//    unlink('base.png');//删除二维底图
    //合并logo跟二维码-----------------end


    //合成带logo的二维码图片跟 模板图片--------------start
    $path_1 = $template;
    $path_2 = $last;
    //创建一块画布,并从 PNG 文件或 URL 地址载入一副图像
    $image_1 = imagecreatefrompng($path_1);
    $image_2 = imagecreatefrompng($path_2);
    $image_3 = imageCreatetruecolor(imagesx($image_1), imagesy($image_1));
    $color = imagecolorallocate($image_3, 255, 255, 255);
    imagefill($image_3, 0, 0, $color);
    imageColorTransparent($image_3, $color);
    imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));

    imagecopymerge($image_3, $image_2, $x, $y, 0, 0, imagesx($image_2), imagesy($image_2), 100);
    //合成带logo的二维码图片跟 模板图片--------------end

    //输出到本地文件夹
    $fileName = 'qr';
    $EchoPath = $fileName . '.png';
    imagepng($image_3, $EchoPath);
    imagedestroy($image_3);
    //画图
    createCanvas($EchoPath);
    //返回生成的路径
//    echo "<img src='" . $EchoPath . "'>";
//    echo "<img src='/qrcode/logo/logo.png'>";
    unlink('base.png');
    unlink('last.png');
    die;
}

getActivityImg($template, $url, $x = 43, $y = 44, $color);

//生成画布
function createCanvas($qrImg)
{
    //require_once 'lib/font.php';
    header('Content-type: text/html; charset=UTF8'); // UTF8不行改成GBK试试,与你保存的格式匹配
//第一:设定标头,告诉浏览器你要生成的MIME 类型
    header("Content-type: image/png");
//第二:创建一个画布,以后的操作都将基于此画布区域
    $codew = 500;
    $codeh = 560;
//最外层画布
    $codeimg = imagecreatetruecolor($codew, $codeh);
//底部画布
    $im = imagecreatetruecolor(500, 100);
//获取画布颜色
    $red = imagecolorallocate($codeimg, 255, 0, 0);
    $white = imagecolorallocate($codeimg, 255, 255, 255);
    $green = imagecolorallocate($codeimg, 75, 222, 26);
    $bule = imagecolorallocate($codeimg, 82, 103, 220);
//第三:填充画布背景颜色
    imagefill($codeimg, 0, 0, $white);
//底部颜色
    imagefill($im, 0, 0, $bule);
//第四:绘制线条 + 填充文字...
//imageline($codeimg, 0, 00, 30, 60, $white);
//imageline($codeimg, 0, 00, 50, 60, $white);
//imageline($codeimg, 0, 00, 80, 60, $white);

    $font_url = 'lib/msyh.ttf';
//填充文字
//imagestring($codeimg, 88, 210, 40, "storename", $bule);
    $content = "阿里巴巴!";
    imagettftext($codeimg, 12, 0, 210, 47, $bule, $font_url, $content);
//imagettftext($codeimg,15,0,210,40,$bule,$font_url);
//二维码
    $im_new = imagecreatefrompng("$qrImg");//返回图像标识符
    $im_new_info = getimagesize("$qrImg");//取得图像大小,返回一个数组。该函数不需要用到gd库。

//添加二维码到画布
    imagecopy($codeimg, $im_new, 66, 75, 0, 0, $im_new_info[0], $im_new_info[1]);//返回布尔值
//添加一个小画布
    imagecopy($codeimg, $im, 0, 490, 0, 0, 500, 160);//返回布尔值
//底部字体
    $low_font = '111号桌扫码点餐';
    imagettftext($codeimg, 12, 0, 188, 527, $white, $font_url, $low_font);
//第五:输出创建的画布
    imagepng($codeimg);

//imagepng($im);//输出到页面。如果有第二个参数[,$filename],则表示保存图像
//第六:销毁画布
    imagedestroy($codeimg);
//    echo "<img src='qr.png'>";

}

文件包下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值