微信小程序–二维码生成器

article/2025/9/27 3:38:23

在微信小程序联盟上有一个小练习,是要实现小程序上的二维码生成器,想想基于jquery的二维码生成插件有很多,但是小程序是不允许操作dom的,所以自己找了一个纯javascript版的二维码生成源码,然后换汤不换药把其中的hmtl5中的canvas改为小程序的canvas;


效果图

纯javascript版js源码:

qrcode

1、解读源码,修改绘制canvas部分,源代码如下

draw: function (string, canvas, size, ecc) {ecclevel = ecc || ecclevel;canvas = canvas || _canvas;if (!canvas) {console.warn('No canvas provided to draw QR code in!')return;}size = size || _size || Math.min(canvas.width, canvas.height);var frame = genframe(string),ctx = canvas.getContext('2d'),px = Math.round(size / (width + 8));var roundedSize = px * (width + 8),offset = Math.floor((size - roundedSize) / 2);size = roundedSize;ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = '#fff';ctx.fillRect(0, 0, size, size);ctx.fillStyle = '#000';for (var i = 0; i < width; i++) {for (var j = 0; j < width; j++) {if (frame[j * width + i]) {ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);}}}},

2、然后愉快的将代码修改如下:

draw: function (string, canvas, cavW, cavH, ecc) {ecclevel = ecc || ecclevel;canvas = canvas || _canvas;if (!canvas) {console.warn('No canvas provided to draw QR code in!')return;}var size =  Math.min(cavW, cavH);var frame = this.getFrame(string),ctx = wx.createContext(),px = Math.round(size / (width + 8));var roundedSize = px * (width + 8),offset = Math.floor((size - roundedSize) / 2);size = roundedSize;ctx.clearRect(0, 0, cavW, cavW);// ctx.setFillStyle('#ffffff');// ctx.rect(0, 0, size, size);ctx.setFillStyle('#000000');// ctx.setLineWidth(1);for (var i = 0; i < width; i++) {for (var j = 0; j < width; j++) {if (frame[j * width + i]) {ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);}}}wx.drawCanvas({canvasId: canvas,actions: ctx.getActions()});}}

3、哈哈,愉快的运行起来~~~~~~报错!!

WAService.js:3 TypeError: ctx.fillRect is not a function

赶紧看看小程序的api,发现小程序是没有fillRect()方法的,只有rect()方法,所以啪~啪~啪改为如下:

 for (var i = 0; i < width; i++) {for (var j = 0; j < width; j++) {if (frame[j * width + i]) {   ctx.rect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);}}}

运行,懵逼了,怎么没有二维码呢,我的二维码呢?好吧接着分析rect语fillRect的区别,其实rect方法只是绘制出轮廓,并不会对路径进行填充,所以紧接其后要对其fill填充。

把代码改为如下:

ctx.setFillStyle('#000000');// ctx.setLineWidth(1);for (var i = 0; i < width; i++) {for (var j = 0; j < width; j++) {if (frame[j * width + i]) {   ctx.rect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);ctx.fill();}}}

运行~~~噢啦,终于出现期待已久的二维码喽!!



好了,总算完成了,但是怎么生成二维码的时候感觉有点慢呢,于是借用同事的手机(安卓系统)试了一下,输入网址,点击生成~~

崩了,微信直接挂了好吧接着找原因,感觉影响速度的只能是for循环那块代码,于是把ctx.fill()拿到for最外层;

 for (var i = 0; i < width; i++) {for (var j = 0; j < width; j++) {if (frame[j * width + i]) {   ctx.rect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);// ctx.fill();}}}ctx.fill();

运行~~这速度,飞快!自己的小7也不卡了,又用同事的试了一把,没问题。原来对绘制路径填充只需要最后填充就Ok了,我还二逼的对每次绘制进行了填充。


最新完整代码地址:小程序二维码生成器


http://chatgpt.dhexx.cn/article/BceYGCN3.shtml

相关文章

微信小程序怎样生成体验版二维码?微信小程序怎么转化为二维码?

1.首先要把代码上传到微信公众平台 方法&#xff1a;在微信开发者工具界面&#xff0c;右上角&#xff0c;点击上传&#xff0c;如果提示成功&#xff0c;说明已经上传成功。 2.登录微信公众号平台&#xff08;微信公众号和微信小程序都是使用这个网站登陆的&#xff09; 网址…

微信小程序识别二维码

微信小程序二维码识别 准备工作 在微信公众平台(https://mp.weixin.qq.com/)注册账号获APPID 下载微信开发者工具 (https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) 在小程序文档中找到API下的设备下的扫码API(https://developers.weixin.qq.com…

Java生成微信小程序二维码,5种实现方式,一个比一个简单

文章目录 前言先看官网一、JDK自带的URLConnection方式二、Apache的HttpClient方式三、okhttp3方式四、Unirest方式五、RestTemplate方式其它细节getAccessToken构建参数mapbyte[]数组 源码下载 前言 先介绍一下项目场景&#xff0c;主要是通过微信小程序二维码裂变分享&#…

微信小程序转二维码方法分享

微信小程序转二维码方法分享 需要转码的可以看看 这个东西是看个人需求的&#xff0c;618就要来了&#xff0c;各种活动也将来袭 有些小伙伴不知道怎么生成 为了方便小程序邀请活动没法外发&#xff0c;这里分享下将小程序转二维码的方法 首先&#xff0c;你需要在电脑上打…

微信小程序绘制二维码

一、前言 在日常的小程序项目中&#xff0c;会经常遇到需要动态绘制二维码的需求。使用场景很多&#xff0c;例如绘制在海报上&#xff0c;例如制作票务码、核销码等等。 这篇文章是应一位好友的需求而写的&#xff0c;也希望能够给有需要的同学一些帮助。 二、实现原理 使用…

微信小程序二维码识别

目前市场上二维码识别的软件或者网站越来越多&#xff0c;可是真正方便&#xff0c;无广告的却少之很少。 于是&#xff0c;自己突发奇想做了一个微信二维码识别的小程序。 包含功能&#xff1a; 1、识别二维码 ①普通二维码 ②条形码 ③只是复制解析出来的数据 2、生成二维码 …

微信小程序扫描普通二维码跳转到小程序指定页面

这个功能的逻辑是什么呢&#xff1f; 二维码就相当于是一个链接 相当于我们点击一个链接跳转到另一个页面 只不过这里是扫码的形式 如何操作 1、首先我们需要在微信公众平台的开发管理——>开发设置&#xff0c;找到&#xff08;扫普通链接二维码打开小程序&#xff09;&…

微信小程序中生成二维码

一般在微信小程序中&#xff0c;生成二维码是一个很常见的场景&#xff0c;但是查阅官方文档&#xff0c;却没有一个现成的可以使用的组件。 经过搜索&#xff0c;生成二维码组件一般是需要借助第三方库来实现。实现的步骤分为&#xff1a; 下载第三方库安装第三方库wxml中生…

微信小程序 — 生成二维码功能

微信小程序实现生成二维码功能。需要用到canvas组件&#xff0c;设置 type为2d. 需要使用js包weapp-qrcode-canvas-2dhttps://github.com/DoctorWei/weapp-qrcode-canvas-2dweapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二维码&#xff08;外部二维码&am…

生成微信小程序发布上线后的二维码 、获取微信小程序二维码、微信小程序二维码如何生成?

情景&#xff1a; 1、在微信小程序审核完成&#xff0c;发布到线上后&#xff0c;想通过扫描小程序二维码进入小程序 2、可分享二维码出去&#xff0c;通过二维码扫码进入小程序 方法&#xff1a; 1、进入微信小程序的后台配置。链接&#xff1a;微信公众平台。&#xff08;…

如何生成微信小程序二维码,小程序内页二维码

你自己得有个微信公众号&#xff0c;只需要知道小程序的名字就可以了 生成小程序二维码 第一步编辑素材 第二步搜索小程序名字&#xff0c;然后回车&#xff0c;下一步 第三步选小程序码 小程序内页二维码 第一步编辑素材 第二步搜索小程序名字&#xff0c;然后回车&…

OpenShift 4 - 在单节点的 OpenShift 上用 NFS Operator 实现以 RWX 访问存储

《OpenShift / RHEL / DevSecOps 汇总目录》 文本已在 OpenShift Local 4.12 环境中进行验证。 文章目录 OpenShift 支持的存储访问模式用 NFS Provisioner Operator 实现 RWX 访问存储安装 NFS Operator解决安装 Operator 过程无法访问谷歌 gcr.io 上的容器镜像配置 NFSProvis…

Linux文件的rwx含义,文件(目录)rwx权限的意义

我们知道不同的角色针对同一个文件(目录)可能会有不同的权限&#xff0c;那么rwx权限的意义是什么呢&#xff1f; 对于文件 文件是包含实际数据的地方&#xff0c;包括一般文本文件、数据库内容文件、二进制可执行文件等。对于文件来说&#xff0c;rwx权限的意义为&#xff1a;…

Linux文件的rwx含义,Linux文件权限rwx简单了解

Ⅰ 了解Linux下的文件权限 如上图所示,ll命令详细展示当前目录下的文件或者子目录信息 红框标注的即为此文件或者目录的权限 【第一行文件10.c的权限以-开头,用来说明这是一个文件;第四行code目录的权限以字母d开头,用来标注code是目录】 关于文件权限,我们要先了解有那些…

chmod,rwx Linux文件属性笔记221107

Linux的文件属性包含文件类型和文件权限 文件类型 -表示文件d表示文件夹l表示软链接 文件权限 r 读权限w 写权限x 执行权限 文件所属 u代表所属用户g代表所属组o代表其它用户 chmod 命令可以修改用户权限 可以通过 r w x 字母修改也可以用 3位0到7 的数字修改 chmod 用 …

关于Linux文件权限rwx的通俗解释

在Linux中&#xff0c;每个文件都有它所对应的权限 我们可以通过在终端输入ls -ahl的方式来查看 这是一个文件列表&#xff0c;每一行都对应一个文件的详细信息 第一个字符&#xff0c;对应的是类型 &#xff08;1&#xff09;如果是d&#xff0c;那么对应的是directory&…

linux中文件权限为drwxr,linux drwxr-xr-x 什么意思 ?

第一位表示文件类型。d是目录文件&#xff0c;l是链接文件&#xff0c;-是普通文件&#xff0c;p是管道 第2-4位表示这个文件的属主拥有的权限&#xff0c;r是读&#xff0c;w是写&#xff0c;x是执行。 第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。 第8-10位表…

Linux_rwx权限

L i n u x _ r w x 权限 \color{blue}{\huge{Linux\_rwx权限}} Linux_rwx权限 Ⅰ.概述 ①. 第 0 0 0代表文件类型( d 、 l 、 c 、 b 、 a 、 − d、l、c、b、a、- d、l、c、b、a、−) l l l&#xff1a;代表连接(快捷方式) d d d&#xff1a;代表目录 c c c&#xff1a;代…