diff --git a/src/banquo.js b/src/banquo.js index abe6a46..fa39778 100755 --- a/src/banquo.js +++ b/src/banquo.js @@ -1,12 +1,20 @@ var fs = require('fs'); +var path = require('path'); var _ = require('underscore') var phantom = require('node-phantom'); +var execSync = require('exec-sync'); +var imgTemp = 'banquo_temp.png'; +var writePath = path.resolve(__dirname, '../../../../') function banquo(opts, callback) { var settings = _.extend({ mode: 'base64', - viewport_width: 1440, - delay: 1000, + viewport_width: 1280, + viewport_height: 900, + trim: 0, + thumbnail: 0, + dimension: '256x144', + delay: 0, selector: 'body', css_file: '' }, opts); @@ -26,24 +34,31 @@ function banquo(opts, callback) { var ph; console.log('Requesting', settings.url); + console.log(settings) phantom.create(createPage) function createPage(err, _ph) { - ph = _ph; - ph.createPage(openPage); + if (!err) { + ph = _ph; + ph.createPage(openPage); + } else { + callback(err); + } } function openPage(err, _page) { page = _page; page.set('onError', function() { return; }); page.onConsoleMessage = function (msg) { console.log(msg); }; - page.set('viewportSize', {width: settings.viewport_width, height: 900}); + page.set('viewportSize', {width: settings.viewport_width, height: settings.viewport_height}); page.open(settings.url, prepForRender); } function prepForRender(err, status) { - page.evaluate(runInPhantomBrowser, renderImage, settings.selector, css_text); + setTimeout(function() { + page.evaluate(runInPhantomBrowser, renderImage, settings.selector, css_text); + }, settings.delay); } function runInPhantomBrowser(selector, css_text) { @@ -57,21 +72,24 @@ function banquo(opts, callback) { } function renderImage(err, rect) { - setTimeout(function(){ - page.set('clipRect', rect); - if (settings.mode != 'save'){ - page.renderBase64('PNG', base64Rendered); - }else{ - page.render(settings.out_file, cleanup); - callback('Writing to file... ' + settings.out_file); - } - }, settings.delay) + page.set('clipRect', rect); + if (settings.mode != 'save'){ + page.renderBase64('PNG', base64Rendered); + }else{ + page.render(settings.out_file, cleanup); + callback('Writing to file... ' + settings.out_file); + } } function base64Rendered(err, image_data){ if (err){ console.log(err); } + + if (settings.trim === '1' || settings.thumbnail === '1') { + image_data = runImageMagick(image_data) + } + callback(image_data) cleanup(); } @@ -79,6 +97,29 @@ function banquo(opts, callback) { function cleanup() { ph.exit(); } + + function runImageMagick(image_data) { + var fImg = path.resolve(writePath, imgTemp), + result = fs.writeFileSync(fImg, image_data, 'base64') + + if (settings.trim === '1') { + var cmdTrim = "convert -trim " + fImg + " " + fImg + console.log('Trimming: ' + cmdTrim) + execSync(cmdTrim) + } + + if (settings.thumbnail === '1') { + var cmdThumbnail = "convert " + fImg + " -thumbnail " + settings.dimension + " " + fImg + console.log('Processing thumbnail: ' + cmdThumbnail) + execSync(cmdThumbnail) + } + + var data = fs.readFileSync(fImg, 'base64'); + + fs.unlink(fImg) + + return data + } } module.exports = {