我正在Node.js(+ express 4)上开发一个Web应用程序,用户可以通过将其上传到服务器来设置他们的个人资料图像.我们已经限制了文件mimetype和max filesize,因此用户无法上传超过200KB的png或jpeg图像.
问题是我们希望将上传的图像分辨率调整为(服务器端)为200x200,以改善页面加载并节省磁盘空间.经过一些研究,所有答案都指向使用基于ImageMagick或GraphicsMagick的任何模块.
但是,必须安装ImageMagick/GraphicsMagick进行简单的图像调整大小对我来说似乎太过分了,所以,Node.js还有除此之外的其他解决方案吗?
我最近开始为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回购的更多信息.
我会投票支持锐利:
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更快,更高效.它支持流,缓冲和文件系统输入和输出,颜色管理,透明度,承诺,叠加,WebP,SVG等有用的东西.
截至0.20,npm将在大多数平台上自动下载完整的预编译二进制文件,因此不需要node-gyp.只需输入:
npm install sharp
要么:
yarn add sharp
你离开了.
看看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. }); });
我已经在我的文件上传器中成功实现了它,它就像一个魅力.
有一个很好的图像处理库完全用JavaScript编写,没有依赖于任何其他库,Jimp.https://github.com/oliver-moran/jimp
用法示例:
var Jimp = require("jimp"); // open a file called "lenna.png" Jimp.read("lenna.png", function (err, lenna) { if (err) throw err; lenna.resize(256, 256) // resize .quality(60) // set JPEG quality .write("lena-small.jpg"); // save });
Canvas 比ImageMagic 快2.3倍.
您可以尝试比较Node.js模块以进行图像处理 - https://github.com/ivanoff/images-manipulation-performance
author's results: sharp.js : 9.501 img/sec; minFreeMem: 929Mb canvas.js : 8.246 img/sec; minFreeMem: 578Mb gm.js : 4.433 img/sec; minFreeMem: 791Mb gm-imagemagic.js : 3.654 img/sec; minFreeMem: 804Mb lwip.js : 1.203 img/sec; minFreeMem: 54Mb jimp.js : 0.445 img/sec; minFreeMem: 82Mb
sharp最近有一些人气,但它与*Magick绑定的想法相同.
但是,必须安装ImageMagick/GraphicsMagick进行简单的图像调整大小对我来说似乎太过分了
图像大小调整绝非易事.JPEG格式特别复杂,有几种方法可以使用不同质量的结果来缩放图形,很少有这些方法可以轻松实现.存在图像处理库来完成这项工作,所以如果没有其他原因你无法安装它们,那就去做吧.