nodejs 图片转换,批量压缩图片,上传图片

使用fs实现base64 与png/jpg/jpeg 互相转换

### png与jpg转换

```JavaScript // 因为要用到异步操作所以需要用到util.promisify将函数转换 //第一种写法, const util = require('util') const readFile=util.promisify(fs.readFile) readFile('./index.png').then(res=>{ //得到图片的编码后
fs.writeFile('./index.jpg',res,(err)=>{ //写入到jpg文件里 if(err){console.log(err)} console.log('写入成功')s }) }) //第二种写法 const util=require('util'); const readFile=util.promisify(fs.readFile); const aa=async ()=>{ const data=await readFile('./index.png'); fs.writeFile('./index.jpg',data,err=>{ if(err){console.log(err);return;} console.log('写入成功'); }) } aa()

//第三种写法 const data=fs.readFileSync('./index.png'); fs.writeFile('./index.jpg',data,err=>{ if(err){console.log(err);return;} console.log('写入成功') })

```

### png与base64转换

```JavaScript const base=(url)=>{ const data=fs.readFileSync(url).toString('base64'); return 'data:image/bmp;base64,'+data } base(url);//url图片的路径

```

### base64与png转换

```JavaScript const BasePng=(base)=>{ //base就是需要转换的base64编码 const data=base.replace(/^data:image\/\w+;base64,/,'') //通过正则匹配掉base64的前缀 fs.writeFile('./index.png',data,'base64',err=>{ if(err){console.log(err);return;} console.log('写入成功') }) }

```

使用images实现图片压缩

实现图片批量压缩需要使用到images模块,所以需要先npm install images

JavaScript const fs=require('fs'); const images=require('images'); const MySet=new Set(); //声明一个集合用来存储所有图片文件的后缀 MySet.add('jpg'); MySet.add('png'); MySet.add('jpeg') const jpgY=(path)=>{ //path就是需要压缩图片的文件夹路径 fs.readdir(path,(err,data)){ if(err){console.log(err);return;} data.forEach(item=>{ //对文件夹的内容进行遍历 const FilePath=path+'/'+item fs.stat(FilePath,(err,stat)){ if(err){console.log(err);return;} if(stat.isFile()){ //判断是文件还是文件夹 if(MySet.has(item.split('.')[1])){ //如果是文件则判断后缀是否是图片文件 const outPutName=path+'/author_'+item; images(FilePath).save(outPutName,{ quality : 30 }) //图片质量为30 } }else{ //如果是文件夹则循环进行遍历 jpgY(FilePath); } } }) } } jpgY('./Img')

nodejs实现前端上传图片后端接收

首先需要写一个前端简易的上传图片调取接口功能(html+jquery) 然后node通过koa搭建接口,接收图片保存

```JavaScript //index.html

//index.js

const Koa = require('koa'); const app = new Koa(); const bodyParse=require('koa-body') const router=require('koa-router')(); router.post('/Img',ctx=>{ ctx.body='接收成功1' ctx.req.on('data', data=>{ const buf=new Buffer(data); //拿到传过来的参数后写入module里 fs.writeFile('./module/inputs.jpeg',buf,err=>{ if(err){console.log(err);return;} console.log('存储成功') }) });

}) router.get('/index',async ctx=>{ ctx.type='html'; ctx.body=fs.readFileSync('./index.html') }) app.use(router.routes(), router.allowedMethods()); app.use(bodyParse({ multipart:true, })) app.listen('3000', () => { console.log(server is running at http://localhost:3000) }); ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值