aethermx/glob-imagemagick

View on GitHub
index.js

Summary

Maintainability
A
35 mins
Test Coverage
var globby = require('globby');
var gm = require('gm').subClass({imageMagick: true});
var mkdirp = require('mkdirp');
var async = require('async');
var path = require('path');
var EventEmitter = require('events').EventEmitter;
var util = require('util');

function Resizer(src, target, size) {
    EventEmitter.call(this);
    if ( typeof(size) === 'string' ) {
        var sizes = size.split('x');
        size = {
            width:parseInt(sizes[0]),
            height:parseInt(sizes[1])
        };
    }
    this._src = src;
    this._target = target;
    this._size = size;
}

util.inherits(Resizer, EventEmitter);

Resizer.prototype.resize = function(file, done) {
    var self = this;
    var fileSrc = path.join(this._src, file);
    var fileDest = path.join(this._target, file);
    var folder = path.dirname(fileDest);
    mkdirp(folder, function() {
        self.emit('image', file, self._size.width + 'x' + self._size.height);
    var options = '!';
    gm(fileSrc).resize(self._size.width, self._size.height, options)
               .write(fileDest, done);
    });
}

module.exports = function(src, glob, target, size, done) {
    var resizer = new Resizer(src, target, size);
    globby(glob, {
        cwd: src
    }, function(err, files) {
        async.forEach(files, function(file, nextFile) {
            resizer.resize(file, nextFile);
        }, done);
    });

    return resizer;
};