| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930 | 
							- /*!
 
-  * Compressor.js v1.0.5
 
-  * https://fengyuanchen.github.io/compressorjs
 
-  *
 
-  * Copyright 2018-present Chen Fengyuan
 
-  * Released under the MIT license
 
-  *
 
-  * Date: 2019-01-23T10:53:08.724Z
 
-  */
 
- (function (global, factory) {
 
-   typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
 
-   typeof define === 'function' && define.amd ? define(factory) :
 
-   (global = global || self, global.Compressor = factory());
 
- }(this, function () { 'use strict';
 
-   function _classCallCheck(instance, Constructor) {
 
-     if (!(instance instanceof Constructor)) {
 
-       throw new TypeError("Cannot call a class as a 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;
 
-       if ("value" in descriptor) descriptor.writable = true;
 
-       Object.defineProperty(target, descriptor.key, descriptor);
 
-     }
 
-   }
 
-   function _createClass(Constructor, protoProps, staticProps) {
 
-     if (protoProps) _defineProperties(Constructor.prototype, protoProps);
 
-     if (staticProps) _defineProperties(Constructor, staticProps);
 
-     return Constructor;
 
-   }
 
-   function _defineProperty(obj, key, value) {
 
-     if (key in obj) {
 
-       Object.defineProperty(obj, key, {
 
-         value: value,
 
-         enumerable: true,
 
-         configurable: true,
 
-         writable: true
 
-       });
 
-     } else {
 
-       obj[key] = value;
 
-     }
 
-     return obj;
 
-   }
 
-   function _extends() {
 
-     _extends = Object.assign || function (target) {
 
-       for (var i = 1; i < arguments.length; i++) {
 
-         var source = arguments[i];
 
-         for (var key in source) {
 
-           if (Object.prototype.hasOwnProperty.call(source, key)) {
 
-             target[key] = source[key];
 
-           }
 
-         }
 
-       }
 
-       return target;
 
-     };
 
-     return _extends.apply(this, arguments);
 
-   }
 
-   function _objectSpread(target) {
 
-     for (var i = 1; i < arguments.length; i++) {
 
-       var source = arguments[i] != null ? arguments[i] : {};
 
-       var ownKeys = Object.keys(source);
 
-       if (typeof Object.getOwnPropertySymbols === 'function') {
 
-         ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
 
-           return Object.getOwnPropertyDescriptor(source, sym).enumerable;
 
-         }));
 
-       }
 
-       ownKeys.forEach(function (key) {
 
-         _defineProperty(target, key, source[key]);
 
-       });
 
-     }
 
-     return target;
 
-   }
 
-   function createCommonjsModule(fn, module) {
 
-   	return module = { exports: {} }, fn(module, module.exports), module.exports;
 
-   }
 
-   var canvasToBlob = createCommonjsModule(function (module) {
 
-     if (typeof window === 'undefined') {
 
-       return;
 
-     }
 
-     (function (window) {
 
-       var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;
 
-       var hasBlobConstructor = window.Blob && function () {
 
-         try {
 
-           return Boolean(new Blob());
 
-         } catch (e) {
 
-           return false;
 
-         }
 
-       }();
 
-       var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {
 
-         try {
 
-           return new Blob([new Uint8Array(100)]).size === 100;
 
-         } catch (e) {
 
-           return false;
 
-         }
 
-       }();
 
-       var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
 
-       var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;
 
-       var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {
 
-         var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb; // Parse the dataURI components as per RFC 2397
 
-         matches = dataURI.match(dataURIPattern);
 
-         if (!matches) {
 
-           throw new Error('invalid data URI');
 
-         } // Default to text/plain;charset=US-ASCII
 
-         mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');
 
-         isBase64 = !!matches[4];
 
-         dataString = dataURI.slice(matches[0].length);
 
-         if (isBase64) {
 
-           // Convert base64 to raw binary data held in a string:
 
-           byteString = atob(dataString);
 
-         } else {
 
-           // Convert base64/URLEncoded data component to raw binary:
 
-           byteString = decodeURIComponent(dataString);
 
-         } // Write the bytes of the string to an ArrayBuffer:
 
-         arrayBuffer = new ArrayBuffer(byteString.length);
 
-         intArray = new Uint8Array(arrayBuffer);
 
-         for (i = 0; i < byteString.length; i += 1) {
 
-           intArray[i] = byteString.charCodeAt(i);
 
-         } // Write the ArrayBuffer (or ArrayBufferView) to a blob:
 
-         if (hasBlobConstructor) {
 
-           return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {
 
-             type: mediaType
 
-           });
 
-         }
 
-         bb = new BlobBuilder();
 
-         bb.append(arrayBuffer);
 
-         return bb.getBlob(mediaType);
 
-       };
 
-       if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
 
-         if (CanvasPrototype.mozGetAsFile) {
 
-           CanvasPrototype.toBlob = function (callback, type, quality) {
 
-             var self = this;
 
-             setTimeout(function () {
 
-               if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
 
-                 callback(dataURLtoBlob(self.toDataURL(type, quality)));
 
-               } else {
 
-                 callback(self.mozGetAsFile('blob', type));
 
-               }
 
-             });
 
-           };
 
-         } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
 
-           CanvasPrototype.toBlob = function (callback, type, quality) {
 
-             var self = this;
 
-             setTimeout(function () {
 
-               callback(dataURLtoBlob(self.toDataURL(type, quality)));
 
-             });
 
-           };
 
-         }
 
-       }
 
-       if (module.exports) {
 
-         module.exports = dataURLtoBlob;
 
-       } else {
 
-         window.dataURLtoBlob = dataURLtoBlob;
 
-       }
 
-     })(window);
 
-   });
 
-   var isBlob = function isBlob(input) {
 
-     if (typeof Blob === 'undefined') {
 
-       return false;
 
-     }
 
-     return input instanceof Blob || Object.prototype.toString.call(input) === '[object Blob]';
 
-   };
 
-   var DEFAULTS = {
 
-     /**
 
-      * Indicates if output the original image instead of the compressed one
 
-      * when the size of the compressed image is greater than the original one's
 
-      * @type {boolean}
 
-      */
 
-     strict: true,
 
-     /**
 
-      * Indicates if read the image's Exif Orientation information,
 
-      * and then rotate or flip the image automatically.
 
-      * @type {boolean}
 
-      */
 
-     checkOrientation: true,
 
-     /**
 
-      * The max width of the output image.
 
-      * @type {number}
 
-      */
 
-     maxWidth: Infinity,
 
-     /**
 
-      * The max height of the output image.
 
-      * @type {number}
 
-      */
 
-     maxHeight: Infinity,
 
-     /**
 
-      * The min width of the output image.
 
-      * @type {number}
 
-      */
 
-     minWidth: 0,
 
-     /**
 
-      * The min height of the output image.
 
-      * @type {number}
 
-      */
 
-     minHeight: 0,
 
-     /**
 
-      * The width of the output image.
 
-      * If not specified, the natural width of the source image will be used.
 
-      * @type {number}
 
-      */
 
-     width: undefined,
 
-     /**
 
-      * The height of the output image.
 
-      * If not specified, the natural height of the source image will be used.
 
-      * @type {number}
 
-      */
 
-     height: undefined,
 
-     /**
 
-      * The quality of the output image.
 
-      * It must be a number between `0` and `1`,
 
-      * and only available for `image/jpeg` and `image/webp` images.
 
-      * Check out {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob canvas.toBlob}.
 
-      * @type {number}
 
-      */
 
-     quality: 0.8,
 
-     /**
 
-      * The mime type of the output image.
 
-      * By default, the original mime type of the source image file will be used.
 
-      * @type {string}
 
-      */
 
-     mimeType: 'auto',
 
-     /**
 
-      * PNG files over this value (5 MB by default) will be converted to JPEGs.
 
-      * To disable this, just set the value to `Infinity`.
 
-      * @type {number}
 
-      */
 
-     convertSize: 5000000,
 
-     /**
 
-      * The hook function to execute before draw the image into the canvas for compression.
 
-      * @type {Function}
 
-      * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.
 
-      * @param {HTMLCanvasElement} canvas - The canvas for compression.
 
-      * @example
 
-      * function (context, canvas) {
 
-      *   context.fillStyle = '#fff';
 
-      * }
 
-      */
 
-     beforeDraw: null,
 
-     /**
 
-      * The hook function to execute after drew the image into the canvas for compression.
 
-      * @type {Function}
 
-      * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.
 
-      * @param {HTMLCanvasElement} canvas - The canvas for compression.
 
-      * @example
 
-      * function (context, canvas) {
 
-      *   context.filter = 'grayscale(100%)';
 
-      * }
 
-      */
 
-     drew: null,
 
-     /**
 
-      * The hook function to execute when success to compress the image.
 
-      * @type {Function}
 
-      * @param {File} file - The compressed image File object.
 
-      * @example
 
-      * function (file) {
 
-      *   console.log(file);
 
-      * }
 
-      */
 
-     success: null,
 
-     /**
 
-      * The hook function to execute when fail to compress the image.
 
-      * @type {Function}
 
-      * @param {Error} err - An Error object.
 
-      * @example
 
-      * function (err) {
 
-      *   console.log(err.message);
 
-      * }
 
-      */
 
-     error: null
 
-   };
 
-   var IN_BROWSER = typeof window !== 'undefined';
 
-   var WINDOW = IN_BROWSER ? window : {};
 
-   var slice = Array.prototype.slice;
 
-   /**
 
-    * Convert array-like or iterable object to an array.
 
-    * @param {*} value - The value to convert.
 
-    * @returns {Array} Returns a new array.
 
-    */
 
-   function toArray(value) {
 
-     return Array.from ? Array.from(value) : slice.call(value);
 
-   }
 
-   var REGEXP_IMAGE_TYPE = /^image\/.+$/;
 
-   /**
 
-    * Check if the given value is a mime type of image.
 
-    * @param {*} value - The value to check.
 
-    * @returns {boolean} Returns `true` if the given is a mime type of image, else `false`.
 
-    */
 
-   function isImageType(value) {
 
-     return REGEXP_IMAGE_TYPE.test(value);
 
-   }
 
-   /**
 
-    * Convert image type to extension.
 
-    * @param {string} value - The image type to convert.
 
-    * @returns {boolean} Returns the image extension.
 
-    */
 
-   function imageTypeToExtension(value) {
 
-     var extension = isImageType(value) ? value.substr(6) : '';
 
-     if (extension === 'jpeg') {
 
-       extension = 'jpg';
 
-     }
 
-     return ".".concat(extension);
 
-   }
 
-   var fromCharCode = String.fromCharCode;
 
-   /**
 
-    * Get string from char code in data view.
 
-    * @param {DataView} dataView - The data view for read.
 
-    * @param {number} start - The start index.
 
-    * @param {number} length - The read length.
 
-    * @returns {string} The read result.
 
-    */
 
-   function getStringFromCharCode(dataView, start, length) {
 
-     var str = '';
 
-     var i;
 
-     length += start;
 
-     for (i = start; i < length; i += 1) {
 
-       str += fromCharCode(dataView.getUint8(i));
 
-     }
 
-     return str;
 
-   }
 
-   var btoa = WINDOW.btoa;
 
-   /**
 
-    * Transform array buffer to Data URL.
 
-    * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.
 
-    * @param {string} mimeType - The mime type of the Data URL.
 
-    * @returns {string} The result Data URL.
 
-    */
 
-   function arrayBufferToDataURL(arrayBuffer, mimeType) {
 
-     var chunks = [];
 
-     var chunkSize = 8192;
 
-     var uint8 = new Uint8Array(arrayBuffer);
 
-     while (uint8.length > 0) {
 
-       // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9
 
-       // eslint-disable-next-line prefer-spread
 
-       chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));
 
-       uint8 = uint8.subarray(chunkSize);
 
-     }
 
-     return "data:".concat(mimeType, ";base64,").concat(btoa(chunks.join('')));
 
-   }
 
-   /**
 
-    * Get orientation value from given array buffer.
 
-    * @param {ArrayBuffer} arrayBuffer - The array buffer to read.
 
-    * @returns {number} The read orientation value.
 
-    */
 
-   function resetAndGetOrientation(arrayBuffer) {
 
-     var dataView = new DataView(arrayBuffer);
 
-     var orientation; // Ignores range error when the image does not have correct Exif information
 
-     try {
 
-       var littleEndian;
 
-       var app1Start;
 
-       var ifdStart; // Only handle JPEG image (start by 0xFFD8)
 
-       if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {
 
-         var length = dataView.byteLength;
 
-         var offset = 2;
 
-         while (offset + 1 < length) {
 
-           if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {
 
-             app1Start = offset;
 
-             break;
 
-           }
 
-           offset += 1;
 
-         }
 
-       }
 
-       if (app1Start) {
 
-         var exifIDCode = app1Start + 4;
 
-         var tiffOffset = app1Start + 10;
 
-         if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {
 
-           var endianness = dataView.getUint16(tiffOffset);
 
-           littleEndian = endianness === 0x4949;
 
-           if (littleEndian || endianness === 0x4D4D
 
-           /* bigEndian */
 
-           ) {
 
-               if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {
 
-                 var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);
 
-                 if (firstIFDOffset >= 0x00000008) {
 
-                   ifdStart = tiffOffset + firstIFDOffset;
 
-                 }
 
-               }
 
-             }
 
-         }
 
-       }
 
-       if (ifdStart) {
 
-         var _length = dataView.getUint16(ifdStart, littleEndian);
 
-         var _offset;
 
-         var i;
 
-         for (i = 0; i < _length; i += 1) {
 
-           _offset = ifdStart + i * 12 + 2;
 
-           if (dataView.getUint16(_offset, littleEndian) === 0x0112
 
-           /* Orientation */
 
-           ) {
 
-               // 8 is the offset of the current tag's value
 
-               _offset += 8; // Get the original orientation value
 
-               orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value
 
-               dataView.setUint16(_offset, 1, littleEndian);
 
-               break;
 
-             }
 
-         }
 
-       }
 
-     } catch (e) {
 
-       orientation = 1;
 
-     }
 
-     return orientation;
 
-   }
 
-   /**
 
-    * Parse Exif Orientation value.
 
-    * @param {number} orientation - The orientation to parse.
 
-    * @returns {Object} The parsed result.
 
-    */
 
-   function parseOrientation(orientation) {
 
-     var rotate = 0;
 
-     var scaleX = 1;
 
-     var scaleY = 1;
 
-     switch (orientation) {
 
-       // Flip horizontal
 
-       case 2:
 
-         scaleX = -1;
 
-         break;
 
-       // Rotate left 180°
 
-       case 3:
 
-         rotate = -180;
 
-         break;
 
-       // Flip vertical
 
-       case 4:
 
-         scaleY = -1;
 
-         break;
 
-       // Flip vertical and rotate right 90°
 
-       case 5:
 
-         rotate = 90;
 
-         scaleY = -1;
 
-         break;
 
-       // Rotate right 90°
 
-       case 6:
 
-         rotate = 90;
 
-         break;
 
-       // Flip horizontal and rotate right 90°
 
-       case 7:
 
-         rotate = 90;
 
-         scaleX = -1;
 
-         break;
 
-       // Rotate left 90°
 
-       case 8:
 
-         rotate = -90;
 
-         break;
 
-       default:
 
-     }
 
-     return {
 
-       rotate: rotate,
 
-       scaleX: scaleX,
 
-       scaleY: scaleY
 
-     };
 
-   }
 
-   var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/;
 
-   /**
 
-    * Normalize decimal number.
 
-    * Check out {@link http://0.30000000000000004.com/}
 
-    * @param {number} value - The value to normalize.
 
-    * @param {number} [times=100000000000] - The times for normalizing.
 
-    * @returns {number} Returns the normalized number.
 
-    */
 
-   function normalizeDecimalNumber(value) {
 
-     var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;
 
-     return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;
 
-   }
 
-   var ArrayBuffer$1 = WINDOW.ArrayBuffer,
 
-       FileReader = WINDOW.FileReader;
 
-   var URL = WINDOW.URL || WINDOW.webkitURL;
 
-   var REGEXP_EXTENSION = /\.\w+$/;
 
-   var AnotherCompressor = WINDOW.Compressor;
 
-   /**
 
-    * Creates a new image compressor.
 
-    * @class
 
-    */
 
-   var Compressor =
 
-   /*#__PURE__*/
 
-   function () {
 
-     /**
 
-      * The constructor of Compressor.
 
-      * @param {File|Blob} file - The target image file for compressing.
 
-      * @param {Object} [options] - The options for compressing.
 
-      */
 
-     function Compressor(file, options) {
 
-       _classCallCheck(this, Compressor);
 
-       this.file = file;
 
-       this.image = new Image();
 
-       this.options = _objectSpread({}, DEFAULTS, options);
 
-       this.aborted = false;
 
-       this.result = null;
 
-       this.init();
 
-     }
 
-     _createClass(Compressor, [{
 
-       key: "init",
 
-       value: function init() {
 
-         var _this = this;
 
-         var file = this.file,
 
-             options = this.options;
 
-         if (!isBlob(file)) {
 
-           this.fail(new Error('The first argument must be a File or Blob object.'));
 
-           return;
 
-         }
 
-         var mimeType = file.type;
 
-         if (!isImageType(mimeType)) {
 
-           this.fail(new Error('The first argument must be an image File or Blob object.'));
 
-           return;
 
-         }
 
-         if (!URL || !FileReader) {
 
-           this.fail(new Error('The current browser does not support image compression.'));
 
-           return;
 
-         }
 
-         if (!ArrayBuffer$1) {
 
-           options.checkOrientation = false;
 
-         }
 
-         if (URL && !options.checkOrientation) {
 
-           this.load({
 
-             url: URL.createObjectURL(file)
 
-           });
 
-         } else {
 
-           var reader = new FileReader();
 
-           var checkOrientation = options.checkOrientation && mimeType === 'image/jpeg';
 
-           this.reader = reader;
 
-           reader.onload = function (_ref) {
 
-             var target = _ref.target;
 
-             var result = target.result;
 
-             var data = {};
 
-             if (checkOrientation) {
 
-               // Reset the orientation value to its default value 1
 
-               // as some iOS browsers will render image with its orientation
 
-               var orientation = resetAndGetOrientation(result);
 
-               if (orientation > 1 || !URL) {
 
-                 // Generate a new URL which has the default orientation value
 
-                 data.url = arrayBufferToDataURL(result, mimeType);
 
-                 if (orientation > 1) {
 
-                   _extends(data, parseOrientation(orientation));
 
-                 }
 
-               } else {
 
-                 data.url = URL.createObjectURL(file);
 
-               }
 
-             } else {
 
-               data.url = result;
 
-             }
 
-             _this.load(data);
 
-           };
 
-           reader.onabort = function () {
 
-             _this.fail(new Error('Aborted to read the image with FileReader.'));
 
-           };
 
-           reader.onerror = function () {
 
-             _this.fail(new Error('Failed to read the image with FileReader.'));
 
-           };
 
-           reader.onloadend = function () {
 
-             _this.reader = null;
 
-           };
 
-           if (checkOrientation) {
 
-             reader.readAsArrayBuffer(file);
 
-           } else {
 
-             reader.readAsDataURL(file);
 
-           }
 
-         }
 
-       }
 
-     }, {
 
-       key: "load",
 
-       value: function load(data) {
 
-         var _this2 = this;
 
-         var file = this.file,
 
-             image = this.image;
 
-         image.onload = function () {
 
-           _this2.draw(_objectSpread({}, data, {
 
-             naturalWidth: image.naturalWidth,
 
-             naturalHeight: image.naturalHeight
 
-           }));
 
-         };
 
-         image.onabort = function () {
 
-           _this2.fail(new Error('Aborted to load the image.'));
 
-         };
 
-         image.onerror = function () {
 
-           _this2.fail(new Error('Failed to load the image.'));
 
-         };
 
-         image.alt = file.name;
 
-         image.src = data.url;
 
-       }
 
-     }, {
 
-       key: "draw",
 
-       value: function draw(_ref2) {
 
-         var _this3 = this;
 
-         var naturalWidth = _ref2.naturalWidth,
 
-             naturalHeight = _ref2.naturalHeight,
 
-             _ref2$rotate = _ref2.rotate,
 
-             rotate = _ref2$rotate === void 0 ? 0 : _ref2$rotate,
 
-             _ref2$scaleX = _ref2.scaleX,
 
-             scaleX = _ref2$scaleX === void 0 ? 1 : _ref2$scaleX,
 
-             _ref2$scaleY = _ref2.scaleY,
 
-             scaleY = _ref2$scaleY === void 0 ? 1 : _ref2$scaleY;
 
-         var file = this.file,
 
-             image = this.image,
 
-             options = this.options;
 
-         var canvas = document.createElement('canvas');
 
-         var context = canvas.getContext('2d');
 
-         var aspectRatio = naturalWidth / naturalHeight;
 
-         var is90DegreesRotated = Math.abs(rotate) % 180 === 90;
 
-         var maxWidth = Math.max(options.maxWidth, 0) || Infinity;
 
-         var maxHeight = Math.max(options.maxHeight, 0) || Infinity;
 
-         var minWidth = Math.max(options.minWidth, 0) || 0;
 
-         var minHeight = Math.max(options.minHeight, 0) || 0;
 
-         var width = Math.max(options.width, 0) || naturalWidth;
 
-         var height = Math.max(options.height, 0) || naturalHeight;
 
-         if (is90DegreesRotated) {
 
-           var _ref3 = [maxHeight, maxWidth];
 
-           maxWidth = _ref3[0];
 
-           maxHeight = _ref3[1];
 
-           var _ref4 = [minHeight, minWidth];
 
-           minWidth = _ref4[0];
 
-           minHeight = _ref4[1];
 
-           var _ref5 = [height, width];
 
-           width = _ref5[0];
 
-           height = _ref5[1];
 
-         }
 
-         if (maxWidth < Infinity && maxHeight < Infinity) {
 
-           if (maxHeight * aspectRatio > maxWidth) {
 
-             maxHeight = maxWidth / aspectRatio;
 
-           } else {
 
-             maxWidth = maxHeight * aspectRatio;
 
-           }
 
-         } else if (maxWidth < Infinity) {
 
-           maxHeight = maxWidth / aspectRatio;
 
-         } else if (maxHeight < Infinity) {
 
-           maxWidth = maxHeight * aspectRatio;
 
-         }
 
-         if (minWidth > 0 && minHeight > 0) {
 
-           if (minHeight * aspectRatio > minWidth) {
 
-             minHeight = minWidth / aspectRatio;
 
-           } else {
 
-             minWidth = minHeight * aspectRatio;
 
-           }
 
-         } else if (minWidth > 0) {
 
-           minHeight = minWidth / aspectRatio;
 
-         } else if (minHeight > 0) {
 
-           minWidth = minHeight * aspectRatio;
 
-         }
 
-         if (height * aspectRatio > width) {
 
-           height = width / aspectRatio;
 
-         } else {
 
-           width = height * aspectRatio;
 
-         }
 
-         width = Math.floor(normalizeDecimalNumber(Math.min(Math.max(width, minWidth), maxWidth)));
 
-         height = Math.floor(normalizeDecimalNumber(Math.min(Math.max(height, minHeight), maxHeight)));
 
-         var destX = -width / 2;
 
-         var destY = -height / 2;
 
-         var destWidth = width;
 
-         var destHeight = height;
 
-         if (is90DegreesRotated) {
 
-           var _ref6 = [height, width];
 
-           width = _ref6[0];
 
-           height = _ref6[1];
 
-         }
 
-         canvas.width = width;
 
-         canvas.height = height;
 
-         if (!isImageType(options.mimeType)) {
 
-           options.mimeType = file.type;
 
-         }
 
-         var fillStyle = 'transparent'; // Converts PNG files over the `convertSize` to JPEGs.
 
-         if (file.size > options.convertSize && options.mimeType === 'image/png') {
 
-           fillStyle = '#fff';
 
-           options.mimeType = 'image/jpeg';
 
-         } // Override the default fill color (#000, black)
 
-         context.fillStyle = fillStyle;
 
-         context.fillRect(0, 0, width, height);
 
-         if (options.beforeDraw) {
 
-           options.beforeDraw.call(this, context, canvas);
 
-         }
 
-         if (this.aborted) {
 
-           return;
 
-         }
 
-         context.save();
 
-         context.translate(width / 2, height / 2);
 
-         context.rotate(rotate * Math.PI / 180);
 
-         context.scale(scaleX, scaleY);
 
-         context.drawImage(image, destX, destY, destWidth, destHeight);
 
-         context.restore();
 
-         if (options.drew) {
 
-           options.drew.call(this, context, canvas);
 
-         }
 
-         if (this.aborted) {
 
-           return;
 
-         }
 
-         var done = function done(result) {
 
-           if (!_this3.aborted) {
 
-             _this3.done({
 
-               naturalWidth: naturalWidth,
 
-               naturalHeight: naturalHeight,
 
-               result: result
 
-             });
 
-           }
 
-         };
 
-         if (canvas.toBlob) {
 
-           canvas.toBlob(done, options.mimeType, options.quality);
 
-         } else {
 
-           done(canvasToBlob(canvas.toDataURL(options.mimeType, options.quality)));
 
-         }
 
-       }
 
-     }, {
 
-       key: "done",
 
-       value: function done(_ref7) {
 
-         var naturalWidth = _ref7.naturalWidth,
 
-             naturalHeight = _ref7.naturalHeight,
 
-             result = _ref7.result;
 
-         var file = this.file,
 
-             image = this.image,
 
-             options = this.options;
 
-         if (URL && !options.checkOrientation) {
 
-           URL.revokeObjectURL(image.src);
 
-         }
 
-         if (result) {
 
-           // Returns original file if the result is greater than it and without size related options
 
-           if (options.strict && result.size > file.size && options.mimeType === file.type && !(options.width > naturalWidth || options.height > naturalHeight || options.minWidth > naturalWidth || options.minHeight > naturalHeight)) {
 
-             result = file;
 
-           } else {
 
-             var date = new Date();
 
-             result.lastModified = date.getTime();
 
-             result.lastModifiedDate = date;
 
-             result.name = file.name; // Convert the extension to match its type
 
-             if (result.name && result.type !== file.type) {
 
-               result.name = result.name.replace(REGEXP_EXTENSION, imageTypeToExtension(result.type));
 
-             }
 
-           }
 
-         } else {
 
-           // Returns original file if the result is null in some cases.
 
-           result = file;
 
-         }
 
-         this.result = result;
 
-         if (options.success) {
 
-           options.success.call(this, result);
 
-         }
 
-       }
 
-     }, {
 
-       key: "fail",
 
-       value: function fail(err) {
 
-         var options = this.options;
 
-         if (options.error) {
 
-           options.error.call(this, err);
 
-         } else {
 
-           throw err;
 
-         }
 
-       }
 
-     }, {
 
-       key: "abort",
 
-       value: function abort() {
 
-         if (!this.aborted) {
 
-           this.aborted = true;
 
-           if (this.reader) {
 
-             this.reader.abort();
 
-           } else if (!this.image.complete) {
 
-             this.image.onload = null;
 
-             this.image.onabort();
 
-           } else {
 
-             this.fail(new Error('The compression process has been aborted.'));
 
-           }
 
-         }
 
-       }
 
-       /**
 
-        * Get the no conflict compressor class.
 
-        * @returns {Compressor} The compressor class.
 
-        */
 
-     }], [{
 
-       key: "noConflict",
 
-       value: function noConflict() {
 
-         window.Compressor = AnotherCompressor;
 
-         return Compressor;
 
-       }
 
-       /**
 
-        * Change the default options.
 
-        * @param {Object} options - The new default options.
 
-        */
 
-     }, {
 
-       key: "setDefaults",
 
-       value: function setDefaults(options) {
 
-         _extends(DEFAULTS, options);
 
-       }
 
-     }]);
 
-     return Compressor;
 
-   }();
 
-   return Compressor;
 
- }));
 
 
  |