123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * 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);
- }
- }
- 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);
- /**
- * Expose.
- */
- module.exports = exports = gm;
- module.exports.utils = require('./lib/utils');
- module.exports.compare = require('./lib/compare')();
- module.exports.version = JSON.parse(
- require('fs').readFileSync(__dirname + '/package.json', 'utf8')
- ).version;
|