我正在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相关问答推荐

node 无法验证第一个证书

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

CloudTasksClient在Firebase Function % s onDocumentCreated中实例化时导致错误

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

购物车是空的状态|本地存储不更新产品数量|Redux|

如何使用NodeJS在mongodb中更新文档

Nest Js - 在 multer 拦截器中如何设置最大文件上传大小并进行可选文件上传

构建期间 Docker 容器中的 npm 安装失败

在nodejs中为oauth请求创建和存储csrf令牌的最佳方法

动态设置元数据,无需重复请求 NextJS 13

为什么 FastAPI 需要 Web 服务器(即 Nginx)而不是 Express API?

多字段传递获取查询失败

在 Passport 策略回调中获取请求对象

在多个文件 node.js 之间共享和修改变量

nodejs v10.3.0 的 gulp 任务问题:src\node_contextify.cc:629: Assertion `args[1]->IsString()' failed

安装 node 包时可以使用自定义目录名称而不是node_modules吗?

在 react-router v4 中使用 React IndexRoute

Node.js - 判断是否安装了模块而不实际需要它

如何从 find 方法返回 Mongoose 结果?

如何阻止 babel 将this转换为undefined(并插入use strict)