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

来源:互联网 发布:淘宝客服昵称怎么改 编辑:程序博客网 时间:2024/04/30 12:44

--所需模块

异步流程控制模块 async 基本使用 : http://blog.csdn.net/zzwwjjdj1/article/details/51857959
生成二维码模块 qr-image
处理图片模块 images
安装模块  npm install async qr-image images

--封装方法

1.生成二维码方法
2.嵌入水印方法
utlis.js
var utils = {};var fs = require('fs');var qr = require('qr-image');var images = require("images");/** * 根据地址生成二维码 * 参数 url(string) 地址 * 参数 callback(Function) */utils.createQr = function(url, callback){    var qr_png = qr.image(url, { type: 'png',size : 6 });    var imgName = +(new Date())+''+Math.ceil(Math.random()*89+10);    imgName = `${imgName}.png`;    var qr_pipe = qr_png.pipe(fs.createWriteStream(imgName));    qr_pipe.on('error', function(err){        console.log(err);        callback(err,null);        return;    })    qr_pipe.on('finish', function(){        callback(null,imgName);    })};/** * 给图片添加水印 * 参数 sourceImg(string) 原图片路径 * 参数 waterImg(string) 水印图片路径 * 参数 callback(Function) */utils.addWater = function(sourceImg, waterImg, callback){    var lastput = "2.jpg";    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);};module.exports = utils;

--测试代码

test.js
var utils = require('./utils');var async = require('async');var task1 = function(callback){    var url = 'http://www.baidu.com';    utils.createQr(url,function(err, data){        if(err){            console.log(err);            callback(err, null);            return;        }        callback(null,data);    })};var task2 = function(waterImg, callback){    //原图    var sourceImg = '1.jpg';    utils.addWater(sourceImg, waterImg, function(data){        callback(null, data);    })};async.waterfall([task1,task2], function(err, result){    if(err){        console.log(err);        return;    }    console.log(result);})

--运行

原图片 1.jpg

-----运行 node test
生成的二维码图片 147729475591626.png


最终生成的图片 2.jpg

哈哈,挡住了..微笑,用手机扫一扫会跳转到百度.



最后今天是1024,程序员的节日,祝大家节日快乐!!


光顾着看妹子了尴尬..最后发下文件夹结构...

意外金喜的博客 : http://blog.csdn.net/zzwwjjdj1/
0 0