利用qr.js + canvas 生成图片文件 - web版
浏览器生成 qrcode
要将这段代码转换为可以在HTML页面中运行的版本,您需要去掉Node.js相关的部分,并使用浏览器原生的 Canvas
和相关的API。以下是转换后的代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code Generator</title>
<script src="https://cdn.jsdelivr.net/npm/@jswork/qrjs/dist/index.js"></script>
</head>
<body>
<canvas id="qrcodeCanvas"></canvas>
<script>
// 生成二维码
const Level = nx.QRjs.Level;
const QRCode = nx.QRjs.QRCode;
const qrcode = new QRCode(-1, Level.H);
qrcode.addData("afei");
qrcode.make();
// 获取二维码模块的大小和数据
const size = qrcode.getModuleCount();
const cellSize = 10; // 每个模块的大小,调整这个值可以改变二维码的尺寸
const margin = 4 * cellSize; // 留白的大小
// 获取Canvas
const canvas = document.getElementById("qrcodeCanvas");
canvas.width = size * cellSize + margin * 2;
canvas.height = size * cellSize + margin * 2;
const ctx = canvas.getContext("2d");
// 绘制二维码背景
ctx.fillStyle = "#ffffff";
ctx.fillRect(0, 0, canvas.width, canvas.height);
// 绘制二维码
ctx.fillStyle = "#000000";
for (let row = 0; row < size; row++) {
for (let col = 0; col < size; col++) {
if (qrcode.isDark(row, col)) {
ctx.fillRect(
margin + col * cellSize,
margin + row * cellSize,
cellSize,
cellSize
);
}
}
}
// 如果需要将二维码保存为PNG文件
function downloadPNG() {
const link = document.createElement('a');
link.href = canvas.toDataURL('image/png');
link.download = 'qrcode.png';
link.click();
}
// 创建一个按钮用于下载PNG
const button = document.createElement('button');
button.textContent = 'Download QR Code as PNG';
button.onclick = downloadPNG;
document.body.appendChild(button);
</script>
</body>
</html>
代码说明
加载库:
- 使用
<script>
标签引入@jswork/qrjs
库,它提供了类似于Node.js版本的API。
- 使用
生成二维码:
- 和之前的Node.js代码类似,先生成二维码数据,获取二维码的大小和模块信息。
绘制二维码:
- 使用原生HTML的
canvas
元素和2D
上下文绘制二维码。
- 使用原生HTML的
下载PNG文件:
- 提供了一个
downloadPNG
函数,它将Canvas内容导出为PNG数据,并通过创建一个链接来触发下载。
- 提供了一个
按钮用于下载:
- 在页面上创建一个按钮,点击它可以将生成的二维码保存为PNG图片。
运行此HTML代码后,会在页面中显示一个二维码,并提供一个下载按钮来保存二维码为PNG格式。