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?