/* global Image */
/*
* Photo Editor SDK - photoeditorsdk.com
* Copyright (c) 2013-2015 9elements GmbH
*
* Released under Attribution-NonCommercial 3.0 Unported
* http://creativecommons.org/licenses/by-nc/3.0/
*
* For commercial use, please contact us at contact@9elements.com
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
// istanbul ignore next
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; Eif ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Iif (protoProps) defineProperties(Constructor.prototype, protoProps); Eif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// istanbul ignore next
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _constants = require('../constants');
var _utils = require('./utils');
var _utils2 = _interopRequireDefault(_utils);
var _vendorPromise = require('../vendor/promise');
var _vendorPromise2 = _interopRequireDefault(_vendorPromise);
var _exif = require('./exif');
var _exif2 = _interopRequireDefault(_exif);
/**
* @class
* @alias ImglyKit.ImageExporter
* @private
*/
var ImageExporter = (function () {
function ImageExporter() {
_classCallCheck(this, ImageExporter);
}
_createClass(ImageExporter, null, [{
key: 'validateSettings',
value: function validateSettings(renderType, imageFormat) {
var settings = {
renderType: renderType,
imageFormat: imageFormat
};
// Validate RenderType
if (typeof settings.renderType !== 'undefined' && settings.renderType !== null && _utils2['default'].values(_constants.RenderType).indexOf(settings.renderType) === -1) {
throw new Error('Invalid render type: ' + settings.renderType);
} else if (typeof renderType === 'undefined') {
settings.renderType = _constants.RenderType.DATAURL;
}
// Validate ImageFormat
if (typeof settings.imageFormat !== 'undefined' && settings.imageFormat !== null && _utils2['default'].values(_constants.ImageFormat).indexOf(settings.imageFormat) === -1) {
throw new Error('Invalid image format: ' + settings.imageFormat);
} else if (typeof imageFormat === 'undefined') {
settings.imageFormat = _constants.ImageFormat.PNG;
}
// Render type 'buffer' only available in node
Iif (settings.renderType === _constants.RenderType.BUFFER && typeof process === 'undefined') {
throw new Error('Render type \'buffer\' is only available when using node.js');
}
return settings;
}
/**
* Exports the image from the given canvas with the given options
* @param {ImglyKit} kit
* @param {Image} image
* @param {Canvas} canvas
* @param {ImglyKit.RenderType} renderType
* @param {ImglyKit.ImageFormat} imageFormat
* @param {Number} quality = 0.8
* @return {Promise}
*/
}, {
key: 'export',
value: function _export(kit, image, canvas, renderType, imageFormat) {
var quality = arguments.length <= 5 || arguments[5] === undefined ? 0.8 : arguments[5];
return new _vendorPromise2['default'](function (resolve, reject) {
var result = undefined;
Eif (renderType === _constants.RenderType.IMAGE || renderType === _constants.RenderType.DATAURL) {
Eif (typeof window === 'undefined') {
// Quality not supported in node environment / node-canvas
result = canvas.toDataURL(imageFormat);
} else {
result = canvas.toDataURL(imageFormat, quality);
}
// When image's `src` attribute is a jpeg data url, we can restore
// the exif information
Iif (_exif2['default'].isJPEG(image.src) && _exif2['default'].isJPEG(result)) {
var exif = kit.exif;
if (exif) {
result = exif.restoreExifTags(result);
}
}
}
if (renderType === _constants.RenderType.IMAGE) {
var outputImage = undefined;
/* istanbul ignore else */
Eif (typeof window === 'undefined') {
// Not a browser environment
var CanvasImage = require('canvas').Image;
outputImage = new CanvasImage();
} else {
outputImage = new Image();
}
outputImage.src = result;
resolve(outputImage);
} else Eif (renderType === _constants.RenderType.DATAURL) {
resolve(result);
} else if (renderType === _constants.RenderType.BUFFER) {
resolve(canvas.toBuffer());
} else if (renderType === _constants.RenderType.MSBLOB) {
resolve(canvas.msToBlob());
} else if (renderType === _constants.RenderType.BLOB) {
canvas.toBlob(function (blob) {
resolve(blob);
}, imageFormat, quality);
}
});
}
}]);
return ImageExporter;
})();
exports['default'] = ImageExporter;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL2xpYi9pbWFnZS1leHBvcnRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBVXdDLGNBQWM7O3FCQUNwQyxTQUFTOzs7OzZCQUNQLG1CQUFtQjs7OztvQkFDdEIsUUFBUTs7Ozs7Ozs7OztJQU9uQixhQUFhO1dBQWIsYUFBYTswQkFBYixhQUFhOzs7ZUFBYixhQUFhOztXQUVPLDBCQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUU7QUFDaEQsVUFBSSxRQUFRLEdBQUc7QUFDYixrQkFBVSxFQUFFLFVBQVU7QUFDdEIsbUJBQVcsRUFBRSxXQUFXO09BQ3pCLENBQUE7OztBQUdELFVBQUksQUFBQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUMzRSxtQkFBTSxNQUFNLHVCQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoRSxjQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtPQUMvRCxNQUFNLElBQUksT0FBTyxVQUFVLEtBQUssV0FBVyxFQUFFO0FBQzVDLGdCQUFRLENBQUMsVUFBVSxHQUFHLHNCQUFXLE9BQU8sQ0FBQTtPQUN6Qzs7O0FBR0QsVUFBSSxBQUFDLE9BQU8sUUFBUSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQzdFLG1CQUFNLE1BQU0sd0JBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLGNBQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO09BQ2pFLE1BQU0sSUFBSSxPQUFPLFdBQVcsS0FBSyxXQUFXLEVBQUU7QUFDN0MsZ0JBQVEsQ0FBQyxXQUFXLEdBQUcsdUJBQVksR0FBRyxDQUFBO09BQ3ZDOzs7QUFHRCxVQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssc0JBQVcsTUFBTSxJQUN6QyxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUU7QUFDbEMsY0FBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFBO09BQy9FOztBQUVELGFBQU8sUUFBUSxDQUFBO0tBQ2hCOzs7Ozs7Ozs7Ozs7OztXQVlhLGlCQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWU7VUFBYixPQUFPLHlEQUFDLEdBQUc7O0FBQ3JFLGFBQU8sK0JBQVksVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLO0FBQ3RDLFlBQUksTUFBTSxZQUFBLENBQUE7QUFDVixZQUFJLFVBQVUsS0FBSyxzQkFBVyxLQUFLLElBQy9CLFVBQVUsS0FBSyxzQkFBVyxPQUFPLEVBQUU7QUFDckMsY0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7O0FBRWpDLGtCQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtXQUN2QyxNQUFNO0FBQ0wsa0JBQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtXQUNoRDs7OztBQUlELGNBQUksa0JBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksR0FBSyxHQUFHLENBQVosSUFBSTs7QUFDWixnQkFBSSxJQUFJLEVBQUU7QUFDUixvQkFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDdEM7V0FDRjtTQUNGOztBQUVELFlBQUksVUFBVSxLQUFLLHNCQUFXLEtBQUssRUFBRTtBQUNuQyxjQUFJLFdBQVcsWUFBQSxDQUFBOzs7QUFHZixjQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTs7QUFFakMsZ0JBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDekMsdUJBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1dBQ2hDLE1BQU07QUFDTCx1QkFBVyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7V0FDMUI7O0FBRUQscUJBQVcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFBO0FBQ3hCLGlCQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDckIsTUFBTSxJQUFJLFVBQVUsS0FBSyxzQkFBVyxPQUFPLEVBQUU7QUFDNUMsaUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNoQixNQUFNLElBQUksVUFBVSxLQUFLLHNCQUFXLE1BQU0sRUFBRTtBQUMzQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQzNCLE1BQU0sSUFBSSxVQUFVLEtBQUssc0JBQVcsTUFBTSxFQUFFO0FBQzNDLGlCQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7U0FDM0IsTUFBTSxJQUFJLFVBQVUsS0FBSyxzQkFBVyxJQUFJLEVBQUU7QUFDekMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUs7QUFDdEIsbUJBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtXQUNkLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQ3pCO09BQ0YsQ0FBQyxDQUFBO0tBQ0g7OztTQTNGRyxhQUFhOzs7cUJBOEZKLGFBQWEiLCJmaWxlIjoiL3Jvb3QvU0VSVkVSL2ltZ2x5LXNkay1odG1sNS9zcmMvanMvbGliL2ltYWdlLWV4cG9ydGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIEltYWdlICovXG4vKlxuICogUGhvdG8gRWRpdG9yIFNESyAtIHBob3RvZWRpdG9yc2RrLmNvbVxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgOWVsZW1lbnRzIEdtYkhcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDMuMCBVbnBvcnRlZFxuICogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvMy4wL1xuICpcbiAqIEZvciBjb21tZXJjaWFsIHVzZSwgcGxlYXNlIGNvbnRhY3QgdXMgYXQgY29udGFjdEA5ZWxlbWVudHMuY29tXG4gKi9cbmltcG9ydCB7IFJlbmRlclR5cGUsIEltYWdlRm9ybWF0IH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuLi92ZW5kb3IvcHJvbWlzZSdcbmltcG9ydCBFeGlmIGZyb20gJy4vZXhpZidcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBhbGlhcyBJbWdseUtpdC5JbWFnZUV4cG9ydGVyXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBJbWFnZUV4cG9ydGVyIHtcblxuICBzdGF0aWMgdmFsaWRhdGVTZXR0aW5ncyAocmVuZGVyVHlwZSwgaW1hZ2VGb3JtYXQpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSB7XG4gICAgICByZW5kZXJUeXBlOiByZW5kZXJUeXBlLFxuICAgICAgaW1hZ2VGb3JtYXQ6IGltYWdlRm9ybWF0XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgUmVuZGVyVHlwZVxuICAgIGlmICgodHlwZW9mIHNldHRpbmdzLnJlbmRlclR5cGUgIT09ICd1bmRlZmluZWQnICYmIHNldHRpbmdzLnJlbmRlclR5cGUgIT09IG51bGwpICYmXG4gICAgICAgIFV0aWxzLnZhbHVlcyhSZW5kZXJUeXBlKS5pbmRleE9mKHNldHRpbmdzLnJlbmRlclR5cGUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlbmRlciB0eXBlOiAnICsgc2V0dGluZ3MucmVuZGVyVHlwZSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXJUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc2V0dGluZ3MucmVuZGVyVHlwZSA9IFJlbmRlclR5cGUuREFUQVVSTFxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIEltYWdlRm9ybWF0XG4gICAgaWYgKCh0eXBlb2Ygc2V0dGluZ3MuaW1hZ2VGb3JtYXQgIT09ICd1bmRlZmluZWQnICYmIHNldHRpbmdzLmltYWdlRm9ybWF0ICE9PSBudWxsKSAmJlxuICAgICAgICBVdGlscy52YWx1ZXMoSW1hZ2VGb3JtYXQpLmluZGV4T2Yoc2V0dGluZ3MuaW1hZ2VGb3JtYXQpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGltYWdlIGZvcm1hdDogJyArIHNldHRpbmdzLmltYWdlRm9ybWF0KVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGltYWdlRm9ybWF0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc2V0dGluZ3MuaW1hZ2VGb3JtYXQgPSBJbWFnZUZvcm1hdC5QTkdcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgdHlwZSAnYnVmZmVyJyBvbmx5IGF2YWlsYWJsZSBpbiBub2RlXG4gICAgaWYgKHNldHRpbmdzLnJlbmRlclR5cGUgPT09IFJlbmRlclR5cGUuQlVGRkVSICYmXG4gICAgICAgIHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW5kZXIgdHlwZSBcXCdidWZmZXJcXCcgaXMgb25seSBhdmFpbGFibGUgd2hlbiB1c2luZyBub2RlLmpzJylcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBpbWFnZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xuICAgKiBAcGFyYW0gIHtJbWdseUtpdH0ga2l0XG4gICAqIEBwYXJhbSAge0ltYWdlfSBpbWFnZVxuICAgKiBAcGFyYW0gIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0gIHtJbWdseUtpdC5SZW5kZXJUeXBlfSByZW5kZXJUeXBlXG4gICAqIEBwYXJhbSAge0ltZ2x5S2l0LkltYWdlRm9ybWF0fSBpbWFnZUZvcm1hdFxuICAgKiBAcGFyYW0gIHtOdW1iZXJ9IHF1YWxpdHkgPSAwLjhcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIHN0YXRpYyBleHBvcnQgKGtpdCwgaW1hZ2UsIGNhbnZhcywgcmVuZGVyVHlwZSwgaW1hZ2VGb3JtYXQsIHF1YWxpdHk9MC44KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXN1bHRcbiAgICAgIGlmIChyZW5kZXJUeXBlID09PSBSZW5kZXJUeXBlLklNQUdFIHx8XG4gICAgICAgICAgcmVuZGVyVHlwZSA9PT0gUmVuZGVyVHlwZS5EQVRBVVJMKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIFF1YWxpdHkgbm90IHN1cHBvcnRlZCBpbiBub2RlIGVudmlyb25tZW50IC8gbm9kZS1jYW52YXNcbiAgICAgICAgICByZXN1bHQgPSBjYW52YXMudG9EYXRhVVJMKGltYWdlRm9ybWF0KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGNhbnZhcy50b0RhdGFVUkwoaW1hZ2VGb3JtYXQsIHF1YWxpdHkpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuIGltYWdlJ3MgYHNyY2AgYXR0cmlidXRlIGlzIGEganBlZyBkYXRhIHVybCwgd2UgY2FuIHJlc3RvcmVcbiAgICAgICAgLy8gdGhlIGV4aWYgaW5mb3JtYXRpb25cbiAgICAgICAgaWYgKEV4aWYuaXNKUEVHKGltYWdlLnNyYykgJiYgRXhpZi5pc0pQRUcocmVzdWx0KSkge1xuICAgICAgICAgIGNvbnN0IHsgZXhpZiB9ID0ga2l0XG4gICAgICAgICAgaWYgKGV4aWYpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGV4aWYucmVzdG9yZUV4aWZUYWdzKHJlc3VsdClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJlbmRlclR5cGUgPT09IFJlbmRlclR5cGUuSU1BR0UpIHtcbiAgICAgICAgbGV0IG91dHB1dEltYWdlXG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgICovXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE5vdCBhIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAgICAgICB2YXIgQ2FudmFzSW1hZ2UgPSByZXF1aXJlKCdjYW52YXMnKS5JbWFnZVxuICAgICAgICAgIG91dHB1dEltYWdlID0gbmV3IENhbnZhc0ltYWdlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRJbWFnZSA9IG5ldyBJbWFnZSgpXG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXRJbWFnZS5zcmMgPSByZXN1bHRcbiAgICAgICAgcmVzb2x2ZShvdXRwdXRJbWFnZSlcbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyVHlwZSA9PT0gUmVuZGVyVHlwZS5EQVRBVVJMKSB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfSBlbHNlIGlmIChyZW5kZXJUeXBlID09PSBSZW5kZXJUeXBlLkJVRkZFUikge1xuICAgICAgICByZXNvbHZlKGNhbnZhcy50b0J1ZmZlcigpKVxuICAgICAgfSBlbHNlIGlmIChyZW5kZXJUeXBlID09PSBSZW5kZXJUeXBlLk1TQkxPQikge1xuICAgICAgICByZXNvbHZlKGNhbnZhcy5tc1RvQmxvYigpKVxuICAgICAgfSBlbHNlIGlmIChyZW5kZXJUeXBlID09PSBSZW5kZXJUeXBlLkJMT0IpIHtcbiAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xuICAgICAgICAgIHJlc29sdmUoYmxvYilcbiAgICAgICAgfSwgaW1hZ2VGb3JtYXQsIHF1YWxpdHkpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUV4cG9ydGVyXG4iXX0= |