/compass/005_compass/compass/node_modules/gm/lib/convenience/autoOrient.js |
@@ -0,0 +1,57 @@ |
|
/** |
* Extend proto. |
*/ |
|
module.exports = function (proto) { |
|
var exifTransforms = { |
topleft: '' |
, topright: ['-flop'] |
, bottomright: ['-rotate', 180] |
, bottomleft: ['-flip'] |
, lefttop: ['-flip', '-rotate', 90] |
, righttop: ['-rotate', 90] |
, rightbottom: ['-flop', '-rotate', 90] |
, leftbottom: ['-rotate', 270] |
} |
|
proto.autoOrient = function autoOrient () { |
// Always strip EXIF data since we can't |
// change/edit it. |
|
// imagemagick has a native -auto-orient option |
// so does graphicsmagick, but in 1.3.18. |
// nativeAutoOrient option enables this if you know you have >= 1.3.18 |
if (this._options.nativeAutoOrient || this._options.imageMagick) { |
this.out('-auto-orient'); |
this.strip(); |
return this; |
} |
|
this.preprocessor(function (callback) { |
this.orientation({bufferStream: true}, function (err, orientation) { |
if (err) return callback(err); |
|
var transforms = exifTransforms[orientation.toLowerCase()]; |
if (transforms) { |
|
// remove any existing transforms that might conflict |
var index = this._out.indexOf(transforms[0]); |
if (~index) { |
this._out.splice(index, transforms.length); |
} |
|
// repage to fix coordinates |
this._out.unshift.apply(this._out, transforms.concat('-page', '+0+0')); |
} |
|
this.strip(); |
|
callback(); |
}); |
}); |
|
return this; |
} |
} |