Nodejs压缩图片实现方案

安装sharp

目前选择使用sharp 0.31.2版本

npm i sharp@0.31.2

并且在.npmrc里面配置镜像源

sharp_dist_base_url=https://npmmirror.com/mirrors/sharp-libvips/v8.13.3/
sharp_binary_host=https://npmmirror.com/mirrors/sharp
sharp_libvips_binary_host=https://npmmirror.com/mirrors/sharp-libvips

因为sharp有额外的依赖项。

官方文档

并没有在npm里列出,需要访问github,sharp文档

封装promise

export function compressPicture(filePath: string): Promise<Buffer> {
  return new Promise((resolve, reject)=>{
    sharp(filePath)
      .rotate()
      .resize(500)
      .toBuffer()
      .then( (data: any) => {
        resolve(data)
      })
      .catch( (err: any) => {
        reject(err)
      });
  })
}


图片压缩的大小可以自己选择。

接口处理

    if (isPicture(filename)) {
      const result = await compressPicture(filePath)
      res.attachment(filename);
      return res.send(result)
    }
    return res.download(filePath)
    ```
因为sharp返回的是buffer,要给前端文件可以用这个方式,express框架的写法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Node.js中使用图片处理模块进行图片压缩,你可以使用images模块。首先,你需要安装images模块,可以使用npm命令进行安装。然后,你可以使用以下代码实现图片的批量压缩: ```javascript var images = require("images"); var fs = require("fs"); var path = "test"; function explorer(path){ fs.readdir(path, function(err, files){ if(err){ console.log('error:\n', err); return; } files.forEach(function(file){ fs.stat(path + '/' + file, function(err, stat){ if(err){ console.log(err); return; } if(stat.isDirectory()){ explorer(path + '/' + file); }else{ console.log('文件名:', path + '/' + file); var name = path + '/' + file; var outName = path + '/another_' + file; images(name) .save(outName, { quality: 60 }); //保存图片到文件,图片质量为60 } }); }); }); } explorer(path); ``` 上述代码使用了fs模块获取目标图像的存放路径和文件名,并将其传递给images模块。然后,使用images模块打开图像,进行压缩处理,并保存到指定文件中。你可以根据需要修改路径和压缩质量。这样,你就可以实现Node.js中的图片批量压缩。 另外,images模块提供了类似jQuery的链式调用API,你可以使用以下代码来实现单张图片压缩: ```javascript var images = require("images"); images("input.jpg") .size(400) .draw(images("logo.png"), 10, 10) .save("output.jpg", { quality: 50 }); //保存图片到文件,图片质量为50 ``` 上述代码中,我们加载了一张图片,并使用size方法进行等比缩放,然后在指定位置绘制了一个logo,并最终保存到输出文件中。你可以根据需要修改参数来实现定制化的图片压缩。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [使用node.js实现图片压缩](https://blog.csdn.net/shiyangxu/article/details/82019183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值