URL 生成带文字二维码
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8"/>
</head>
<body>
<div id="QRcode"></div>
<a class="QR-download" href="#" download>下载</a>
<script src="http://www.wangyulue.com/assets/js/qrcode.js"></script>
<script src="http://www.wangyulue.com/assets/js/html2canvas.min.js"></script>
<script>
/**
* 输出一个带有文字说明的二维码。
*
* @param {Object} obj 相关配置,
* obj = {
dom : "QRcode", //
url : "http://www.wangyulue.com", //二维码网址
text : ["王玉略的个人网站","Stay Hungry, Stay Foolish."], //二维码的文字说明
pic_size : 300, // 图片的尺寸大小
font_size : 16, //说明文字的字体大小
}
* 回调函数中返回一个base64形式的图片,以便在回调中注入到<a>标签中下载使用
*
*/
function getQRcodeImg(obj,fn){
var url = obj.url,
size = obj.pic_size || 256;
font_size = obj.font_size || 18;
dom = document.getElementById(obj.dom);
dom.innerHTML = generateHTML(obj.text,size,font_size);
var $qrcode = dom.getElementsByClassName("QR-qrcode")[0],
$main = dom.getElementsByClassName("QR-main")[0];
new QRCode($qrcode, {
text: url,
width: size,
height: size,
});
html2canvas($main).then(function(canvas) {
var base64 = concatCanvas(dom,$qrcode.getElementsByTagName("canvas")[0],canvas,20);
fn && fn(base64);
});
/**
* 根据配置拼凑要处理的html代码
*
* @param {Array} arr 要添加的文字,以数组传入
*
*/
function generateHTML(arr,size,font_size){
var out = "",temp = "";
arr.forEach(function(item){
temp += "<div style='text-align:center;font-size:" +font_size+ "px;'>"+ item +"</div>" ;
})
out =
"<div style='position:absolute;opacity:0;'>" +
"<div class='QR-main' style='width: " +size+ "px;'>" +
temp +
"</div>" +
"</div>" +
"<div class='QR-qrcode' style='display:none;'></div>";
return out ;
}
/**
* 将两个canvas合并在一起
*
* @param {Object} dom canvas要添加的dom对象
* @param {Object} canvas1 第一个canvas
* @param {Object} canvas2 第二个canvas
* @param {Number} padding 图片的padding,默认20
* @return {String} 返回base64字符串
*
*/
function concatCanvas(dom,canvas1,canvas2,padding){
var c1h = canvas1.height,
c1w = canvas1.width,
// c2h = canvas2.height,
// c2w = canvas2.width,
/* 说明:将以上两行代码改为以下两行代码;
* 原因:以上两行代码在window下显示是好的,但是放到Mac下显示会出一些问题,
* 仔细发现是在Mac下,html2canvas的API返回的canvas不符合预期,在MAC环境canvas返回如下:
* html2canvas($main).then(function(canvas) {
* console.log(canvas); //<canvas width="600" height="88" style="width: 300px; height: 44px;"></canvas>
* });
* 可以看到看到canvas的width和height值和其style里的width和height的值有所不同,
* 于是采用以下的方法来获得canvas的宽度和高度
* 王二认为出现以上问题可能是因为分辨率的问题
*/
c2h = Number(canvas2.style.height.slice(0,-2));
c2w = Number(canvas2.style.width.slice(0,-2));
canvas = document.createElement("canvas");
padding = padding || 20 ;
/** 根据二维码、文字两个canvas,再加上padding计算出新的canvas的宽度和高度 **/
canvas.height = c1h + c2h + 2.5 * padding ;
canvas.width = Math.max(c1w,c2w) + 2 * padding ;
/** end **/
dom.appendChild(canvas);
/** 将canvas画上白色背景 **/
context = canvas.getContext("2d");
context.fillStyle ="white";
context.fillRect(0,0,canvas.width,canvas.height);
/** end **/
/** 将二维码、文字两个canvas绘画到一个canvas里 **/
context.drawImage(canvas1, padding, padding, c1w ,c1h);
context.drawImage(canvas2, padding, 1.5 * padding+c1h, c2w ,c2h);
/** end **/
/** 返回base64,用于注入到a标签里以便下载 **/
return canvas.toDataURL('image/jpeg',1);
/** end **/
}
}
var obj = {
dom : "QRcode",
url : "http://www.wangyulue.com",
text : ["王玉略的个人网站","Stay Hungry, Stay Foolish."],
pic_size : 300,
font_size : 16,
}
getQRcodeImg(obj,function(base64){
document.getElementsByClassName("QR-download")[0].href = base64 ;
}); </script>
</body>
</html>
效果:

URL 生成带文字二维码的更多相关文章
- 微信公众号开发C#系列-11、生成带参数二维码应用场景
1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...
- thinkphp使用phpqrcode生成带logo二维码
//二维码图片保存路径 $pathname = date("Ymd",time()); $pathname = "./Qrcode/" . $pathname; ...
- QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...
- php生成带参数二维码
1.PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, https://sourceforge.net/projects/phpqrcode/ ...
- Java生成带logo二维码
目前生成二维码的方式有很多种,本例采用谷歌的zxing,去白边,添加logo等处理均在代码中有注释 demo连接 https://github.com/littlechaser/qrcode.git
- C#生成带Logo二维码
1.下载ThoughtWorks.QRCode引用并添加在工程中2.在实现类QRCodeEncoderDemo中引入Dll,添加方法 using System; using System.Collec ...
- python生成带参数二维码
#coding:utf8 import urllib2 import urllib import json import string import random class WebChat(obje ...
- PHP批量生成底部带编号二维码(二维码生成+文字生成图片+图片拼接合并)
PHP批量生成带底部编号二维码(二维码生成+文字生成图片+图片拼接合并) 需求: 输入编号如 : cb05-0000001 至 cb05-0000500 批量生成 以编号为名称的下图二维码,然后压缩 ...
- PHP生成小程序二维码合成图片生成文字
这部分代码是写在项目上的代码,THINKPHP3.1如果迁移到其他的地方应该要稍稍改动一下以适合自己的项目 function get_bbox($text,$fsize,$ffile){ return ...
随机推荐
- 田忌赛马Java解答
你一定听过田忌赛马的故事吧? 如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两 ...
- javascript日期字符串和日期对象相互转换
HTML页面间需要传递日期和时间参数的时候,如果需要对日期字符串进行时间的运算,就需要先将日期字符串转换成JS日期对象. 在js中,yyyy-MM-dd HH:mm:ss格式的日期字符串不能用来直接构 ...
- Qt多线程同步总结
1.QMutex QMutex mutex; void func() { mutex.lock(); ........ mutex.unlock(); } 2.QMutex联手QMutex ...
- python 字典(dict)get方法应用
如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这里我们可以用字典做一个小游戏,假设用 ...
- P1291 [SHOI2002]百事世界杯之旅(概率)
P1291 [SHOI2002]百事世界杯之旅 设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数 则有: $f(n,k)=\frac{n-k}{n}*f(n,k) + \ ...
- Linux硬盘扩容(非LVM)
环境说明: 虚拟机:Centos6 [root@elements ~]# cat /etc/redhat-release CentOS release 6.10 (Final) [root@eleme ...
- ubuntu18.04下搭建深度学习环境anaconda2+ cuda9.0+cudnn7.0.5+tensorflow1.7【原创】【学习笔记】
PC:ubuntu18.04.i5.七彩虹GTX1060显卡.固态硬盘.机械硬盘 作者:庄泽彬(欢迎转载,请注明作者) 说明:记录在ubuntu18.04环境下搭建深度学习的环境,之前安装了cuda9 ...
- HDU 3416 Marriage Match IV(ISAP+最短路)题解
题意:从A走到B,有最短路,问这样不重复的最短路有几条 思路:先来讲选有效边,我们从start和end各跑一次最短路,得到dis1和dis2数组,如果dis1[u] + dis2[v] + cost[ ...
- [问题解决]win10误删启动项(BCD)(HP电脑亲测,无需启动盘,并非重装系统)
昨天使用easyBCD软件,开始不太懂,手残把win10的引导删除了,后来发现电脑关机总是变成重启,无奈强制关机.今天重启了一下电脑,发现电脑已经无法打开了,这才明白昨天是误删了win10的BCD. ...
- 操作数据库的时候,使用自带的DbProviderFactory类 (涉及抽象工厂和工厂方法)
微软自带的DbProviderFactory https://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory ...