123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- const fs = require('fs')
- const PNG = require('pngjs').PNG
- const Utils = require('./utils')
- exports.render = function render (qrData, options) {
- const opts = Utils.getOptions(options)
- const pngOpts = opts.rendererOpts
- const size = Utils.getImageWidth(qrData.modules.size, opts)
- pngOpts.width = size
- pngOpts.height = size
- const pngImage = new PNG(pngOpts)
- Utils.qrToImageData(pngImage.data, qrData, opts)
- return pngImage
- }
- exports.renderToDataURL = function renderToDataURL (qrData, options, cb) {
- if (typeof cb === 'undefined') {
- cb = options
- options = undefined
- }
- exports.renderToBuffer(qrData, options, function (err, output) {
- if (err) cb(err)
- let url = 'data:image/png;base64,'
- url += output.toString('base64')
- cb(null, url)
- })
- }
- exports.renderToBuffer = function renderToBuffer (qrData, options, cb) {
- if (typeof cb === 'undefined') {
- cb = options
- options = undefined
- }
- const png = exports.render(qrData, options)
- const buffer = []
- png.on('error', cb)
- png.on('data', function (data) {
- buffer.push(data)
- })
- png.on('end', function () {
- cb(null, Buffer.concat(buffer))
- })
- png.pack()
- }
- exports.renderToFile = function renderToFile (path, qrData, options, cb) {
- if (typeof cb === 'undefined') {
- cb = options
- options = undefined
- }
- let called = false
- const done = (...args) => {
- if (called) return
- called = true
- cb.apply(null, args)
- }
- const stream = fs.createWriteStream(path)
- stream.on('error', done)
- stream.on('close', done)
- exports.renderToFileStream(stream, qrData, options)
- }
- exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
- const png = exports.render(qrData, options)
- png.pack().pipe(stream)
- }
|