ng7-pica
Version:
Angular module to resize images files in browser
97 lines (96 loc) • 10.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import * as EXIF from 'exif-js';
var NgxPicaExifService = /** @class */ (function () {
function NgxPicaExifService() {
}
/**
* @param {?} image
* @return {?}
*/
NgxPicaExifService.prototype.getExifOrientedImage = /**
* @param {?} image
* @return {?}
*/
function (image) {
return new Promise(function (resolve, reject) {
EXIF.getData((/** @type {?} */ (image)), function () {
/** @type {?} */
var allExifMetaData = EXIF.getAllTags(image);
/** @type {?} */
var exifOrientation = allExifMetaData.Orientation;
if (exifOrientation) {
if (!/^[1-8]$/.test(exifOrientation)) {
throw new Error('orientation should be [1-8]');
}
/** @type {?} */
var canvas = document.createElement('canvas');
/** @type {?} */
var ctx = canvas.getContext('2d');
/** @type {?} */
var deg = 0;
/** @type {?} */
var cx = 0;
/** @type {?} */
var cy = 0;
/** @type {?} */
var width = image.width;
/** @type {?} */
var height = image.height;
if ([5, 6, 7, 8].indexOf(exifOrientation) > -1) {
width = image.height;
height = image.width;
}
canvas.width = width;
canvas.height = height;
switch (exifOrientation) {
case 3:
case 4:
cx = -image.width;
cy = -image.height;
deg = 180;
break;
case 5:
case 6:
cy = -image.height;
deg = 90;
break;
case 7:
case 8:
cx = -image.width;
deg = 270;
break;
default:
break;
}
if ([2, 4, 5, 7].indexOf(exifOrientation) > -1) {
ctx.translate(width, 0);
ctx.scale(-1, 1);
}
ctx.rotate(deg / 180 * Math.PI);
ctx.drawImage(image, cx, cy);
/** @type {?} */
var img_1 = new Image();
img_1.width = width;
img_1.height = height;
img_1.onload = function () {
resolve(img_1);
};
img_1.src = canvas.toDataURL();
}
else {
resolve(image);
}
});
});
};
NgxPicaExifService.decorators = [
{ type: Injectable }
];
return NgxPicaExifService;
}());
export { NgxPicaExifService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBpY2EtZXhpZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmc3LXBpY2EvIiwic291cmNlcyI6WyJsaWIvbmd4LXBpY2EtZXhpZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDOzs7Ozs7OztJQU1yQixpREFBb0I7Ozs7Y0FBQyxLQUF1QjtRQUMvQyxPQUFPLElBQUksT0FBTyxDQUFtQixVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQUMsS0FBWSxFQUFDLEVBQUU7O2dCQUN6QixJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUNJOztnQkFEbEQsSUFDSSxlQUFlLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztnQkFFbEQsSUFBSSxlQUFlLEVBQUU7b0JBRWpCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO3dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7cUJBQ2xEOztvQkFFRCxJQUFNLE1BQU0sR0FBc0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FDaEM7O29CQURsQyxJQUNJLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOztvQkFFbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUl1Qjs7b0JBSmxDLElBQ0ksRUFBRSxHQUFHLENBQUMsQ0FHd0I7O29CQUpsQyxJQUVJLEVBQUUsR0FBRyxDQUFDLENBRXdCOztvQkFKbEMsSUFHSSxLQUFLLEdBQVcsS0FBSyxDQUFDLEtBQUssQ0FDRzs7b0JBSmxDLElBSUksTUFBTSxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBRWxDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQzVDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUNyQixNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztxQkFDeEI7b0JBRUQsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUV2QixRQUFRLGVBQWUsRUFBRTt3QkFDckIsS0FBSyxDQUFDLENBQUM7d0JBQ1AsS0FBSyxDQUFDOzRCQUNGLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7NEJBQ2xCLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUM7NEJBQ1YsTUFBTTt3QkFDVixLQUFLLENBQUMsQ0FBQzt3QkFDUCxLQUFLLENBQUM7NEJBQ0YsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs0QkFDbkIsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDVCxNQUFNO3dCQUNWLEtBQUssQ0FBQyxDQUFDO3dCQUNQLEtBQUssQ0FBQzs0QkFDRixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDOzRCQUNsQixHQUFHLEdBQUcsR0FBRyxDQUFDOzRCQUNWLE1BQU07d0JBQ1Y7NEJBQ0ksTUFBTTtxQkFDYjtvQkFFRCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUM1QyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDcEI7b0JBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDOztvQkFFN0IsSUFBTSxLQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFFeEIsS0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2xCLEtBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUVwQixLQUFHLENBQUMsTUFBTSxHQUFHO3dCQUNULE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQztxQkFDaEIsQ0FBQztvQkFFRixLQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDaEM7cUJBQU07b0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNsQjthQUNKLENBQUMsQ0FBQztTQUNOLENBQUMsQ0FBQzs7O2dCQTNFVixVQUFVOzs2QkFKWDs7U0FLYSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRVhJRiBmcm9tICdleGlmLWpzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4UGljYUV4aWZTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyBnZXRFeGlmT3JpZW50ZWRJbWFnZShpbWFnZTogSFRNTEltYWdlRWxlbWVudCk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgRVhJRi5nZXREYXRhKChpbWFnZSBhcyBhbnkpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRXhpZk1ldGFEYXRhID0gRVhJRi5nZXRBbGxUYWdzKGltYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgZXhpZk9yaWVudGF0aW9uID0gYWxsRXhpZk1ldGFEYXRhLk9yaWVudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4aWZPcmllbnRhdGlvbikge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghL15bMS04XSQvLnRlc3QoZXhpZk9yaWVudGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmllbnRhdGlvbiBzaG91bGQgYmUgWzEtOF0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWcgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3kgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bWJlciA9IGltYWdlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudW1iZXIgPSBpbWFnZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFs1LCA2LCA3LCA4XS5pbmRleE9mKGV4aWZPcmllbnRhdGlvbikgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBpbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBpbWFnZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpZk9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAtaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3kgPSAtaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZyA9IDE4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSA9IC1pbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVnID0gOTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAtaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVnID0gMjcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChbMiwgNCwgNSwgN10uaW5kZXhPZihleGlmT3JpZW50YXRpb24pID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUoZGVnIC8gMTgwICogTWF0aC5QSSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIGN4LCBjeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW1nLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGltZy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdfQ==