簡體   English   中英

將緩沖區傳遞給ChildProcess Node.js

[英]Pass Buffer to ChildProcess Node.js

在這里,我要在Node.Js上執行子進程中的圖像處理。

如您所見,我將文件image.jpg並想在一個子hello.jpg中將其寫回到hello.jpg

var node = require('child_process').spawn('node',['-i']);
var fs = require('fs');

node.stdout.on('data',function(data) {
  var fs = require('fs');
    var gm = require('gm').subClass({ imageMagick: true });

    gm(data)
     .resize(500, 500)
     .toBuffer("jpg", function(err, buffer) {
      if (err) {
        console.log(err);
      }else{
        fs.writeFile("hello.jpg", buffer);  
      }
   });
});


var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.write(buffer);

但是,當我運行此文件時,出現此錯誤:

[錯誤:流產生空緩沖區]

對我來說,似乎緩沖區沒有正確傳遞給子進程? 我怎么了 如何在子任務中運行圖像處理。 對我來說,重要的是不要從子進程的文件中讀取它。 因為我想再次讀取一個File,然后將緩沖區發送給執行Image Transformations的多個子進程。 謝謝!

您沒有在子流程中做任何工作。 它只是node -i而已。 您所有的圖像處理都在主過程中進行。

要解決此問題,您實際上可以運行另一個Node進程並為其執行一些腳本,例如worker.js

process.stdin.on('data',function(data) {
  var fs = require('fs');
    var gm = require('gm').subClass({ imageMagick: true });

    gm(data)
     .resize(500, 500)
     .toBuffer("jpg", function(err, buffer) {
      if (err) {
    console.log(err);
      }else{
    fs.writeFile("hello.jpg", buffer);
      }
   });
});

然后,您將從主腳本創建一個子流程:

var node = require('child_process').spawn('node', ['worker.js']);
var fs = require('fs');

var buffer = fs.readFileSync(__dirname + "/image.jpg");
node.stdin.end(buffer);

請注意,我在最后一行中使用了node.stdin.end來終止工作node.stdin.end

查看集群模塊的替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM