zac*_*cr0 73 image image-resizing node.js
我正在Node.js(+ express 4)上开发一个Web应用程序,用户可以通过将其上传到服务器来设置他们的个人资料图像.我们已经限制了文件mimetype和max filesize,因此用户无法上传超过200KB的png或jpeg图像.
问题是我们希望将上传的图像分辨率调整为(服务器端)为200x200,以改善页面加载并节省磁盘空间.经过一些研究,所有答案都指向使用基于ImageMagick或GraphicsMagick的任何模块.
但是,必须安装ImageMagick/GraphicsMagick进行简单的图像调整大小对我来说似乎太过分了,所以,Node.js还有除此之外的其他解决方案吗?
jcu*_*itt 76
我会投票支持锐利:
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
});
Run Code Online (Sandbox Code Playgroud)
它速度快,通常比最快的基于imagemagick的节点绑定快6倍,并且运行在非常小的内存中,可能少10倍.直接链接到libvips图像库,没有外部程序的炮轰,并且库本身比*magick更快,更高效.它支持流,缓冲和文件系统输入和输出,颜色管理,透明度,承诺,叠加,WebP,SVG等有用的东西.
截至0.20,npm将在大多数平台上自动下载完整的预编译二进制文件,因此不需要node-gyp.只需输入:
npm install sharp
Run Code Online (Sandbox Code Playgroud)
要么:
yarn add sharp
Run Code Online (Sandbox Code Playgroud)
你离开了.
Eya*_*lAr 71
我最近开始为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.
});
});
Run Code Online (Sandbox Code Playgroud)
有关该模块的Github回购的更多信息.
Arv*_*ind 16
看看lwip:https://github.com/EyalAr/lwip
非常简单易用
npm install lwip
Run Code Online (Sandbox Code Playgroud)
然后在你的节点代码中
// 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.
});
});
Run Code Online (Sandbox Code Playgroud)
我已经在我的文件上传器中成功实现了它,它就像一个魅力.
edt*_*ech 11
有一个很好的图像处理库完全用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
});
Run Code Online (Sandbox Code Playgroud)
sharp最近有一些人气,但它与*Magick绑定的想法相同.
但是,必须安装ImageMagick/GraphicsMagick进行简单的图像调整大小对我来说似乎太过分了
图像大小调整绝非易事.JPEG格式特别复杂,有几种方法可以使用不同质量的结果来缩放图形,很少有这些方法可以轻松实现.存在图像处理库来完成这项工作,所以如果没有其他原因你无法安装它们,那就去做吧.
小智 6
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67204 次 |
最近记录: |