How to read an image from phantomjs stdout in nodejs to serve it?

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

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?

回答1:

I noticed that you have found a solution. Just for the sake of others who may land here, here is a far easier answer:

PhantomJS:

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

Node (using phantomjs-prebuilt):

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!