nodejs根据地址生成二维码并当做水印嵌入图片中

xiaoxiao2021-02-27  146

--所需模块

异步流程控制模块 async 基本使用 : http://blog.csdn.net/zzwwjjdj1/article/details/51857959 生成二维码模块 qr-image 处理图片模块 images 安装模块  npm install async qr-image images 注意:node6.9以上版本模块安装images模块会加载失败

直接https://github.com/zhangyuanwei/node-images下载新版

解决 /lib64/libc.so.6: version `GLIBC_2.14' not found 的问题http://stuart.blog.51cto.com/728677/1840205

--封装方法

1.生成二维码方法 2.嵌入水印方法 封装QrCode模块 /** * 根据地址生成二维码 */ "use strict"; //严格模式 var fs = require('fs'); var qr = require('qr-image'); //注意,若加载失败跟node版本有关,有问题联系xujingzhong var images = require('images'); var path = require('path'); var config = require('../config'); var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var dayurl = config.realUrl + 'public/uploads/qr/' + year + '/' + month + '/' + day; var fileRoot = '/uploads/qr/' + year + '/' + month + '/' + day + '/'; module.exports = { /** * 参数 url(string) 地址 * 参数 imgName(string) 二维码名 * 参数 callback(Function) */ createQr : function(url, imgName, callback) { mkdirsSync(dayurl); var qr_png = qr.image(url, {type: 'png', size: 6}); var imgName = imgName || Date.parse(date) + Math.ceil(Math.random() * 89 + 10) + '.png'; var path = dayurl+ '/' + imgName; var qr_pipe = qr_png.pipe(fs.createWriteStream(path)); qr_pipe.on('error', function(err){ console.log(err); if (callback) { callback({filePath: ''}); } return; }) qr_pipe.on('finish', function () { if (callback) { var filePath = fileRoot + imgName; // 若要结合给图片加水印则要全部路径 var allPath = dayurl + '/' + imgName; callback({filePath: filePath, allPath: allPath}); } }) }, /** * 给图片添加水印 * 参数 sourceImg(string) 原图片路径 * 参数 waterImg(string) 水印图片路径 * 参数 callback(Function) */ addWater : function(sourceImg, waterImg, callback){ var lastput = 'qr_' + sourceImg; images(sourceImg) //Load image from file //加载图像文件 .size(400) //Geometric scaling the image to 400 pixels width //等比缩放图像到400像素宽 .draw(images(waterImg), 70, 260) //Drawn logo at coordinates (70,260)//为了遮住不该看的东西.. //在(10,10)处绘制Logo .save(lastput, { //Save the image to a file,whih quality 50 quality : 50 //保存图片到文件,图片质量为50 }); callback(lastput); } } //递归创建目录 同步方法 function mkdirsSync(dirname){ if(fs.existsSync(dirname)){ return true; }else{ if(mkdirsSync(path.dirname(dirname))){ fs.mkdirSync(dirname); return true; } } } 直接调用 "use strict"; //严格模式 var QrCode = require('../utils/QrCode'); var async = require('async'); exports.baseUpload = function(req, res){ //直接生成二维码图片调用 QrCode.createQr('http://www.baidu.com', '', function(ressult){ return res.json(ressult.filePath); }); //图片结合二维码调用 var task1 = function(callback){ QrCode.createQr('http://www.baidu.com', '', function(ressult){ callback(null,ressult.filePath); }); }; var task2 = function(waterImg, callback){ //原图 var sourceImg = '1.jpg'; QrCode.addWater(sourceImg, waterImg, function(data){ callback(null, data); }) }; async.waterfall([task1,task2], function(err, result){ if(err){ console.log(err); return; } return res.json(1); }) }
转载请注明原文地址: https://www.6miu.com/read-16605.html

最新回复(0)