From ebb0d790ae7a55e25682e78e27f7ecd950319c48 Mon Sep 17 00:00:00 2001 From: Is Isilon Date: Sun, 17 Jan 2016 17:21:55 +0800 Subject: [PATCH] Cropping works! --- .jshintrc | 92 ++++++++++++ images/result.png | Bin 38344 -> 30852 bytes package.json | 8 +- projectSVG.js | 373 +++++++++++++++++++++++++--------------------- render.js | 95 +++++++----- svgCube.html | 31 ++-- svgCube_gui.html | 2 +- 7 files changed, 377 insertions(+), 224 deletions(-) create mode 100755 .jshintrc diff --git a/.jshintrc b/.jshintrc new file mode 100755 index 0000000..f9f8501 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,92 @@ +{ + // JSHint Default Configuration File (as on JSHint website) + // See http://jshint.com/docs/ for more details + + "maxerr" : 50, // {int} Maximum error before stopping + + // Enforcing + "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) + "camelcase" : false, // true: Identifiers must be in camelCase + "curly" : true, // true: Require {} for every new block or scope + "eqeqeq" : true, // true: Require triple equals (===) for comparison + "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() + "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. + "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` + "latedef" : false, // true: Require variables/functions to be defined before being used + "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()` + "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` + "noempty" : true, // true: Prohibit use of empty blocks + "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. + "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) + "plusplus" : false, // true: Prohibit use of `++` and `--` + "quotmark" : false, // Quotation mark consistency: + // false : do nothing (default) + // true : ensure whatever is used is consistent + // "single" : require single quotes + // "double" : require double quotes + "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) + "unused" : true, // Unused variables: + // true : all variables, last function parameter + // "vars" : all variables only + // "strict" : all variables, all function parameters + "strict" : true, // true: Requires all functions run in ES5 Strict Mode + "maxparams" : false, // {int} Max number of formal params allowed per function + "maxdepth" : false, // {int} Max depth of nested blocks (within functions) + "maxstatements" : false, // {int} Max number statements per function + "maxcomplexity" : false, // {int} Max cyclomatic complexity per function + "maxlen" : false, // {int} Max number of characters per line + "varstmt" : false, // true: Disallow any var statements. Only `let` and `const` are allowed. + + // Relaxing + "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) + "boss" : false, // true: Tolerate assignments where comparisons would be expected + "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. + "eqnull" : false, // true: Tolerate use of `== null` + "es5" : true, // true: Allow ES5 syntax (ex: getters and setters) + "esnext" : true, // true: Allow ES.next (ES6) syntax (ex: `const`) + "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) + // (ex: `for each`, multiple try/catch, function expression…) + "evil" : false, // true: Tolerate use of `eval` and `new Function()` + "expr" : false, // true: Tolerate `ExpressionStatement` as Programs + "funcscope" : false, // true: Tolerate defining variables inside control statements + "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') + "iterator" : false, // true: Tolerate using the `__iterator__` property + "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block + "laxbreak" : false, // true: Tolerate possibly unsafe line breakings + "laxcomma" : false, // true: Tolerate comma-first style coding + "loopfunc" : false, // true: Tolerate functions being defined in loops + "multistr" : false, // true: Tolerate multi-line strings + "noyield" : false, // true: Tolerate generator functions with no yield statement in them. + "notypeof" : false, // true: Tolerate invalid typeof operator values + "proto" : false, // true: Tolerate using the `__proto__` property + "scripturl" : false, // true: Tolerate script-targeted URLs + "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` + "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation + "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` + "validthis" : false, // true: Tolerate using this in a non-constructor function + + // Environments + "browser" : true, // Web Browser (window, document, etc) + "browserify" : false, // Browserify (node.js code in the browser) + "couch" : false, // CouchDB + "devel" : true, // Development/debugging (alert, confirm, etc) + "dojo" : false, // Dojo Toolkit + "jasmine" : false, // Jasmine + "jquery" : true, // jQuery + "mocha" : true, // Mocha + "mootools" : false, // MooTools + "node" : true, // Node.js + "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) + "phantom" : true, // PhantomJS + "prototypejs" : false, // Prototype and Scriptaculous + "qunit" : false, // QUnit + "rhino" : false, // Rhino + "shelljs" : false, // ShellJS + "typed" : false, // Globals for typed array constructions + "worker" : false, // Web Workers + "wsh" : false, // Windows Scripting Host + "yui" : false, // Yahoo User Interface + + // Custom Globals + "globals" : {} // additional predefined global variables +} diff --git a/images/result.png b/images/result.png index 08df8c9e2ee42180e44ce7a3425a1352b5420651..63abc7460ab663bbe1c3d6c99feea93e2b7dc08a 100755 GIT binary patch literal 30852 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 CPMoIz literal 38344 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 diff --git a/package.json b/package.json index f654c18..cd2804d 100755 --- a/package.json +++ b/package.json @@ -5,17 +5,21 @@ "main": "render.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start": "node render.js" + "start": "node render.js svgCube.html" }, "repository": "git@gitlab.com:wassname/svg2Cube.git", "author": "wassname@wassname.org", "private": true, "license": "ISC", "dependencies": { + "chromedriver": "^2.20.0", "fs": "0.0.2", "globby": "^4.0.0", + "jquery": "^2.2.0", + "mustache": "^2.2.1", "path": "^0.12.7", "snapsvg": "^0.4.0", - "webdriverio": "^3.4.0" + "system": "^1.0.4", + "webdriverio": "^3" } } diff --git a/projectSVG.js b/projectSVG.js index 074f40e..67af214 100755 --- a/projectSVG.js +++ b/projectSVG.js @@ -3,9 +3,35 @@ * Frontend js file to generate an cube of svg's */ // http://cssdeck.com/labs/pure-css-animated-isometric-boxes -try { - var Snap = require('snapsvg'); -} catch (e) {}; + + + +// polyfill for bind https://github.com/ariya/phantomjs/issues/11281 +if (!Function.prototype.bind) { + console.log("Using polyfill of Function.prototype.bind"); + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; +} var SvgCube = function (options) { @@ -48,7 +74,7 @@ var SvgCube = function (options) { frontUrl: '', frontRot: 0, frontShad: 0.0, - } + }; // add defaults, 2 levels deep options = options || {}; @@ -62,14 +88,14 @@ var SvgCube = function (options) { } } } - this.options = options + this.options = options; // legacy compat - if (options.flatten!==undefined){ - options.scaleY=1-options.flatten; + if (options.flatten !== undefined) { + options.scaleY = 1 - options.flatten; } - if (options.angle!==undefined){ - options.rotateX=options.angle; + if (options.angle !== undefined) { + options.rotateX = options.angle; } if (!options.drawOutline) { @@ -78,161 +104,149 @@ var SvgCube = function (options) { this.init(); -} +}; SvgCube.prototype.init = function () { - this.rotateX = this.options.rotateX + this.rotateX = this.options.rotateX; this.w = this.options.size; // input image width this.h = this.options.size; - this.f = 1-this.options.scaleY + this.f = 1 - this.options.scaleY; - this.rot = this.rotateX * Math.PI / 180 - this.padding = this.options.padding||0; // pading fraction + this.rot = this.rotateX * Math.PI / 180; + this.padding = this.options.padding || 0; // pading fraction this.cw = this.w; // we will keep same width but change height - this.ch = this.h*5//(this.h + Math.sqrt(2)*this.h * Math.tan(this.rot)) - this.h / 2 * (this.f); //canvas height full + this.ch = this.h * 5; //(this.h + Math.sqrt(2)*this.h * Math.tan(this.rot)) - this.h / 2 * (this.f); //canvas height full // create SVG element var o = this.options; - //var style = document.createElement('style'); - //this.paper.defs.appendChild(style) - var styleStr = ` ` + // Now we generate some css to put everything in good positions + var transitions = 0; + var styleStr = '' + + ''; if ($('body>.cube').length === 0) { - var cube = $('
') + var cube = $('
'); - var imageFront = $(``) + var imageFront = $(''); cube.append(imageFront); - var imageL = $(``) + var imageL = $(''); cube.append(imageL); - var imageRight = $(``) + var imageRight = $(''); cube.append(imageRight); - var imageTop = $(``) + var imageTop = $(''); cube.append(imageTop); - var imageBack = $(``) + var imageBack = $(''); cube.append(imageBack); - var imageBottom = $(``) + var imageBottom = $(''); cube.append(imageBottom); $('body').append(cube); @@ -254,10 +268,10 @@ SvgCube.prototype.init = function () { } - $('head>#projection').remove() + $('head>#projection').remove(); $('head').append($(styleStr)); -} +}; /* draw cube from urls in options and outline according to options */ SvgCube.prototype.drawCube = function () { @@ -281,38 +295,65 @@ SvgCube.prototype.drawCube = function () { // class: 'face top', // }) -} +}; -// svg2png -SvgCube.prototype.toPNG = function () { - try { - var dataUrl = svg2png(this.paper.node); - img = document.createElement("img"); - document.body.appendChild(img) - img.src = dataUrl - img.id = "toPNG" - } catch (e) { - console.log(e) - }; -} +/** + * Get the bounds of the images for a screenshot + * uses $.position to get min,max of each side of the image + * @return {[type]} [description] + */ +SvgCube.prototype.getBounds = function () { + var bounds = {}; + $('.cube>b').each(function () { + var pos = this.getBoundingClientRect(); + for (var dim in pos) { + if (dim in pos) { + + // init + if (bounds[dim]===undefined) { + bounds[dim] = { + 'max': pos[dim], + 'min': pos[dim] + }; + } else { + // get max and min + bounds[dim].max = Math.max(bounds[dim].max, pos[dim]); + bounds[dim].min = Math.min(bounds[dim].min, pos[dim]); + } + } + } + }); + return bounds; +}; + +/** + * Get the bounds of the images for a screenshot + * uses $.position to get min,max of each side of the image + * @return {[type]} [description] + */ +SvgCube.prototype.getAllBounds = function () { + var bounds = {}; + $('.cube>b').each(function () { + var pos = this.getBoundingClientRect(); + for (var dim in pos) { + if (dim in pos) { + + // init + if (bounds[dim]===undefined) { + bounds[dim] = []; + } + // get max and min + bounds[dim].push(pos[dim]); + } + } + }); + return bounds; +}; -// svg2png -SvgCube.prototype.toPNG2 = function () { - var dataUrl = svg2png(this.paper.node); - img = document.createElement("img"); - document.body.appendChild(img) - img.src = dataUrl - img.id = "toPNG" -} -// svg2png SvgCube.prototype.update = function () { //this.paper.remove(); this.init(); this.drawCube(); -} - - -try { - module.exports = SvgCube -} catch (e) {}; + console.log(this.getBounds()); +}; diff --git a/render.js b/render.js index 32302eb..34a2254 100755 --- a/render.js +++ b/render.js @@ -5,45 +5,40 @@ var webdriverio = require('webdriverio'); var path = require('path'); -var fs = require('fs'); -var system = require('system') +// var fs = require('fs'); +// var system = require('system') var globby = require('globby'); +var gm = require('gm'); + +// start chromedriver for selenium +var chromedriver = require('chromedriver'); +chromedriver.start(); var options = { + host: "localhost", + port: 9515, desiredCapabilities: { - browserName: 'chrome' + browserName: 'chrome', + chromeOptions: { + binary: '/usr/bin/chromium' + } } }; +var client = webdriverio.remote(options); -/** TODO - * Need to look at clien bounding box for all parts of cube, then get minLeft, maxRight etc, then crop the screenshot there - * - **/ - -// get config -var config = { - debug: false -} - // get inputs -var input = process.argv[2]; -console.log('input:', input); - - -/** - * Screenshot for debug and notification of screenshots - */ -var screenHandler = function (err, screenshot, response) { - if (config.debug) { - console.log({ - err, screenshot, response - }); - } else if (err) { - console.log('saveScreenshot', err); - } +if (process.argv.length < 3 || process.argv.length > 3) { + console.log('Command: ', process.argv); + console.log('Usage: rasterize.js filename'); + return; +} else { + var input = process.argv[2]; + console.log('input:', input); } + +var bounds; globby(input).then(inputs => { console.log('glob(', input, ') ->', inputs); @@ -57,19 +52,45 @@ globby(input).then(inputs => { var url = 'file://' + path.join(process.cwd(), file); var outfile = address.replace(ext, '.png'); + // create panel elements temporarily + console.log('Converting ', file, url, '->', outfile); - webdriverio - .remote(options) - .init() + client.init() .url(url) - .getTitle().then(title => { - console.log('Title is: ' + title); + .waitForVisible('.front', 5000) + // get image boundries from html + .execute(function () { + return $('#dimensions').text(); + }) + .then(text => { + try { + bounds = JSON.parse(text.value); + } catch (e) { + console.warn(text); + } + }) + // take a screen shot + .screenshot() + // crop using graphics magic + .then(res => { + var imgBuffer = new Buffer(res.value, 'base64'); + + /** Crop it using graphicks magic */ + gm(imgBuffer) + .crop( + bounds.right.max - bounds.left.min, + bounds.bottom.max - bounds.top.min, + bounds.left.min, + bounds.top.min + ) + .write(outfile, function (err) { + if (!err) console.log('done'); + }); + }) - .waitForVisible('.front', 1000) //.then(callback); - .saveScreenshot( - outfile, screenHandler - ) .end(); + } }, this) +chromedriver.stop(); diff --git a/svgCube.html b/svgCube.html index 31bf8e4..c020ffc 100755 --- a/svgCube.html +++ b/svgCube.html @@ -3,27 +3,22 @@ - Snap.js isometric SVG + svg2Cube +