There's probably some detail that I'm missing, because the rasterization script works fine standalone, but I haven't been successful reading its output from NodeJS so far.
Here's the NodeJS part:
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');
And here's the 'script.js' that is executed by PhantomJS:
var page = require('webpage').create();
page.content = '<img src="(#imageData)">';
window.setTimeout(function () {
page.render('/dev/stdout', { format: 'png' });
phantom.exit();
}, 1);
What I'd like to do is to render Base64 encoded image to PNG with phantomjs to stdout, read that image in nodejs and then serve it.
What am I doing wrong?