美文网首页
Nodejs下载图片处理后保存本地的方法支持async/awai

Nodejs下载图片处理后保存本地的方法支持async/awai

作者: 踩坑怪At芬达 | 来源:发表于2020-03-30 10:03 被阅读0次

    需求:
    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)
    });
    

    相关文章

      网友评论

          本文标题:Nodejs下载图片处理后保存本地的方法支持async/awai

          本文链接:https://www.haomeiwen.com/subject/jkymuhtx.html