toFrankie / blog

种一棵树,最好的时间是十年前。其次,是现在。
20 stars 1 forks source link

二维码内容解析 #295

Open toFrankie opened 1 year ago

toFrankie commented 1 year ago

配图源自 Freepik

如果需要获取二维码的原始内容,可以这样操作:

const Jimp = require('jimp')
const QrcodeReader = require('qrcode-reader')

async function parseQrcode(qrcodePath) {
  const image = await Jimp.read(qrcodePath) // 可以是本地路径、网络链接
  const originContent = await new Promise((resolve, reject) => {
    const qr = new QrcodeReader()
    qr.callback = (err, value) => {
      if (err) {
        reject(err)
        return
      }
      resolve(value.result)
    }
    qr.decode(image.bitmap)
  })

  return originContent
}

以上用到 jimpqrcode-reader 来个库。

假设我们有这样一个二维码,就能解析到其原始内容。

parseQrcode('https://upload-images.jianshu.io/upload_images/5128488-4997f2bfcc035f07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240')
  .then(res => {
    console.log(res) // https://mp.weixin.qq.com/a/~~piirdiB7tRQ~GYk703f8DizEuFT0tGHcvA~~
  })

我遇到的一个场景是,微信小程序项目接入官方的 CI 工具以提供二维码「预览」时,默认情况下二维码过大,导致在终端体验不佳。

因此,我的做法是对 CI 工具生成的二维码进行解析,获取到其原始内容(如上,其实就是一个 URL 而已),然后利用 qrcode-terminal qrcode 等主流库重新打印「尺寸较小」的二维码到 Terminal 上。

const qrcode = require('qrcode-terminal')

qrcode.generate('qrcodeOriginUrl', {small: true})

作一个记录,The end.