/** * Module dependencies. */ var Stream = require('stream').Stream; var EventEmitter = require('events').EventEmitter; var util = require('util'); util.inherits(gm, EventEmitter); /** * Constructor. * * @param {String|Number} path - path to img source or ReadableStream or width of img to create * @param {Number} [height] - optional filename of ReadableStream or height of img to create * @param {String} [color] - optional hex background color of created img */ function gm (source, height, color) { var width; if (!(this instanceof gm)) { return new gm(source, height, color); } EventEmitter.call(this); this._options = {}; this.options(this.__proto__._options); this.data = {}; this._in = []; this._out = []; this._outputFormat = null; this._subCommand = 'convert'; if (source instanceof Stream) { this.sourceStream = source; source = height || 'unknown.jpg'; } else if (Buffer.isBuffer(source)) { this.sourceBuffer = source; source = height || 'unknown.jpg'; } else if (height) { // new images width = source; source = ""; this.in("-size", width + "x" + height); if (color) { this.in("xc:"+ color); } } else if(source && source.width && source.height) { // new images width = source.width; height = source.height; source = ""; this.in("-size", width + "x" + height); if (color) { this.in("xc:"+ color); } } if (typeof source === "string") { // then source is a path // parse out gif frame brackets from filename // since stream doesn't use source path // eg. "filename.gif[0]" var frames = source.match(/(\[.+\])$/); if (frames) { this.sourceFrames = source.substr(frames.index, frames[0].length); source = source.substr(0, frames.index); } } this.source = source; this.addSrcFormatter(function (src) { // must be first source formatter var inputFromStdin = this.sourceStream || this.sourceBuffer; var ret = inputFromStdin ? '-' : this.source; if (ret && this.sourceFrames) ret += this.sourceFrames; src.length = 0; src[0] = ret; }); } /** * Subclasses the gm constructor with custom options. * * @param {options} options * @return {gm} the subclasses gm constructor */ var parent = gm; gm.subClass = function subClass (options) { function gm (source, height, color) { if (!(this instanceof parent)) { return new gm(source, height, color); } parent.call(this, source, height, color); } gm.prototype.__proto__ = parent.prototype; gm.prototype._options = {}; gm.prototype.options(options); return gm; } /** * Augment the prototype. */ require("./lib/options")(gm.prototype); require("./lib/getters")(gm); require("./lib/args")(gm.prototype); require("./lib/drawing")(gm.prototype); require("./lib/convenience")(gm.prototype); require("./lib/command")(gm.prototype); require("./lib/compare")(gm.prototype); require("./lib/composite")(gm.prototype); require("./lib/montage")(gm.prototype); require("./lib/pipeline")(gm.prototype); /** * Expose. */ module.exports = exports = gm; module.exports.utils = require('./lib/utils'); module.exports.compare = require('./lib/compare')(); module.exports.version = require('./package.json').version;