2014-04-07 11 views
5

शायद कुछ विवरण है जो मुझे याद आ रही है, क्योंकि रास्टरराइजेशन स्क्रिप्ट ठीक स्टैंडअलोन काम करती है, लेकिन मैं अब तक नोडजेएस से अपने आउटपुट को पढ़ने में सफल नहीं रहा हूं।सेवा करने के लिए नोडजेस में phantomjs stdout से एक छवि को कैसे पढ़ा जाए?

यहाँ NodeJS हिस्सा है:

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'); 

और यहाँ 'script.js' कि PhantomJS द्वारा निष्पादित किया जाता है है:

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

मुझे क्या करना चाहते हैं Base64 इनकोडिंग छवि प्रस्तुत करने के लिए है phantomjs stdout के साथ पीएनजी के लिए, उस छवि को नोडज में पढ़ें और फिर इसे सेवा दें।

मैं क्या गलत कर रहा हूं?

+0

अगर किसी को भी अच्छा होगा सिर्फ दूसरों की खातिर जो यहाँ भूमि कर सकते हैं के लिए, यहाँ एक काफी आसान जवाब है इसका जवाब देने पर विचार करेंगे। phantomjs में node.js सामान के बहुत सारे काम नहीं करता है। fs.readFileSync() – holms

+0

सहित यदि आप सोच रहे हैं, तो मैंने के साथ एक अस्थायी स्क्रिप्ट तैयार की, एक प्रक्रिया के रूप में phantomjs spawning और स्क्रिप्ट के पथ को पैरामीटर के रूप में पास कर दिया। फिर उत्पन्न छवि को पढ़ना जब phantomjs प्रक्रिया मौजूद है नोडज में, इसे सेवा देना और जैसे ही बाद में सेवा दी जाती है, दोनों स्क्रिप्ट और छवि को हटा दें। बहुत अच्छी तरह से काम करने के लिए दिखाई देता है। – Vitaly

+0

@ विटाली इस से संबंधित है: http://stackoverflow.com/questions/19512983/phantomjs-pdf- टू-स्टडआउट? आरक्यू = 1? –

उत्तर

3

मैंने देखा कि आपको एक समाधान मिला है।

PhantomJS:

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

नोड (phantomjs-पहले से बनाए गए का उपयोग कर):

childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) { 
    var buf = new Buffer(stdout, 'base64'); 
    fs.writeFile('test.png', buf); 
} 
संबंधित मुद्दे