Node.js:不使用ImageMagick调整图像大小

 进出口产地 发布于 2023-01-11 18:59

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

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

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

6 个回答
  • 我最近开始为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-01-11 19:00 回答
  • 我会投票支持锐利:

    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
    

    你离开了.

    2023-01-11 19:00 回答
  • 看看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-01-11 19:00 回答
  • 有一个很好的图像处理库完全用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
    });
    

    2023-01-11 19:00 回答
  • 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
    

    2023-01-11 19:00 回答
  • sharp最近有一些人气,但它与*Magick绑定的想法相同.

    但是,必须安装ImageMagick/GraphicsMagick进行简单的图像调整大小对我来说似乎太过分了

    图像大小调整绝非易事.JPEG格式特别复杂,有几种方法可以使用不同质量的结果来缩放图形,很少有这些方法可以轻松实现.存在图像处理库来完成这项工作,所以如果没有其他原因你无法安装它们,那就去做吧.

    2023-01-11 19:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有