IMGR = function (options) { this.options = utils.mergeDefaults(options, default_options); }
n/a
size = function (path, callback) { var stream = fs.createReadStream(path); imagesize(stream, function (err, dimensions) { if (err) err = new Error('The image dimensions could not be determined (the image may be invalid).'); stream.destroy(); callback(err, dimensions); }); }
...
if (!operation.width && !operation.height && !operation.factor && !operation.crop_width) {
return self.copy(self.image, output, function (err) {
return self.finalise(err);
});
}
//Get the current image dimensions
self.size(self.image, function (err, size) {
if (err || !size) {
return self.finalise(err || 'Failed to obtain image dimensions');
}
//Adaptive resizing
if (operation.width && operation.height && typeof operation.crop_width === 'undefined') {
var original_ar = size.width / size.height
...
IMGR = function (options) { this.options = utils.mergeDefaults(options, default_options); }
n/a
load = function (path) { return new Converter(path, this.options); }
...
self.options.trace('missing_original');
return callback();
}
self.info('compiling %s', dest);
//Resize / crop as necessary
var imgr = self.imgr.load(src, self.options);
if (parameters.width) {
if (parameters.height) {
self.options.trace('resize_adaptive');
imgr.adaptiveResize(parameters.width, parameters.height, parameters.orientation);
} else {
self.options.trace('resize_width');
imgr.resizeToWidth(parameters.width);
...
serve = function (path) { return new Server(path, this.options, this); }
...
IMGR runs as [express](http://expressjs.com) middleware and requires [GraphicsMagick](http://www.graphicsmagick.org/)
```javascript
var IMGR = require('imgr').IMGR;
var imgr = new IMGR;
imgr.serve('/path/to/images')
.namespace('/images')
.urlRewrite('/:path/:size/:file.:ext')
.whitelist([ '200x300', '100x100' ])
.using(express_app);
```
Now */path/to/images/foobar.jpg* can be accessed using
...