我正在Node上开发一个web应用程序.js(+express 4),用户可以通过上传到服务器来设置他们的个人资料图像.我们已经限制了文件mimetype和最大文件大小,因此用户上传的png或jpeg图像不能超过200KB.

问题是,我们希望将上传的图像分辨率(服务器端)调整为200x200,以提高页面加载并节省磁盘空间.经过一些研究,所有答案都指向使用基于ImageMagick或GraphicsMagick的任何模块.

然而,必须安装ImageMagick/GraphicsMagick来进行简单的图像大小调整,这对我来说似乎太过分了,所以,除了这个 node ,还有其他解决方案吗.js?

Edit:我已将已接受的解决方案更改为sharp,因为以前的解决方案(lwip)不再维护.谢谢你的反馈!

推荐答案

我会投sharp票:

sharp('input.jpg')
  .resize(200, 200)
  .toFile('ouput.jpg', function(err) {
    // output.jpg is a 200 pixels wide and 200 pixels high image
    // containing a scaled and cropped version of input.jpg
  });

它的速度很快,typically 6x faster than the fastest imagemagick-based node bindings,并且运行在非常小的内存中,perhaps 10x less.直接链接到libvips图像库,无需外部程序,库本身比*magick在这项任务中更快、更高效.它支持流、缓冲区和文件系统输入和输出、 colored颜色 管理、透明度、promise 、覆盖、WebP、SVG等有用的东西.

从sharp 0.20开始,npm将在大多数平台上自动下载完整的预编译二进制文件,因此不需要 node gyp.只需输入:

npm install sharp

或者:

yarn add sharp

你走吧.

Node.js相关问答推荐

GitLab SAST中的Nodejcan未找到匹配项

ForbidenError:使用Express.js的CSRF令牌无效

Next.js 路由不起作用 - 页面未正确加载

运行本地移动自动化测试时,在onPrepare钩子中,ERROR @wdio/cli:utils: A service failed in the 'onPrepare'

Solidity 将数据位置从内存更改为存储

MongoDB - mongoose :如何查询这个? 填充()不起作用.它显示空

Axios GET 返回不可读的响应

如何删除mongodb中嵌套数组中所有出现的数组元素

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

Firestore promise 在退货前等待产品详细信息

从 Node.js 应用程序查询 Heroku 托管的 Postgres 数据库时出现自签名证书错误

如何可靠地散列 JavaScript 对象?

如何在不全局安装的情况下在 Node REPL 中要求 node 模块?

为什么模块级返回语句在 Node.js 中起作用?

Express.js:没有这样的文件或目录

需要 node-gyp 的 npm install 在 Windows 上失败

使用 node.js 循环 JSON

路由后的 Node Express 4 中间件

Mongoose:模式与模型?

promise 回调返回promise