javascript 如何保存二维码图像?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18207328/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I save a qrcode image?
提问by Nanou Ponette
I am making a website were users can generate a qrcode. Whenever a qrcode is generated I want to save this image to a file and put the imagename in a database. But I have no idea how I can save this. This is a ASP MVC 4 website but I am using JavaScript in my view to generate the qrcode. Here for I am using the qrcode.js library.
我正在制作一个网站,用户可以生成一个二维码。每当生成二维码时,我都想将此图像保存到文件中并将图像名放入数据库中。但我不知道如何保存它。这是一个 ASP MVC 4 网站,但我认为我使用 JavaScript 来生成二维码。这里我使用的是 qrcode.js 库。
JavaScript:
JavaScript:
<script>
function makeCode() {
var qrcodeId = document.getElementById("QrcodeId");
var qrcode = new QRCode(document.getElementById("qrcode"), {
width: 100,
height: 100,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.H
});
qrcode.makeCode("http://localhost:50810/Profile/Qrcode?id=" + qrcodeId);
}
</script>
Html in my view:
在我看来,HTML:
<canvas id="qrcode"></canvas>
How do I save the qrcode image?
如何保存二维码图像?
Thx!
谢谢!
** EDIT: **
** 编辑: **
I looked at the example from: jeromeetienne.github.io/jquery-qrcode/examples/basic.html but when I try it my html outputs it this way:
我查看了以下示例:jeromeetienne.github.io/jquery-qrcode/examples/basic.html 但是当我尝试它时,我的 html 以这种方式输出:
<div id="qrcode" title="test">
<canvas width="100" height="100" style="display: none;"></canvas>
<img style="display: block;" src="data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACOUlEQVR4nO3WQXLDMAxDUd//0u22M61pkAQlpf6YyS4iIb0scl3X9bX781cmZzn3DXy2FwAEEEAAqYJMxwmyo9f0TkCSvaZ3ApLsNb0TkGSv6Z2AJHtN75RAlMfpPLT5QqX5zh9Kc9b+EtUAAgggUQAB5L0gVbTVvQB5CCCAABIFEEAAiaLOd/UC5CGAAAJIlFeAOOO8+I5e0zsBSfaa3glIstf0TkCSvaZ3ApLsNb3zF8iOj1JWvZBz1qbP9gKAAAIIIIB8KMif7Q7MNO4pObvdjwByWAA5LIAcFkCeDoqPsfpcdb46y/WjsP/LAgQQQLJlTzgHSLLY9CxlfrXDEtzJBTtmKfOrHQABxLtgxyxlfrUDIG8EWV02UazUS/mes5e7PyDNXoA8zFK+5+wFyMMs5XvOXoA8zFK+5+w1DuJ+DFc6+1aDNOcDcjcfkCCAAAJIFEAMD73oAmM/CmU+IIAAAkjuAv8LxHoDY6oPPQ05/gOTmywOIIcFkMMCyGF5LUj1As7P5EN35ivfU5OYD0jywQC5uxAggAASXegVINOZBlHOOnupASQ46+ylBpDgrLOXGkCCs85eagAJzjp7qbGCqI/xKRfv9Hfe52YvIIAAEvUABBDTTvcDVWY57wPIQwBJ7uzMVwJIcmdnvhJAkjs785UAMpTVXZtIgAACSNQLEEAAiXrtfxznOed8ZZb7BwZIcA4QwzlA8gsBiXsAcnfuCJAdn0b50UeszurcGxBAAAEEEECq9/4GuVKoqz6RVdQAAAAASUVORK5CYII=">
</div>
While on the example the image is put in the canvas.
在示例中,图像被放置在画布中。
This is my updated JS code:
这是我更新的 JS 代码:
<script type="text/javascript">
function makeCode() {
oCanvas = document.getElementById("qrcode");
var qrcode = new QRCode(oCanvas, {
render: canvas,
width: 100,
height: 100,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.H
});
var elText = document.getElementById("text");
qrcode.makeCode(elText.value);
//window.open(oCanvas.toDataURL("image/png"));
//Canvas2Image.saveAsPNG(oCanvas);
// var image = document.getElementById("canvas").getElementsByTagName("img");
//console.log(document.getElementById('canvas').getElementsByTagName("img").getAttribute("src"));
//console.log(image[0]["attributes"][1]);
}
$("#dataURL").click(function () {
makeCode();
});
</script>
HTML:
HTML:
<div id="qrcode"></div>
If I put my qrcode directly on the canvas I get no output but I do see the image in firebug.
如果我将我的二维码直接放在画布上,我不会得到任何输出,但我确实在萤火虫中看到了图像。
回答by crazydiv
You may try converting it into a dataURL.
您可以尝试将其转换为 dataURL。
var dataURL = document.getElementById('qrcode').toDataURL();
And then save it like this. ( you may append this from js)
然后像这样保存。(你可以从 js 中附加这个)
<a href="dataURL" target="_blank" download="image.png">
Not all browsers will support this. But modern browsers will.
并非所有浏览器都支持这一点。但现代浏览器会。
回答by Roger Gusmao
You can try this way:
你可以试试这个方法:
vm.gerarQrCode = function(texto){
if(vm.qrcode == null)
vm.qrcode = new QRCode(
document.getElementById("qrcode")
, {
text: texto,
width: 128,
height: 128,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
});
else {
vm.qrcode.clear(); // clear the code.
vm.qrcode.makeCode(texto); // make another code.
}
};
vm.downloadQrCode = function(){
var src= document.querySelector('#qrcode img').getAttribute("src");
var url = src.replace(/^data:image\/[^;]+/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20qrcodeconvite.png;');
window.open(url);
};