js将网址转为二维码并下载图片
将一个网址转为二维码, 下面可以添加文字, 还提供下载功能
利用的是 GitHub上面的qrcode.js 和canvas
<!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.shenjp.top",
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>
js将网址转为二维码并下载图片的更多相关文章
- Vue中将网址、动态网址转为二维码
1. 首先需要安装相关的依赖包 npm install qrcodejs2 --save 或者 npm install qrcode2 --save 这里选择第二种方式进行安装,如图: 2.templ ...
- Springboot生成二维码并下载图片png支持打包成zip
pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...
- jquery.qrcode.min.js(支持中文转化二维码)
详情请看:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前 ...
- MyQR库自动为网址生成二维码
首先安装MyQR库: pip install MyQR #导包 from MyQR import myqr #生成二维码 words=你要为那个网址生成二维码 save_name=保存后的图片名 pi ...
- js生成二维码以及插入图片
先根据qrcode官网demo,不同属性值的变化,二维码的变化效果:https://larsjung.de/jquery-qrcode/latest/demo/ 进入demo中,审查元素查看里面引用的 ...
- Asp.Net 合并图片(二维码和其他图片合并)
需求:根据网址生成二维码,然后再把二维码生成到背景图片上,然后显示在网页中 pic.ashx <%@ WebHandler Language="C#" Class=" ...
- jquery生成二维码并实现图片下载
1.引入jquery的两个js文件 <script src="../scripts/erweima/jquery-1.10.2.min.js"></script& ...
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...
- 用一个二维码做下载地址,自动区分是 ios 还是 android
用一个二维码做下载地址,自动区分是 ios 还是 android, 甚至区分 iphone 和 ipad. <html> <head> <meta http-equiv ...
随机推荐
- Mvc Api 自定义路由
// [RoutePrefix("api/ssm")]// public class ValuesController : ApiController// {// ///<s ...
- oracle sequence
代码块 方法一: (1)删除序列; (2)重新创建: 这个方法比较简单粗暴. drop sequence sequence_name; create sequence sequence_name mi ...
- 2019-03-18-day013-装饰器与内置函数
上周回顾 函数: def 函数名(): 缩进 函数体 闭包: a = 50 def func(): a = 10 def avg(): print(a) 函数名的使用: 当做值被赋值给变量 当做返回值 ...
- Access denied for user 'root'@'IP' (using password:YES)解决方法
在MySql的使用过程中,碰到“Access denied for user 'root'@'IP' (using password:YES)”的问题,使用以下语句修改后还是不行. GRANT ALL ...
- 拿到iframe页面里面的变量及元素的方法
先严重差评一下,用这种方法window.parent.document.frames['layui-layer-iframe1']不行!而且frames方法存在浏览器不兼容问题(貌似火狐不行) 页面d ...
- 设计精美Power BI报告的五大秘诀
众所周知,Power BI可以帮助您创建交互式且信息丰富的报告,但使用Power BI 制作精美而实用的报告对我们这群IT人员而言,却是一个巨大的痛苦:但个人觉得不能就此止步,通过不断实践练习,小悦采 ...
- Python 使用sqlalchemy操作MYSQL
1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql
- s21day02 python笔记
s21day02 python笔记 一.昨日内容回顾及补充 内容回顾 补充 if条件语句嵌套 10086示例 pycharm更改解释器 python3.7解释器 python2.7解释器 二.循环语句 ...
- Codeforces 1005D:Polycarp and Div 3
题目链接:http://codeforces.com/problemset/problem/1005/D 题意 给出个字符串(全是数字),把这个字符串换分成一些子串,最多能划分多少个能够被3整除的子串 ...
- PTA——四舍五入
PTA 7-18 出租车计价 (15 分) #include<stdio.h> int main() { double s,w; int t; scanf("%lf %d&quo ...