需求:
1、需要下载远程Url上的某个图片
2、然后将该图片进行加工后保存到本地(比如自己加个水印调整下尺寸等等)
需要使用到2个库:
1、支持promise及async/await的request库 地址:https://github.com/request/request-promise
const request = require('request-promise');
2、用来绘制图片的node-canvas 库地址:https://github.com/Automattic/node-canvas
const { createCanvas, loadImage } = require('canvas')
实现方法代码
const router = require('koa-router')({prefix:'/'});
router.get('/', async (ctx, next)=> {
await next();
let url = `http://www.baidu.com/1.png`;//举例远程url上的图片
let response = await request({url,encoding:'binary'}); //这里注意需要将encoding设置为 'binary' 进行下载,这里用了await等待下载完毕,你也可以根据你的情况调整成异步
await fs.writeFileSync(`./temp/1.png`, response, 'binary');//下载完毕后,我们用fs将文件写入本地,这里注意也是需要将encoding设置为binary
//这里我们已经将远程的图片给扒到本地了,接下来可以用'canvas'库来读取图片进行绘制,这里我简单的做一个绘制流程
let img = await loadImage(`./temp/1.png`);
let canvas = createCanvas(256, 256)
let gp = canvas.getContext('2d')
gp.drawImage(img,0,0)
//绘制好了后将canvas以图片形式保存到本地
const out = fs.createWriteStream( `./temp/result.png`)
const stream = canvas.createPNGStream()
stream.pipe(out)
});
网友评论