当前位置: 首页 > 知识库问答 >
问题:

节点。js:不使用ImageMagick调整图像大小

易烨磊
2023-03-14

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

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

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

编辑:我已经将接受的解决方案更改为夏普,因为不再维护以前的解决方案(lwip)。感谢您的所有反馈!

共有3个答案

文凯康
2023-03-14

看看lwip:https://github.com/EyalAr/lwip

非常简单易用

npm install lwip

然后在你的节点代码中,

// obtain an image object:
require('lwip').open('image.jpg', function(err, image){

  // check err...
  // define a batch of manipulations and save to disk as JPEG:
  image.batch()
    .scale(0.75)          // scale to 75%
    .rotate(45, 'white')  // rotate 45degs clockwise (white fill)
    .crop(200)            // crop a 200X200 square from center
    .blur(5)              // Gaussian blur with SD=5
    .writeFile('output.jpg', function(err){
      // check err...
      // done.
    });

});

我已经在我的文件上传程序中成功地实现了这一点,它的工作方式很有魅力。

柳坚白
2023-03-14

我最近开始为NodeJS开发一个没有任何运行时依赖的图像处理模块(阅读原因)。它仍处于早期阶段,但已经可以使用了。

你所要求的将按以下方式完成:

image.resize(200, 200, function(err, image){
    // encode resized image to jpeg and get a Buffer object
    image.toBuffer('jpg', function(err, buffer){
        // save buffer to disk / send over network / etc.
    });
});

更多信息在模块的Github回购。

傅边浩
2023-03-14

我会投票支持夏普:

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
  });

它的速度很快,通常比最快的基于imagemagick的节点绑定快6倍,并且运行在非常少的内存中,可能要少10倍。直接链接到libvips图像库,无需向外部程序进行炮击,而且库本身在这项任务上比*magick更快、更高效。它支持流、缓冲区和文件系统输入和输出、颜色管理、透明度、promise、覆盖、WebP、SVG等有用的东西。

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

npm install sharp

或:

yarn add sharp

你走吧。

 类似资料:
  • 问题内容: 我正在Node.js(+ express 4)上开发一个Web应用程序,用户可以通过将其上载到服务器来设置其个人资料图像。我们已经限制了文件的模仿类型和最大文件大小,因此用户上传的png或jpeg图片不能超过200KB。 问题是我们想将上传的图片分辨率(服务器端)调整为200x200,以改善页面加载并节省磁盘空间。经过研究,所有答案都指向使用任何基于ImageMagick或Graphi

  • 如何让ImageView中的图像自动调整大小,使其始终适合父节点? 下面是一个小代码示例:

  • 问题内容: 我有一个快速的问题,我不太确定要进行设置。我在其他地方看到过示例,但没有什么比我的情况更具体。我想使用PHP调整图像的大小,以使图像易于阅​​读,而不仅仅是像使用HTML那样随意拉伸。如果它们的宽度不是250像素,也不是160像素,那么如何调整图片的大小,使其成比例但适合该空间? 谢谢! 问题答案: 好的,下面是我在商店中使用的Image对象。保持规模-需要GD 我在请求时调整图像的大

  • 所以我有一个非常奇怪的情况。我有两个图标,都是288x288px。但第一个图标在应用程序中显示得比另一个更大。 她是我的xml: css部分:. background{background-图像: url("res://login_bg"); background-重复:无重复;background-大小:封面;background-位置:中心;} 和两个图标: 有人有同样的问题吗?

  • 问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro

  • 我想集成Dropzone。js具有客户端图像大小调整功能。我知道有一个函数可以调整缩略图的大小,但我想在上传之前创建一个函数来调整主图像的大小。有人能帮我吗?