2014-04-07 12 views
5

Muhtemelen eksik olan bazı ayrıntılar vardır, çünkü rasterleştirme betiği çok iyi çalışır, ancak şimdiye kadar NodeJS'den çıkışını okumaya başarılı olmadım. İşte Hizmet vermek için nodejs içinde phantomjs stdout bir görüntü nasıl okunur?

NodeJS parçası:

var http = require('http'); 
var qs = require('querystring'); 
var fs = require('fs'); 
var spawn = require('child_process').spawn; 

var SCRIPT = fs.readFileSync('./script.js', { encoding: 'utf8' }); 

http.createServer(function (request, response) { 
    var body = ''; 
    request.on('data', function (data) { 
     body += data; 
    }); 
    request.on('end', function() { 
     var postData = qs.parse(body); 
     var phantomOut = ''; 
     var phantom = spawn('phantomjs'); 
     phantom.stdout.on('data', function (buf) { 
      phantomOut += buf; 
     }); 
     phantom.on('exit', function (code) { 
      response.writeHead(200, { 
       'Content-Type': 'image/png' 
      }); 
      response.end(phantomOut); 
     }); 
     phantom.stdin.setEncoding('utf8'); 
     phantom.stdin.write(SCRIPT.replace('(#imageData)', postData.imageData)); 
    }); 
}).listen(1337, '127.0.0.1'); 

Ve burada PhantomJS tarafından yürütülür 'script.js' var:

var page = require('webpage').create(); 
page.content = '<img src="(#imageData)">'; 
window.setTimeout(function() { 
    page.render('/dev/stdout', { format: 'png' }); 
    phantom.exit(); 
}, 1); 

Ne yapmak istiyorum Base64 kodlanmış görüntü oluşturmaya etmektir phantomjs ile stdout için PNG'ye, bu resmi nodejs'de okuyun ve sonra ona sunun.

Neyi yanlış yapıyorum?

+0

herkes eğer iyi olurdu Sadece burada inebileceği başkaları uğruna, burada çok daha kolay cevaptır Buna cevap vermeyi düşünürdüm. phantomjs içinde node.js şeyler çok çalışmıyor. fs.readFileSync() – holms

+0

dahil Eğer merak ediyorsanız, ile geçici bir betik oluşturmayı, bir süreç olarak phantomileri yumurtlamayı ve bir parametre olarak komut dosyasına iletmeyi sonlandırdım. Daha sonra phantomjs işlemi olduğunda oluşturulan görüntüyü okuyorum. nodejs içinde, hizmet veren ve en kısa sürede hizmetin sunulduğu anda hem betiği hem de görüntüyü kaldırarak. Çok iyi çalıştığı görülüyor – Vitaly

+0

@Vitaly buna benzer: http://stackoverflow.com/questions/19512983/phantomjs-pdf- to-stdout? rq = 1? –

cevap

3

Bir çözüm bulduğunuzu farkettim.

PhantomJS:

var base64 = page.renderBase64('PNG'); 
system.stdout.write(base64); 
phantom.exit(); 

Düğüm (phantomjs-önceden oluşturulmuş kullanarak):

childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) { 
    var buf = new Buffer(stdout, 'base64'); 
    fs.writeFile('test.png', buf); 
} 
İlgili konular