如何使用 Dropbox Lepton Node JS 包压缩图片

How to Compress image using Dropbox Lepton Node JS Package

我正在尝试使用 Dropbox lepton NodeJS Package 来压缩图像。但是,当我 运行 我的 NodeJS Express 应用程序中的以下代码时,下面是我得到的错误。

有人可以建议我如何解决这个错误吗?

这是我正在尝试的代码 运行。

  var myLepton                 =   require('node-lepton');

  myLepton.compress('http://www.barth.com/hires/N10_JB07006.jpg',
  {
    unjailed: false,
  },
  function(err, data){
    if(err) throw err;
    console.log("data : "+JSON.stringify(data, null, 4));
    console.log('Successfully compressed image');
  });

下面是我得到的错误

Error: Command failed: lepton -memory=1024M -threadmemory=128M http://www.barth.com/hires/N10_JB07006.jpg 51di81xl3g.lep
/bin/sh: lepton: command not found

    at ChildProcess.exithandler (child_process.js:275:12)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at maybeClose (internal/child_process.js:925:16)
    at Socket.stream.socket.on (internal/child_process.js:346:11)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at Pipe._handle.close [as _onclose] (net.js:554:12)

我遇到了同样的问题,通过手动安装 lepton(参见 instructions here)并将其安装目录添加到 $PATH(在 Linux/Mac 中或在 Windows).

此代码还有另一个问题:您假设可以提供 URL 作为您的文件 - 但 compress 接受存储在您本地计算机上的文件的路径。

您可以通过在本地下载此文件来检查 lepton 是否已正确安装:

curl http://www.barth.com/hires/N10_JB07006.jpg > file.jpg
来自命令行的

和 运行:

lepton -memory=1024M -threadmemory=128M file.jpg 51di81xl3g.lep

基本上,that's what node-lepton is doing :)

您应该会看到保存到 51di81xl3g.lep 中的 jpg 的压缩版本。

完成此工作后,您可以返回到您的代码,添加逻辑以在压缩之前将文件下载到本地,您应该没问题。

示例:

var lepton = require('node-lepton');
var http = require('http');
var fs = require('fs');

var file = fs.createWriteStream("file.jpg");
console.log("downloading ...");
var request = http.get("http://www.barth.com/hires/N10_JB07006.jpg", function(response) {
    response.on('data', function(chunk){
            file.write(chunk);
        })
        .on('end', function(){
            file.end();
            console.log("file was downloaded successfully!");

            // compress
            console.log("compressing...");
            lepton.compress('file.jpg',
            {
                unjailed: false,
            },
            function(err, data){
                if(err) throw err;
                // save the compressed data into a new file
                fs.writeFile('compressed.z', data, function(err) {
                    if(err) {
                        return console.log(err);
                    }
                    console.log("The file was saved!");
                }); 
            });
        });
});