diff --git a/bower.json b/bower.json index 752c910..54426b6 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "lrz", - "version": "4.1.11", + "version": "4.2.1", "homepage": "https://github.com/think2011/localResizeIMG4", "authors": [ "think2011 <452125301@qq.com>" diff --git a/dist/1.chunk.js b/dist/1.chunk.js index e77f2d5..01900c5 100644 --- a/dist/1.chunk.js +++ b/dist/1.chunk.js @@ -1,279 +1,2 @@ -webpackJsonp([1],{ - -/***/ 5: -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/** - * Mega pixel image rendering library for iOS6 Safari - * - * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel), - * which causes unexpected subsampling when drawing it in canvas. - * By using this library, you can safely render the image with proper stretching. - * - * Copyright (c) 2012 Shinichi Tomita - * Released under the MIT license - */ - (function () { - - /** - * Detect subsampling in loaded image. - * In iOS, larger images than 2M pixels may be subsampled in rendering. - */ - function detectSubsampling (img) { - var iw = img.naturalWidth, ih = img.naturalHeight; - if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image - var canvas = document.createElement('canvas'); - canvas.width = canvas.height = 1; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, -iw + 1, 0); - // subsampled image becomes half smaller in rendering size. - // check alpha channel value to confirm image is covering edge pixel or not. - // if alpha value is 0 image is not covering, hence subsampled. - return ctx.getImageData(0, 0, 1, 1).data[3] === 0; - } else { - return false; - } - } - - /** - * Detecting vertical squash in loaded image. - * Fixes a bug which squash image vertically while drawing into canvas for some images. - */ - function detectVerticalSquash (img, iw, ih) { - var canvas = document.createElement('canvas'); - canvas.width = 1; - canvas.height = ih; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - var data = ctx.getImageData(0, 0, 1, ih).data; - // search image edge pixel position in case it is squashed vertically. - var sy = 0; - var ey = ih; - var py = ih; - while (py > sy) { - var alpha = data[(py - 1) * 4 + 3]; - if (alpha === 0) { - ey = py; - } else { - sy = py; - } - py = (ey + sy) >> 1; - } - var ratio = (py / ih); - return (ratio === 0) ? 1 : ratio; - } - - /** - * Rendering image element (with resizing) and get its data URL - */ - function renderImageToDataURL (img, options, doSquash) { - var canvas = document.createElement('canvas'); - renderImageToCanvas(img, canvas, options, doSquash); - return canvas.toDataURL("image/jpeg", options.quality || 0.8); - } - - /** - * Rendering image element (with resizing) into the canvas element - */ - function renderImageToCanvas (img, canvas, options, doSquash) { - var iw = img.naturalWidth, ih = img.naturalHeight; - var width = options.width, height = options.height; - var ctx = canvas.getContext('2d'); - ctx.save(); - transformCoordinate(canvas, ctx, width, height, options.orientation); - var subsampled = detectSubsampling(img); - if (subsampled) { - iw /= 2; - ih /= 2; - } - var d = 1024; // size of tiling canvas - var tmpCanvas = document.createElement('canvas'); - tmpCanvas.width = tmpCanvas.height = d; - var tmpCtx = tmpCanvas.getContext('2d'); - var vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1; - var dw = Math.ceil(d * width / iw); - var dh = Math.ceil(d * height / ih / vertSquashRatio); - var sy = 0; - var dy = 0; - while (sy < ih) { - var sx = 0; - var dx = 0; - while (sx < iw) { - tmpCtx.clearRect(0, 0, d, d); - tmpCtx.drawImage(img, -sx, -sy); - ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh); - sx += d; - dx += dw; - } - sy += d; - dy += dh; - } - ctx.restore(); - tmpCanvas = tmpCtx = null; - } - - /** - * Transform canvas coordination according to specified frame size and orientation - * Orientation value is from EXIF tag - */ - function transformCoordinate (canvas, ctx, width, height, orientation) { - switch (orientation) { - case 5: - case 6: - case 7: - case 8: - canvas.width = height; - canvas.height = width; - break; - default: - canvas.width = width; - canvas.height = height; - } - switch (orientation) { - case 2: - // horizontal flip - ctx.translate(width, 0); - ctx.scale(-1, 1); - break; - case 3: - // 180 rotate left - ctx.translate(width, height); - ctx.rotate(Math.PI); - break; - case 4: - // vertical flip - ctx.translate(0, height); - ctx.scale(1, -1); - break; - case 5: - // vertical flip + 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.scale(1, -1); - break; - case 6: - // 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.translate(0, -height); - break; - case 7: - // horizontal flip + 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.translate(width, -height); - ctx.scale(-1, 1); - break; - case 8: - // 90 rotate left - ctx.rotate(-0.5 * Math.PI); - ctx.translate(-width, 0); - break; - default: - break; - } - } - - - /** - * MegaPixImage class - */ - function MegaPixImage (srcImage) { - if (window.Blob && srcImage instanceof Blob) { - var img = new Image(); - var URL = window.URL && window.URL.createObjectURL ? window.URL : - window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL : - null; - if (!URL) { - throw Error("No createObjectURL function found to create blob url"); - } - img.src = URL.createObjectURL(srcImage); - this.blob = srcImage; - srcImage = img; - } - if (!srcImage.naturalWidth && !srcImage.naturalHeight) { - var _this = this; - srcImage.onload = function () { - var listeners = _this.imageLoadListeners; - if (listeners) { - _this.imageLoadListeners = null; - for (var i = 0, len = listeners.length; i < len; i++) { - listeners[i](); - } - } - }; - this.imageLoadListeners = []; - } - this.srcImage = srcImage; - } - - /** - * Rendering megapix image into specified target element - */ - MegaPixImage.prototype.render = function (target, options, callback) { - if (this.imageLoadListeners) { - var _this = this; - this.imageLoadListeners.push(function () { - _this.render(target, options, callback); - }); - return; - } - options = options || {}; - var srcImage = this.srcImage, - src = srcImage.src, - srcLength = src.length, - imgWidth = srcImage.naturalWidth, imgHeight = srcImage.naturalHeight, - width = options.width, height = options.height, - maxWidth = options.maxWidth, maxHeight = options.maxHeight, - doSquash = this.blob && this.blob.type === 'image/jpeg' || - src.indexOf('data:image/jpeg') === 0 || - src.indexOf('.jpg') === srcLength - 4 || - src.indexOf('.jpeg') === srcLength - 5; - if (width && !height) { - height = (imgHeight * width / imgWidth) << 0; - } else if (height && !width) { - width = (imgWidth * height / imgHeight) << 0; - } else { - width = imgWidth; - height = imgHeight; - } - if (maxWidth && width > maxWidth) { - width = maxWidth; - height = (imgHeight * width / imgWidth) << 0; - } - if (maxHeight && height > maxHeight) { - height = maxHeight; - width = (imgWidth * height / imgHeight) << 0; - } - var opt = {width: width, height: height}; - for (var k in options) opt[k] = options[k]; - - var tagName = target.tagName.toLowerCase(); - if (tagName === 'img') { - target.src = renderImageToDataURL(this.srcImage, opt, doSquash); - } else if (tagName === 'canvas') { - renderImageToCanvas(this.srcImage, target, opt, doSquash); - } - if (typeof this.onrender === 'function') { - this.onrender(target); - } - if (callback) { - callback(); - } - }; - - /** - * Export class to global - */ - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return MegaPixImage; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // for AMD loader - } else { - this.MegaPixImage = MegaPixImage; - } - - })(); - - -/***/ } - -}); +webpackJsonp([1],{5:function(e,t,n){var r,i;!function(){function n(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var r=document.createElement("canvas");r.width=r.height=1;var i=r.getContext("2d");return i.drawImage(e,-t+1,0),0===i.getImageData(0,0,1,1).data[3]}return!1}function o(e,t,n){var r=document.createElement("canvas");r.width=1,r.height=n;var i=r.getContext("2d");i.drawImage(e,0,0);for(var o=i.getImageData(0,0,1,n).data,a=0,s=n,c=n;c>a;){var u=o[4*(c-1)+3];0===u?s=c:a=c,c=s+a>>1}var l=c/n;return 0===l?1:l}function a(e,t,n){var r=document.createElement("canvas");return s(e,r,t,n),r.toDataURL("image/jpeg",t.quality||.8)}function s(e,t,r,i){var a=e.naturalWidth,s=e.naturalHeight,u=r.width,l=r.height,h=t.getContext("2d");h.save(),c(t,h,u,l,r.orientation);var d=n(e);d&&(a/=2,s/=2);var f=1024,g=document.createElement("canvas");g.width=g.height=f;for(var p=g.getContext("2d"),m=i?o(e,a,s):1,w=Math.ceil(f*u/a),v=Math.ceil(f*l/s/m),y=0,S=0;s>y;){for(var b=0,I=0;a>b;)p.clearRect(0,0,f,f),p.drawImage(e,-b,-y),h.drawImage(g,0,0,f,f,I,S,w,v),b+=f,I+=w;y+=f,S+=v}h.restore(),g=p=null}function c(e,t,n,r,i){switch(i){case 5:case 6:case 7:case 8:e.width=r,e.height=n;break;default:e.width=n,e.height=r}switch(i){case 2:t.translate(n,0),t.scale(-1,1);break;case 3:t.translate(n,r),t.rotate(Math.PI);break;case 4:t.translate(0,r),t.scale(1,-1);break;case 5:t.rotate(.5*Math.PI),t.scale(1,-1);break;case 6:t.rotate(.5*Math.PI),t.translate(0,-r);break;case 7:t.rotate(.5*Math.PI),t.translate(n,-r),t.scale(-1,1);break;case 8:t.rotate(-.5*Math.PI),t.translate(-n,0)}}function u(e){if(window.Blob&&e instanceof Blob){var t=new Image,n=window.URL&&window.URL.createObjectURL?window.URL:window.webkitURL&&window.webkitURL.createObjectURL?window.webkitURL:null;if(!n)throw Error("No createObjectURL function found to create blob url");t.src=n.createObjectURL(e),this.blob=e,e=t}if(!e.naturalWidth&&!e.naturalHeight){var r=this;e.onload=function(){var e=r.imageLoadListeners;if(e){r.imageLoadListeners=null;for(var t=0,n=e.length;n>t;t++)e[t]()}},this.imageLoadListeners=[]}this.srcImage=e}u.prototype.render=function(e,t,n){if(this.imageLoadListeners){var r=this;return void this.imageLoadListeners.push(function(){r.render(e,t,n)})}t=t||{};var i=this.srcImage,o=i.src,c=o.length,u=i.naturalWidth,l=i.naturalHeight,h=t.width,d=t.height,f=t.maxWidth,g=t.maxHeight,p=this.blob&&"image/jpeg"===this.blob.type||0===o.indexOf("data:image/jpeg")||o.indexOf(".jpg")===c-4||o.indexOf(".jpeg")===c-5;h&&!d?d=l*h/u<<0:d&&!h?h=u*d/l<<0:(h=u,d=l),f&&h>f&&(h=f,d=l*h/u<<0),g&&d>g&&(d=g,h=u*d/l<<0);var m={width:h,height:d};for(var w in t)m[w]=t[w];var v=e.tagName.toLowerCase();"img"===v?e.src=a(this.srcImage,m,p):"canvas"===v&&s(this.srcImage,e,m,p),"function"==typeof this.onrender&&this.onrender(e),n&&n()},r=[],i=function(){return u}.apply(t,r),!(void 0!==i&&(e.exports=i))}()}}); //# sourceMappingURL=1.chunk.js.map \ No newline at end of file diff --git a/dist/1.chunk.js.map b/dist/1.chunk.js.map new file mode 100644 index 0000000..6b9788a --- /dev/null +++ b/dist/1.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///1.chunk.js","webpack:///src/lib/megapix-image.js"],"names":["webpackJsonp",5,"module","exports","__webpack_require__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","detectSubsampling","img","iw","naturalWidth","ih","naturalHeight","canvas","document","createElement","width","height","ctx","getContext","drawImage","getImageData","data","detectVerticalSquash","sy","ey","py","alpha","ratio","renderImageToDataURL","options","doSquash","renderImageToCanvas","toDataURL","quality","save","transformCoordinate","orientation","subsampled","d","tmpCanvas","tmpCtx","vertSquashRatio","dw","Math","ceil","dh","dy","sx","dx","clearRect","restore","translate","scale","rotate","PI","MegaPixImage","srcImage","window","Blob","Image","URL","createObjectURL","webkitURL","Error","src","this","blob","_this","onload","listeners","imageLoadListeners","i","len","length","prototype","render","target","callback","push","srcLength","imgWidth","imgHeight","maxWidth","maxHeight","type","indexOf","opt","k","tagName","toLowerCase","onrender","apply","undefined"],"mappings":"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","file":"1.chunk.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 5:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n\t * Mega pixel image rendering library for iOS6 Safari\n\t *\n\t * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel),\n\t * which causes unexpected subsampling when drawing it in canvas.\n\t * By using this library, you can safely render the image with proper stretching.\n\t *\n\t * Copyright (c) 2012 Shinichi Tomita \n\t * Released under the MIT license\n\t */\n\t(function () {\n\t\n\t /**\n\t * Detect subsampling in loaded image.\n\t * In iOS, larger images than 2M pixels may be subsampled in rendering.\n\t */\n\t function detectSubsampling (img) {\n\t var iw = img.naturalWidth, ih = img.naturalHeight;\n\t if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image\n\t var canvas = document.createElement('canvas');\n\t canvas.width = canvas.height = 1;\n\t var ctx = canvas.getContext('2d');\n\t ctx.drawImage(img, -iw + 1, 0);\n\t // subsampled image becomes half smaller in rendering size.\n\t // check alpha channel value to confirm image is covering edge pixel or not.\n\t // if alpha value is 0 image is not covering, hence subsampled.\n\t return ctx.getImageData(0, 0, 1, 1).data[3] === 0;\n\t } else {\n\t return false;\n\t }\n\t }\n\t\n\t /**\n\t * Detecting vertical squash in loaded image.\n\t * Fixes a bug which squash image vertically while drawing into canvas for some images.\n\t */\n\t function detectVerticalSquash (img, iw, ih) {\n\t var canvas = document.createElement('canvas');\n\t canvas.width = 1;\n\t canvas.height = ih;\n\t var ctx = canvas.getContext('2d');\n\t ctx.drawImage(img, 0, 0);\n\t var data = ctx.getImageData(0, 0, 1, ih).data;\n\t // search image edge pixel position in case it is squashed vertically.\n\t var sy = 0;\n\t var ey = ih;\n\t var py = ih;\n\t while (py > sy) {\n\t var alpha = data[(py - 1) * 4 + 3];\n\t if (alpha === 0) {\n\t ey = py;\n\t } else {\n\t sy = py;\n\t }\n\t py = (ey + sy) >> 1;\n\t }\n\t var ratio = (py / ih);\n\t return (ratio === 0) ? 1 : ratio;\n\t }\n\t\n\t /**\n\t * Rendering image element (with resizing) and get its data URL\n\t */\n\t function renderImageToDataURL (img, options, doSquash) {\n\t var canvas = document.createElement('canvas');\n\t renderImageToCanvas(img, canvas, options, doSquash);\n\t return canvas.toDataURL(\"image/jpeg\", options.quality || 0.8);\n\t }\n\t\n\t /**\n\t * Rendering image element (with resizing) into the canvas element\n\t */\n\t function renderImageToCanvas (img, canvas, options, doSquash) {\n\t var iw = img.naturalWidth, ih = img.naturalHeight;\n\t var width = options.width, height = options.height;\n\t var ctx = canvas.getContext('2d');\n\t ctx.save();\n\t transformCoordinate(canvas, ctx, width, height, options.orientation);\n\t var subsampled = detectSubsampling(img);\n\t if (subsampled) {\n\t iw /= 2;\n\t ih /= 2;\n\t }\n\t var d = 1024; // size of tiling canvas\n\t var tmpCanvas = document.createElement('canvas');\n\t tmpCanvas.width = tmpCanvas.height = d;\n\t var tmpCtx = tmpCanvas.getContext('2d');\n\t var vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1;\n\t var dw = Math.ceil(d * width / iw);\n\t var dh = Math.ceil(d * height / ih / vertSquashRatio);\n\t var sy = 0;\n\t var dy = 0;\n\t while (sy < ih) {\n\t var sx = 0;\n\t var dx = 0;\n\t while (sx < iw) {\n\t tmpCtx.clearRect(0, 0, d, d);\n\t tmpCtx.drawImage(img, -sx, -sy);\n\t ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh);\n\t sx += d;\n\t dx += dw;\n\t }\n\t sy += d;\n\t dy += dh;\n\t }\n\t ctx.restore();\n\t tmpCanvas = tmpCtx = null;\n\t }\n\t\n\t /**\n\t * Transform canvas coordination according to specified frame size and orientation\n\t * Orientation value is from EXIF tag\n\t */\n\t function transformCoordinate (canvas, ctx, width, height, orientation) {\n\t switch (orientation) {\n\t case 5:\n\t case 6:\n\t case 7:\n\t case 8:\n\t canvas.width = height;\n\t canvas.height = width;\n\t break;\n\t default:\n\t canvas.width = width;\n\t canvas.height = height;\n\t }\n\t switch (orientation) {\n\t case 2:\n\t // horizontal flip\n\t ctx.translate(width, 0);\n\t ctx.scale(-1, 1);\n\t break;\n\t case 3:\n\t // 180 rotate left\n\t ctx.translate(width, height);\n\t ctx.rotate(Math.PI);\n\t break;\n\t case 4:\n\t // vertical flip\n\t ctx.translate(0, height);\n\t ctx.scale(1, -1);\n\t break;\n\t case 5:\n\t // vertical flip + 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.scale(1, -1);\n\t break;\n\t case 6:\n\t // 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.translate(0, -height);\n\t break;\n\t case 7:\n\t // horizontal flip + 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.translate(width, -height);\n\t ctx.scale(-1, 1);\n\t break;\n\t case 8:\n\t // 90 rotate left\n\t ctx.rotate(-0.5 * Math.PI);\n\t ctx.translate(-width, 0);\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t\n\t\n\t /**\n\t * MegaPixImage class\n\t */\n\t function MegaPixImage (srcImage) {\n\t if (window.Blob && srcImage instanceof Blob) {\n\t var img = new Image();\n\t var URL = window.URL && window.URL.createObjectURL ? window.URL :\n\t window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL :\n\t null;\n\t if (!URL) {\n\t throw Error(\"No createObjectURL function found to create blob url\");\n\t }\n\t img.src = URL.createObjectURL(srcImage);\n\t this.blob = srcImage;\n\t srcImage = img;\n\t }\n\t if (!srcImage.naturalWidth && !srcImage.naturalHeight) {\n\t var _this = this;\n\t srcImage.onload = function () {\n\t var listeners = _this.imageLoadListeners;\n\t if (listeners) {\n\t _this.imageLoadListeners = null;\n\t for (var i = 0, len = listeners.length; i < len; i++) {\n\t listeners[i]();\n\t }\n\t }\n\t };\n\t this.imageLoadListeners = [];\n\t }\n\t this.srcImage = srcImage;\n\t }\n\t\n\t /**\n\t * Rendering megapix image into specified target element\n\t */\n\t MegaPixImage.prototype.render = function (target, options, callback) {\n\t if (this.imageLoadListeners) {\n\t var _this = this;\n\t this.imageLoadListeners.push(function () {\n\t _this.render(target, options, callback);\n\t });\n\t return;\n\t }\n\t options = options || {};\n\t var srcImage = this.srcImage,\n\t src = srcImage.src,\n\t srcLength = src.length,\n\t imgWidth = srcImage.naturalWidth, imgHeight = srcImage.naturalHeight,\n\t width = options.width, height = options.height,\n\t maxWidth = options.maxWidth, maxHeight = options.maxHeight,\n\t doSquash = this.blob && this.blob.type === 'image/jpeg' ||\n\t src.indexOf('data:image/jpeg') === 0 ||\n\t src.indexOf('.jpg') === srcLength - 4 ||\n\t src.indexOf('.jpeg') === srcLength - 5;\n\t if (width && !height) {\n\t height = (imgHeight * width / imgWidth) << 0;\n\t } else if (height && !width) {\n\t width = (imgWidth * height / imgHeight) << 0;\n\t } else {\n\t width = imgWidth;\n\t height = imgHeight;\n\t }\n\t if (maxWidth && width > maxWidth) {\n\t width = maxWidth;\n\t height = (imgHeight * width / imgWidth) << 0;\n\t }\n\t if (maxHeight && height > maxHeight) {\n\t height = maxHeight;\n\t width = (imgWidth * height / imgHeight) << 0;\n\t }\n\t var opt = {width: width, height: height};\n\t for (var k in options) opt[k] = options[k];\n\t\n\t var tagName = target.tagName.toLowerCase();\n\t if (tagName === 'img') {\n\t target.src = renderImageToDataURL(this.srcImage, opt, doSquash);\n\t } else if (tagName === 'canvas') {\n\t renderImageToCanvas(this.srcImage, target, opt, doSquash);\n\t }\n\t if (typeof this.onrender === 'function') {\n\t this.onrender(target);\n\t }\n\t if (callback) {\n\t callback();\n\t }\n\t };\n\t\n\t /**\n\t * Export class to global\n\t */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return MegaPixImage;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // for AMD loader\n\t } else {\n\t this.MegaPixImage = MegaPixImage;\n\t }\n\t\n\t})();\n\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** 1.chunk.js\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/megapix-image.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/2.chunk.js b/dist/2.chunk.js index 86875d5..b0fc2e7 100644 --- a/dist/2.chunk.js +++ b/dist/2.chunk.js @@ -1,540 +1,2 @@ -webpackJsonp([2],{ - -/***/ 6: -/***/ function(module, exports) { - - function JPEGEncoder (l) { - var o = this; - var s = Math.round; - var k = Math.floor; - var O = new Array(64); - var K = new Array(64); - var d = new Array(64); - var Z = new Array(64); - var u; - var h; - var G; - var T; - var n = new Array(65535); - var m = new Array(65535); - var P = new Array(64); - var S = new Array(64); - var j = []; - var t = 0; - var a = 7; - var A = new Array(64); - var f = new Array(64); - var U = new Array(64); - var e = new Array(256); - var C = new Array(2048); - var x; - var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; - var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]; - var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; - var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125]; - var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250]; - var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; - var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; - var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119]; - var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250]; - - function M (ag) { - var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99]; - for (var ae = 0; ae < 64; ae++) { - var aj = k((af[ae] * ag + 50) / 100); - if (aj < 1) { - aj = 1 - } else { - if (aj > 255) { - aj = 255 - } - } - O[i[ae]] = aj - } - var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]; - for (var ad = 0; ad < 64; ad++) { - var ai = k((ah[ad] * ag + 50) / 100); - if (ai < 1) { - ai = 1 - } else { - if (ai > 255) { - ai = 255 - } - } - K[i[ad]] = ai - } - var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379]; - var ab = 0; - for (var ak = 0; ak < 8; ak++) { - for (var aa = 0; aa < 8; aa++) { - d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8)); - Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8)); - ab++ - } - } - } - - function q (ae, aa) { - var ad = 0; - var ag = 0; - var af = new Array(); - for (var ab = 1; ab <= 16; ab++) { - for (var ac = 1; ac <= ae[ab]; ac++) { - af[aa[ag]] = []; - af[aa[ag]][0] = ad; - af[aa[ag]][1] = ab; - ag++; - ad++ - } - ad *= 2 - } - return af - } - - function W () { - u = q(g, c); - h = q(v, Y); - G = q(w, E); - T = q(J, B) - } - - function z () { - var ac = 1; - var ab = 2; - for (var aa = 1; aa <= 15; aa++) { - for (var ad = ac; ad < ab; ad++) { - m[32767 + ad] = aa; - n[32767 + ad] = []; - n[32767 + ad][1] = aa; - n[32767 + ad][0] = ad - } - for (var ae = -(ab - 1); ae <= -ac; ae++) { - m[32767 + ae] = aa; - n[32767 + ae] = []; - n[32767 + ae][1] = aa; - n[32767 + ae][0] = ab - 1 + ae - } - ac <<= 1; - ab <<= 1 - } - } - - function V () { - for (var aa = 0; aa < 256; aa++) { - C[aa] = 19595 * aa; - C[(aa + 256) >> 0] = 38470 * aa; - C[(aa + 512) >> 0] = 7471 * aa + 32768; - C[(aa + 768) >> 0] = -11059 * aa; - C[(aa + 1024) >> 0] = -21709 * aa; - C[(aa + 1280) >> 0] = 32768 * aa + 8421375; - C[(aa + 1536) >> 0] = -27439 * aa; - C[(aa + 1792) >> 0] = -5329 * aa - } - } - - function X (aa) { - var ac = aa[0]; - var ab = aa[1] - 1; - while (ab >= 0) { - if (ac & (1 << ab)) { - t |= (1 << a) - } - ab--; - a--; - if (a < 0) { - if (t == 255) { - F(255); - F(0) - } else { - F(t) - } - a = 7; - t = 0 - } - } - } - - function F (aa) { - j.push(e[aa]) - } - - function p (aa) { - F((aa >> 8) & 255); - F((aa) & 255) - } - - function N (aZ, ap) { - var aL, aK, aJ, aI, aH, aD, aC, aB; - var aN = 0; - var aR; - const aq = 8; - const ai = 64; - for (aR = 0; aR < aq; ++aR) { - aL = aZ[aN]; - aK = aZ[aN + 1]; - aJ = aZ[aN + 2]; - aI = aZ[aN + 3]; - aH = aZ[aN + 4]; - aD = aZ[aN + 5]; - aC = aZ[aN + 6]; - aB = aZ[aN + 7]; - var aY = aL + aB; - var aO = aL - aB; - var aX = aK + aC; - var aP = aK - aC; - var aU = aJ + aD; - var aQ = aJ - aD; - var aT = aI + aH; - var aS = aI - aH; - var an = aY + aT; - var ak = aY - aT; - var am = aX + aU; - var al = aX - aU; - aZ[aN] = an + am; - aZ[aN + 4] = an - am; - var ax = (al + ak) * 0.707106781; - aZ[aN + 2] = ak + ax; - aZ[aN + 6] = ak - ax; - an = aS + aQ; - am = aQ + aP; - al = aP + aO; - var at = (an - al) * 0.382683433; - var aw = 0.5411961 * an + at; - var au = 1.306562965 * al + at; - var av = am * 0.707106781; - var ah = aO + av; - var ag = aO - av; - aZ[aN + 5] = ag + aw; - aZ[aN + 3] = ag - aw; - aZ[aN + 1] = ah + au; - aZ[aN + 7] = ah - au; - aN += 8 - } - aN = 0; - for (aR = 0; aR < aq; ++aR) { - aL = aZ[aN]; - aK = aZ[aN + 8]; - aJ = aZ[aN + 16]; - aI = aZ[aN + 24]; - aH = aZ[aN + 32]; - aD = aZ[aN + 40]; - aC = aZ[aN + 48]; - aB = aZ[aN + 56]; - var ar = aL + aB; - var aj = aL - aB; - var az = aK + aC; - var ae = aK - aC; - var aG = aJ + aD; - var ac = aJ - aD; - var aW = aI + aH; - var aa = aI - aH; - var ao = ar + aW; - var aV = ar - aW; - var ay = az + aG; - var aF = az - aG; - aZ[aN] = ao + ay; - aZ[aN + 32] = ao - ay; - var af = (aF + aV) * 0.707106781; - aZ[aN + 16] = aV + af; - aZ[aN + 48] = aV - af; - ao = aa + ac; - ay = ac + ae; - aF = ae + aj; - var aM = (ao - aF) * 0.382683433; - var ad = 0.5411961 * ao + aM; - var a1 = 1.306562965 * aF + aM; - var ab = ay * 0.707106781; - var a0 = aj + ab; - var aA = aj - ab; - aZ[aN + 40] = aA + ad; - aZ[aN + 24] = aA - ad; - aZ[aN + 8] = a0 + a1; - aZ[aN + 56] = a0 - a1; - aN++ - } - var aE; - for (aR = 0; aR < ai; ++aR) { - aE = aZ[aR] * ap[aR]; - P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0) - } - return P - } - - function b () { - p(65504); - p(16); - F(74); - F(70); - F(73); - F(70); - F(0); - F(1); - F(1); - F(0); - p(1); - p(1); - F(0); - F(0) - } - - function r (aa, ab) { - p(65472); - p(17); - F(8); - p(ab); - p(aa); - F(3); - F(1); - F(17); - F(0); - F(2); - F(17); - F(1); - F(3); - F(17); - F(1) - } - - function D () { - p(65499); - p(132); - F(0); - for (var ab = 0; ab < 64; ab++) { - F(O[ab]) - } - F(1); - for (var aa = 0; aa < 64; aa++) { - F(K[aa]) - } - } - - function H () { - p(65476); - p(418); - F(0); - for (var ae = 0; ae < 16; ae++) { - F(g[ae + 1]) - } - for (var ad = 0; ad <= 11; ad++) { - F(c[ad]) - } - F(16); - for (var ac = 0; ac < 16; ac++) { - F(w[ac + 1]) - } - for (var ab = 0; ab <= 161; ab++) { - F(E[ab]) - } - F(1); - for (var aa = 0; aa < 16; aa++) { - F(v[aa + 1]) - } - for (var ah = 0; ah <= 11; ah++) { - F(Y[ah]) - } - F(17); - for (var ag = 0; ag < 16; ag++) { - F(J[ag + 1]) - } - for (var af = 0; af <= 161; af++) { - F(B[af]) - } - } - - function I () { - p(65498); - p(12); - F(3); - F(1); - F(0); - F(2); - F(17); - F(3); - F(17); - F(0); - F(63); - F(0) - } - - function L (ad, aa, al, at, ap) { - var ag = ap[0]; - var ab = ap[240]; - var ac; - const ar = 16; - const ai = 63; - const ah = 64; - var aq = N(ad, aa); - for (var am = 0; am < ah; ++am) { - S[i[am]] = aq[am] - } - var an = S[0] - al; - al = S[0]; - if (an == 0) { - X(at[0]) - } else { - ac = 32767 + an; - X(at[m[ac]]); - X(n[ac]) - } - var ae = 63; - for (; (ae > 0) && (S[ae] == 0); ae--) { - } - if (ae == 0) { - X(ag); - return al - } - var ao = 1; - var au; - while (ao <= ae) { - var ak = ao; - for (; (S[ao] == 0) && (ao <= ae); ++ao) { - } - var aj = ao - ak; - if (aj >= ar) { - au = aj >> 4; - for (var af = 1; af <= au; ++af) { - X(ab) - } - aj = aj & 15 - } - ac = 32767 + S[ao]; - X(ap[(aj << 4) + m[ac]]); - X(n[ac]); - ao++ - } - if (ae != ai) { - X(ag) - } - return al - } - - function y () { - var ab = String.fromCharCode; - for (var aa = 0; aa < 256; aa++) { - e[aa] = ab(aa) - } - } - - this.encode = function (an, aj, aB) { - var aa = new Date().getTime(); - if (aj) { - R(aj) - } - j = new Array(); - t = 0; - a = 7; - p(65496); - b(); - D(); - r(an.width, an.height); - H(); - I(); - var al = 0; - var aq = 0; - var ao = 0; - t = 0; - a = 7; - this.encode.displayName = "_encode_"; - var at = an.data; - var ar = an.width; - var aA = an.height; - var ay = ar * 4; - var ai = ar * 3; - var ah, ag = 0; - var am, ax, az; - var ab, ap, ac, af, ae; - while (ag < aA) { - ah = 0; - while (ah < ay) { - ab = ay * ag + ah; - ap = ab; - ac = -1; - af = 0; - for (ae = 0; ae < 64; ae++) { - af = ae >> 3; - ac = (ae & 7) * 4; - ap = ab + (af * ay) + ac; - if (ag + af >= aA) { - ap -= (ay * (ag + 1 + af - aA)) - } - if (ah + ac >= ay) { - ap -= ((ah + ac) - ay + 4) - } - am = at[ap++]; - ax = at[ap++]; - az = at[ap++]; - A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128; - f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128; - U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128 - } - al = L(A, d, al, u, G); - aq = L(f, Z, aq, h, T); - ao = L(U, Z, ao, h, T); - ah += 32 - } - ag += 8 - } - if (a >= 0) { - var aw = []; - aw[1] = a + 1; - aw[0] = (1 << (a + 1)) - 1; - X(aw) - } - p(65497); - if (aB) { - var av = j.length; - var aC = new Uint8Array(av); - for (var au = 0; au < av; au++) { - aC[au] = j[au].charCodeAt() - } - j = []; - var ak = new Date().getTime() - aa; - return aC - } - var ad = "data:image/jpeg;base64," + btoa(j.join("")); - j = []; - var ak = new Date().getTime() - aa; - return ad - }; - function R (ab) { - if (ab <= 0) { - ab = 1 - } - if (ab > 100) { - ab = 100 - } - if (x == ab) { - return - } - var aa = 0; - if (ab < 50) { - aa = Math.floor(5000 / ab) - } else { - aa = Math.floor(200 - ab * 2) - } - M(aa); - x = ab; - } - - function Q () { - var aa = new Date().getTime(); - if (!l) { - l = 50 - } - y(); - W(); - z(); - V(); - R(l); - var ab = new Date().getTime() - aa; - } - - Q() - } - - module.exports = JPEGEncoder; - -/***/ } - -}); +webpackJsonp([2],{6:function(e,t){function n(e){function t(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],n=0;64>n;n++){var r=F((t[n]*e+50)/100);1>r?r=1:r>255&&(r=255),U[N[n]]=r}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],o=0;64>o;o++){var a=F((i[o]*e+50)/100);1>a?a=1:a>255&&(a=255),D[N[o]]=a}for(var s=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],c=0,u=0;8>u;u++)for(var l=0;8>l;l++)C[c]=1/(U[N[c]]*s[u]*s[l]*8),T[c]=1/(D[N[c]]*s[u]*s[l]*8),c++}function n(e,t){for(var n=0,r=0,i=new Array,o=1;16>=o;o++){for(var a=1;a<=e[o];a++)i[t[r]]=[],i[t[r]][0]=n,i[t[r]][1]=o,r++,n++;n*=2}return i}function r(){y=n(W,V),S=n(q,X),b=n(H,z),I=n(J,Y)}function i(){for(var e=1,t=2,n=1;15>=n;n++){for(var r=e;t>r;r++)L[32767+r]=n,x[32767+r]=[],x[32767+r][1]=n,x[32767+r][0]=r;for(var i=-(t-1);-e>=i;i++)L[32767+i]=n,x[32767+i]=[],x[32767+i][1]=n,x[32767+i][0]=t-1+i;e<<=1,t<<=1}}function o(){for(var e=0;256>e;e++)B[e]=19595*e,B[e+256>>0]=38470*e,B[e+512>>0]=7471*e+32768,B[e+768>>0]=-11059*e,B[e+1024>>0]=-21709*e,B[e+1280>>0]=32768*e+8421375,B[e+1536>>0]=-27439*e,B[e+1792>>0]=-5329*e}function a(e){for(var t=e[0],n=e[1]-1;n>=0;)t&1<_&&(255==M?(s(255),s(0)):s(M),_=7,M=0)}function s(e){G.push(j[e])}function c(e){s(e>>8&255),s(255&e)}function u(e,t){var n,r,i,o,a,s,c,u,l,f=0;const h=8,d=64;for(l=0;h>l;++l){n=e[f],r=e[f+1],i=e[f+2],o=e[f+3],a=e[f+4],s=e[f+5],c=e[f+6],u=e[f+7];var g=n+u,p=n-u,m=r+c,w=r-c,v=i+s,y=i-s,S=o+a,b=o-a,I=g+S,P=g-S,F=m+v,U=m-v;e[f]=I+F,e[f+4]=I-F;var D=.707106781*(U+P);e[f+2]=P+D,e[f+6]=P-D,I=b+y,F=y+w,U=w+p;var C=.382683433*(I-U),T=.5411961*I+C,x=1.306562965*U+C,L=.707106781*F,A=p+L,G=p-L;e[f+5]=G+T,e[f+3]=G-T,e[f+1]=A+x,e[f+7]=A-x,f+=8}for(f=0,l=0;h>l;++l){n=e[f],r=e[f+8],i=e[f+16],o=e[f+24],a=e[f+32],s=e[f+40],c=e[f+48],u=e[f+56];var M=n+u,_=n-u,E=r+c,k=r-c,O=i+s,j=i-s,B=o+a,N=o-a,W=M+B,V=M-B,H=E+O,z=E-O;e[f]=W+H,e[f+32]=W-H;var q=.707106781*(z+V);e[f+16]=V+q,e[f+48]=V-q,W=N+j,H=j+k,z=k+_;var X=.382683433*(W-z),J=.5411961*W+X,Y=1.306562965*z+X,Q=.707106781*H,K=_+Q,Z=_-Q;e[f+40]=Z+J,e[f+24]=Z-J,e[f+8]=K+Y,e[f+56]=K-Y,f++}var $;for(l=0;d>l;++l)$=e[l]*t[l],R[l]=$>0?$+.5|0:$-.5|0;return R}function l(){c(65504),c(16),s(74),s(70),s(73),s(70),s(0),s(1),s(1),s(0),c(1),c(1),s(0),s(0)}function f(e,t){c(65472),c(17),s(8),c(t),c(e),s(3),s(1),s(17),s(0),s(2),s(17),s(1),s(3),s(17),s(1)}function h(){c(65499),c(132),s(0);for(var e=0;64>e;e++)s(U[e]);s(1);for(var t=0;64>t;t++)s(D[t])}function d(){c(65476),c(418),s(0);for(var e=0;16>e;e++)s(W[e+1]);for(var t=0;11>=t;t++)s(V[t]);s(16);for(var n=0;16>n;n++)s(H[n+1]);for(var r=0;161>=r;r++)s(z[r]);s(1);for(var i=0;16>i;i++)s(q[i+1]);for(var o=0;11>=o;o++)s(X[o]);s(17);for(var a=0;16>a;a++)s(J[a+1]);for(var u=0;161>=u;u++)s(Y[u])}function g(){c(65498),c(12),s(3),s(1),s(0),s(2),s(17),s(3),s(17),s(0),s(63),s(0)}function p(e,t,n,r,i){var o,s=i[0],c=i[240];const l=16,f=63,h=64;for(var d=u(e,t),g=0;h>g;++g)A[N[g]]=d[g];var p=A[0]-n;n=A[0],0==p?a(r[0]):(o=32767+p,a(r[L[o]]),a(x[o]));for(var m=63;m>0&&0==A[m];m--);if(0==m)return a(s),n;for(var w,v=1;m>=v;){for(var y=v;0==A[v]&&m>=v;++v);var S=v-y;if(S>=l){w=S>>4;for(var b=1;w>=b;++b)a(c);S=15&S}o=32767+A[v],a(i[(S<<4)+L[o]]),a(x[o]),v++}return m!=f&&a(s),n}function m(){for(var e=String.fromCharCode,t=0;256>t;t++)j[t]=e(t)}function w(e){if(0>=e&&(e=1),e>100&&(e=100),P!=e){var n=0;n=50>e?Math.floor(5e3/e):Math.floor(200-2*e),t(n),P=e}}function v(){var t=(new Date).getTime();e||(e=50),m(),r(),i(),o(),w(e);(new Date).getTime()-t}var y,S,b,I,P,F=(Math.round,Math.floor),U=new Array(64),D=new Array(64),C=new Array(64),T=new Array(64),x=new Array(65535),L=new Array(65535),R=new Array(64),A=new Array(64),G=[],M=0,_=7,E=new Array(64),k=new Array(64),O=new Array(64),j=new Array(256),B=new Array(2048),N=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],W=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],H=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],z=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],q=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],X=[0,1,2,3,4,5,6,7,8,9,10,11],J=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],Y=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(e,t,n){var r=(new Date).getTime();t&&w(t),G=new Array,M=0,_=7,c(65496),l(),h(),f(e.width,e.height),d(),g();var i=0,o=0,s=0;M=0,_=7,this.encode.displayName="_encode_";for(var u,m,v,P,F,U,D,x,L,R=e.data,A=e.width,j=e.height,N=4*A,W=0;j>W;){for(u=0;N>u;){for(F=N*W+u,U=F,D=-1,x=0,L=0;64>L;L++)x=L>>3,D=4*(7&L),U=F+x*N+D,W+x>=j&&(U-=N*(W+1+x-j)),u+D>=N&&(U-=u+D-N+4),m=R[U++],v=R[U++],P=R[U++],E[L]=(B[m]+B[v+256>>0]+B[P+512>>0]>>16)-128,k[L]=(B[m+768>>0]+B[v+1024>>0]+B[P+1280>>0]>>16)-128,O[L]=(B[m+1280>>0]+B[v+1536>>0]+B[P+1792>>0]>>16)-128;i=p(E,C,i,y,b),o=p(k,T,o,S,I),s=p(O,T,s,S,I),u+=32}W+=8}if(_>=0){var V=[];V[1]=_+1,V[0]=(1<<_+1)-1,a(V)}if(c(65497),n){for(var H=G.length,z=new Uint8Array(H),q=0;H>q;q++)z[q]=G[q].charCodeAt();G=[];(new Date).getTime()-r;return z}var X="data:image/jpeg;base64,"+btoa(G.join(""));G=[];(new Date).getTime()-r;return X},v()}e.exports=n}}); //# sourceMappingURL=2.chunk.js.map \ No newline at end of file diff --git a/dist/2.chunk.js.map b/dist/2.chunk.js.map new file mode 100644 index 0000000..4f5979d --- /dev/null +++ b/dist/2.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///2.chunk.js","webpack:///src/lib/jpeg_encoder_basic.js"],"names":["webpackJsonp",6,"module","exports","JPEGEncoder","l","M","ag","af","ae","aj","k","O","i","ah","ad","ai","K","ac","ab","ak","aa","d","Z","q","Array","W","u","g","c","h","v","Y","G","w","E","T","J","B","z","m","n","V","C","X","t","a","F","j","push","e","p","N","aZ","ap","aL","aK","aJ","aI","aH","aD","aC","aB","aR","aN","aq","aY","aO","aX","aP","aU","aQ","aT","aS","an","am","al","ax","at","aw","au","av","ar","az","aG","aW","ao","aV","ay","aF","aM","a1","a0","aA","aE","P","b","r","D","H","I","L","S","y","String","fromCharCode","R","x","Math","floor","Q","Date","getTime","round","A","f","U","this","encode","width","height","displayName","data","length","Uint8Array","charCodeAt","btoa","join"],"mappings":"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","file":"2.chunk.js","sourcesContent":["webpackJsonp([2],{\n\n/***/ 6:\n/***/ function(module, exports) {\n\n\tfunction JPEGEncoder (l) {\n\t var o = this;\n\t var s = Math.round;\n\t var k = Math.floor;\n\t var O = new Array(64);\n\t var K = new Array(64);\n\t var d = new Array(64);\n\t var Z = new Array(64);\n\t var u;\n\t var h;\n\t var G;\n\t var T;\n\t var n = new Array(65535);\n\t var m = new Array(65535);\n\t var P = new Array(64);\n\t var S = new Array(64);\n\t var j = [];\n\t var t = 0;\n\t var a = 7;\n\t var A = new Array(64);\n\t var f = new Array(64);\n\t var U = new Array(64);\n\t var e = new Array(256);\n\t var C = new Array(2048);\n\t var x;\n\t var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\n\t var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n\t var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];\n\t var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\t var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\n\t var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];\n\t var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\t\n\t function M (ag) {\n\t var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99];\n\t for (var ae = 0; ae < 64; ae++) {\n\t var aj = k((af[ae] * ag + 50) / 100);\n\t if (aj < 1) {\n\t aj = 1\n\t } else {\n\t if (aj > 255) {\n\t aj = 255\n\t }\n\t }\n\t O[i[ae]] = aj\n\t }\n\t var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99];\n\t for (var ad = 0; ad < 64; ad++) {\n\t var ai = k((ah[ad] * ag + 50) / 100);\n\t if (ai < 1) {\n\t ai = 1\n\t } else {\n\t if (ai > 255) {\n\t ai = 255\n\t }\n\t }\n\t K[i[ad]] = ai\n\t }\n\t var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t var ab = 0;\n\t for (var ak = 0; ak < 8; ak++) {\n\t for (var aa = 0; aa < 8; aa++) {\n\t d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8));\n\t Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8));\n\t ab++\n\t }\n\t }\n\t }\n\t\n\t function q (ae, aa) {\n\t var ad = 0;\n\t var ag = 0;\n\t var af = new Array();\n\t for (var ab = 1; ab <= 16; ab++) {\n\t for (var ac = 1; ac <= ae[ab]; ac++) {\n\t af[aa[ag]] = [];\n\t af[aa[ag]][0] = ad;\n\t af[aa[ag]][1] = ab;\n\t ag++;\n\t ad++\n\t }\n\t ad *= 2\n\t }\n\t return af\n\t }\n\t\n\t function W () {\n\t u = q(g, c);\n\t h = q(v, Y);\n\t G = q(w, E);\n\t T = q(J, B)\n\t }\n\t\n\t function z () {\n\t var ac = 1;\n\t var ab = 2;\n\t for (var aa = 1; aa <= 15; aa++) {\n\t for (var ad = ac; ad < ab; ad++) {\n\t m[32767 + ad] = aa;\n\t n[32767 + ad] = [];\n\t n[32767 + ad][1] = aa;\n\t n[32767 + ad][0] = ad\n\t }\n\t for (var ae = -(ab - 1); ae <= -ac; ae++) {\n\t m[32767 + ae] = aa;\n\t n[32767 + ae] = [];\n\t n[32767 + ae][1] = aa;\n\t n[32767 + ae][0] = ab - 1 + ae\n\t }\n\t ac <<= 1;\n\t ab <<= 1\n\t }\n\t }\n\t\n\t function V () {\n\t for (var aa = 0; aa < 256; aa++) {\n\t C[aa] = 19595 * aa;\n\t C[(aa + 256) >> 0] = 38470 * aa;\n\t C[(aa + 512) >> 0] = 7471 * aa + 32768;\n\t C[(aa + 768) >> 0] = -11059 * aa;\n\t C[(aa + 1024) >> 0] = -21709 * aa;\n\t C[(aa + 1280) >> 0] = 32768 * aa + 8421375;\n\t C[(aa + 1536) >> 0] = -27439 * aa;\n\t C[(aa + 1792) >> 0] = -5329 * aa\n\t }\n\t }\n\t\n\t function X (aa) {\n\t var ac = aa[0];\n\t var ab = aa[1] - 1;\n\t while (ab >= 0) {\n\t if (ac & (1 << ab)) {\n\t t |= (1 << a)\n\t }\n\t ab--;\n\t a--;\n\t if (a < 0) {\n\t if (t == 255) {\n\t F(255);\n\t F(0)\n\t } else {\n\t F(t)\n\t }\n\t a = 7;\n\t t = 0\n\t }\n\t }\n\t }\n\t\n\t function F (aa) {\n\t j.push(e[aa])\n\t }\n\t\n\t function p (aa) {\n\t F((aa >> 8) & 255);\n\t F((aa) & 255)\n\t }\n\t\n\t function N (aZ, ap) {\n\t var aL, aK, aJ, aI, aH, aD, aC, aB;\n\t var aN = 0;\n\t var aR;\n\t const aq = 8;\n\t const ai = 64;\n\t for (aR = 0; aR < aq; ++aR) {\n\t aL = aZ[aN];\n\t aK = aZ[aN + 1];\n\t aJ = aZ[aN + 2];\n\t aI = aZ[aN + 3];\n\t aH = aZ[aN + 4];\n\t aD = aZ[aN + 5];\n\t aC = aZ[aN + 6];\n\t aB = aZ[aN + 7];\n\t var aY = aL + aB;\n\t var aO = aL - aB;\n\t var aX = aK + aC;\n\t var aP = aK - aC;\n\t var aU = aJ + aD;\n\t var aQ = aJ - aD;\n\t var aT = aI + aH;\n\t var aS = aI - aH;\n\t var an = aY + aT;\n\t var ak = aY - aT;\n\t var am = aX + aU;\n\t var al = aX - aU;\n\t aZ[aN] = an + am;\n\t aZ[aN + 4] = an - am;\n\t var ax = (al + ak) * 0.707106781;\n\t aZ[aN + 2] = ak + ax;\n\t aZ[aN + 6] = ak - ax;\n\t an = aS + aQ;\n\t am = aQ + aP;\n\t al = aP + aO;\n\t var at = (an - al) * 0.382683433;\n\t var aw = 0.5411961 * an + at;\n\t var au = 1.306562965 * al + at;\n\t var av = am * 0.707106781;\n\t var ah = aO + av;\n\t var ag = aO - av;\n\t aZ[aN + 5] = ag + aw;\n\t aZ[aN + 3] = ag - aw;\n\t aZ[aN + 1] = ah + au;\n\t aZ[aN + 7] = ah - au;\n\t aN += 8\n\t }\n\t aN = 0;\n\t for (aR = 0; aR < aq; ++aR) {\n\t aL = aZ[aN];\n\t aK = aZ[aN + 8];\n\t aJ = aZ[aN + 16];\n\t aI = aZ[aN + 24];\n\t aH = aZ[aN + 32];\n\t aD = aZ[aN + 40];\n\t aC = aZ[aN + 48];\n\t aB = aZ[aN + 56];\n\t var ar = aL + aB;\n\t var aj = aL - aB;\n\t var az = aK + aC;\n\t var ae = aK - aC;\n\t var aG = aJ + aD;\n\t var ac = aJ - aD;\n\t var aW = aI + aH;\n\t var aa = aI - aH;\n\t var ao = ar + aW;\n\t var aV = ar - aW;\n\t var ay = az + aG;\n\t var aF = az - aG;\n\t aZ[aN] = ao + ay;\n\t aZ[aN + 32] = ao - ay;\n\t var af = (aF + aV) * 0.707106781;\n\t aZ[aN + 16] = aV + af;\n\t aZ[aN + 48] = aV - af;\n\t ao = aa + ac;\n\t ay = ac + ae;\n\t aF = ae + aj;\n\t var aM = (ao - aF) * 0.382683433;\n\t var ad = 0.5411961 * ao + aM;\n\t var a1 = 1.306562965 * aF + aM;\n\t var ab = ay * 0.707106781;\n\t var a0 = aj + ab;\n\t var aA = aj - ab;\n\t aZ[aN + 40] = aA + ad;\n\t aZ[aN + 24] = aA - ad;\n\t aZ[aN + 8] = a0 + a1;\n\t aZ[aN + 56] = a0 - a1;\n\t aN++\n\t }\n\t var aE;\n\t for (aR = 0; aR < ai; ++aR) {\n\t aE = aZ[aR] * ap[aR];\n\t P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0)\n\t }\n\t return P\n\t }\n\t\n\t function b () {\n\t p(65504);\n\t p(16);\n\t F(74);\n\t F(70);\n\t F(73);\n\t F(70);\n\t F(0);\n\t F(1);\n\t F(1);\n\t F(0);\n\t p(1);\n\t p(1);\n\t F(0);\n\t F(0)\n\t }\n\t\n\t function r (aa, ab) {\n\t p(65472);\n\t p(17);\n\t F(8);\n\t p(ab);\n\t p(aa);\n\t F(3);\n\t F(1);\n\t F(17);\n\t F(0);\n\t F(2);\n\t F(17);\n\t F(1);\n\t F(3);\n\t F(17);\n\t F(1)\n\t }\n\t\n\t function D () {\n\t p(65499);\n\t p(132);\n\t F(0);\n\t for (var ab = 0; ab < 64; ab++) {\n\t F(O[ab])\n\t }\n\t F(1);\n\t for (var aa = 0; aa < 64; aa++) {\n\t F(K[aa])\n\t }\n\t }\n\t\n\t function H () {\n\t p(65476);\n\t p(418);\n\t F(0);\n\t for (var ae = 0; ae < 16; ae++) {\n\t F(g[ae + 1])\n\t }\n\t for (var ad = 0; ad <= 11; ad++) {\n\t F(c[ad])\n\t }\n\t F(16);\n\t for (var ac = 0; ac < 16; ac++) {\n\t F(w[ac + 1])\n\t }\n\t for (var ab = 0; ab <= 161; ab++) {\n\t F(E[ab])\n\t }\n\t F(1);\n\t for (var aa = 0; aa < 16; aa++) {\n\t F(v[aa + 1])\n\t }\n\t for (var ah = 0; ah <= 11; ah++) {\n\t F(Y[ah])\n\t }\n\t F(17);\n\t for (var ag = 0; ag < 16; ag++) {\n\t F(J[ag + 1])\n\t }\n\t for (var af = 0; af <= 161; af++) {\n\t F(B[af])\n\t }\n\t }\n\t\n\t function I () {\n\t p(65498);\n\t p(12);\n\t F(3);\n\t F(1);\n\t F(0);\n\t F(2);\n\t F(17);\n\t F(3);\n\t F(17);\n\t F(0);\n\t F(63);\n\t F(0)\n\t }\n\t\n\t function L (ad, aa, al, at, ap) {\n\t var ag = ap[0];\n\t var ab = ap[240];\n\t var ac;\n\t const ar = 16;\n\t const ai = 63;\n\t const ah = 64;\n\t var aq = N(ad, aa);\n\t for (var am = 0; am < ah; ++am) {\n\t S[i[am]] = aq[am]\n\t }\n\t var an = S[0] - al;\n\t al = S[0];\n\t if (an == 0) {\n\t X(at[0])\n\t } else {\n\t ac = 32767 + an;\n\t X(at[m[ac]]);\n\t X(n[ac])\n\t }\n\t var ae = 63;\n\t for (; (ae > 0) && (S[ae] == 0); ae--) {\n\t }\n\t if (ae == 0) {\n\t X(ag);\n\t return al\n\t }\n\t var ao = 1;\n\t var au;\n\t while (ao <= ae) {\n\t var ak = ao;\n\t for (; (S[ao] == 0) && (ao <= ae); ++ao) {\n\t }\n\t var aj = ao - ak;\n\t if (aj >= ar) {\n\t au = aj >> 4;\n\t for (var af = 1; af <= au; ++af) {\n\t X(ab)\n\t }\n\t aj = aj & 15\n\t }\n\t ac = 32767 + S[ao];\n\t X(ap[(aj << 4) + m[ac]]);\n\t X(n[ac]);\n\t ao++\n\t }\n\t if (ae != ai) {\n\t X(ag)\n\t }\n\t return al\n\t }\n\t\n\t function y () {\n\t var ab = String.fromCharCode;\n\t for (var aa = 0; aa < 256; aa++) {\n\t e[aa] = ab(aa)\n\t }\n\t }\n\t\n\t this.encode = function (an, aj, aB) {\n\t var aa = new Date().getTime();\n\t if (aj) {\n\t R(aj)\n\t }\n\t j = new Array();\n\t t = 0;\n\t a = 7;\n\t p(65496);\n\t b();\n\t D();\n\t r(an.width, an.height);\n\t H();\n\t I();\n\t var al = 0;\n\t var aq = 0;\n\t var ao = 0;\n\t t = 0;\n\t a = 7;\n\t this.encode.displayName = \"_encode_\";\n\t var at = an.data;\n\t var ar = an.width;\n\t var aA = an.height;\n\t var ay = ar * 4;\n\t var ai = ar * 3;\n\t var ah, ag = 0;\n\t var am, ax, az;\n\t var ab, ap, ac, af, ae;\n\t while (ag < aA) {\n\t ah = 0;\n\t while (ah < ay) {\n\t ab = ay * ag + ah;\n\t ap = ab;\n\t ac = -1;\n\t af = 0;\n\t for (ae = 0; ae < 64; ae++) {\n\t af = ae >> 3;\n\t ac = (ae & 7) * 4;\n\t ap = ab + (af * ay) + ac;\n\t if (ag + af >= aA) {\n\t ap -= (ay * (ag + 1 + af - aA))\n\t }\n\t if (ah + ac >= ay) {\n\t ap -= ((ah + ac) - ay + 4)\n\t }\n\t am = at[ap++];\n\t ax = at[ap++];\n\t az = at[ap++];\n\t A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128;\n\t f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128;\n\t U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128\n\t }\n\t al = L(A, d, al, u, G);\n\t aq = L(f, Z, aq, h, T);\n\t ao = L(U, Z, ao, h, T);\n\t ah += 32\n\t }\n\t ag += 8\n\t }\n\t if (a >= 0) {\n\t var aw = [];\n\t aw[1] = a + 1;\n\t aw[0] = (1 << (a + 1)) - 1;\n\t X(aw)\n\t }\n\t p(65497);\n\t if (aB) {\n\t var av = j.length;\n\t var aC = new Uint8Array(av);\n\t for (var au = 0; au < av; au++) {\n\t aC[au] = j[au].charCodeAt()\n\t }\n\t j = [];\n\t var ak = new Date().getTime() - aa;\n\t return aC\n\t }\n\t var ad = \"data:image/jpeg;base64,\" + btoa(j.join(\"\"));\n\t j = [];\n\t var ak = new Date().getTime() - aa;\n\t return ad\n\t };\n\t function R (ab) {\n\t if (ab <= 0) {\n\t ab = 1\n\t }\n\t if (ab > 100) {\n\t ab = 100\n\t }\n\t if (x == ab) {\n\t return\n\t }\n\t var aa = 0;\n\t if (ab < 50) {\n\t aa = Math.floor(5000 / ab)\n\t } else {\n\t aa = Math.floor(200 - ab * 2)\n\t }\n\t M(aa);\n\t x = ab;\n\t }\n\t\n\t function Q () {\n\t var aa = new Date().getTime();\n\t if (!l) {\n\t l = 50\n\t }\n\t y();\n\t W();\n\t z();\n\t V();\n\t R(l);\n\t var ab = new Date().getTime() - aa;\n\t }\n\t\n\t Q()\n\t}\n\t\n\tmodule.exports = JPEGEncoder;\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** 2.chunk.js\n **/","function JPEGEncoder (l) {\n var o = this;\n var s = Math.round;\n var k = Math.floor;\n var O = new Array(64);\n var K = new Array(64);\n var d = new Array(64);\n var Z = new Array(64);\n var u;\n var h;\n var G;\n var T;\n var n = new Array(65535);\n var m = new Array(65535);\n var P = new Array(64);\n var S = new Array(64);\n var j = [];\n var t = 0;\n var a = 7;\n var A = new Array(64);\n var f = new Array(64);\n var U = new Array(64);\n var e = new Array(256);\n var C = new Array(2048);\n var x;\n var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\n var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];\n var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\n var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];\n var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\n function M (ag) {\n var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99];\n for (var ae = 0; ae < 64; ae++) {\n var aj = k((af[ae] * ag + 50) / 100);\n if (aj < 1) {\n aj = 1\n } else {\n if (aj > 255) {\n aj = 255\n }\n }\n O[i[ae]] = aj\n }\n var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99];\n for (var ad = 0; ad < 64; ad++) {\n var ai = k((ah[ad] * ag + 50) / 100);\n if (ai < 1) {\n ai = 1\n } else {\n if (ai > 255) {\n ai = 255\n }\n }\n K[i[ad]] = ai\n }\n var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n var ab = 0;\n for (var ak = 0; ak < 8; ak++) {\n for (var aa = 0; aa < 8; aa++) {\n d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8));\n Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8));\n ab++\n }\n }\n }\n\n function q (ae, aa) {\n var ad = 0;\n var ag = 0;\n var af = new Array();\n for (var ab = 1; ab <= 16; ab++) {\n for (var ac = 1; ac <= ae[ab]; ac++) {\n af[aa[ag]] = [];\n af[aa[ag]][0] = ad;\n af[aa[ag]][1] = ab;\n ag++;\n ad++\n }\n ad *= 2\n }\n return af\n }\n\n function W () {\n u = q(g, c);\n h = q(v, Y);\n G = q(w, E);\n T = q(J, B)\n }\n\n function z () {\n var ac = 1;\n var ab = 2;\n for (var aa = 1; aa <= 15; aa++) {\n for (var ad = ac; ad < ab; ad++) {\n m[32767 + ad] = aa;\n n[32767 + ad] = [];\n n[32767 + ad][1] = aa;\n n[32767 + ad][0] = ad\n }\n for (var ae = -(ab - 1); ae <= -ac; ae++) {\n m[32767 + ae] = aa;\n n[32767 + ae] = [];\n n[32767 + ae][1] = aa;\n n[32767 + ae][0] = ab - 1 + ae\n }\n ac <<= 1;\n ab <<= 1\n }\n }\n\n function V () {\n for (var aa = 0; aa < 256; aa++) {\n C[aa] = 19595 * aa;\n C[(aa + 256) >> 0] = 38470 * aa;\n C[(aa + 512) >> 0] = 7471 * aa + 32768;\n C[(aa + 768) >> 0] = -11059 * aa;\n C[(aa + 1024) >> 0] = -21709 * aa;\n C[(aa + 1280) >> 0] = 32768 * aa + 8421375;\n C[(aa + 1536) >> 0] = -27439 * aa;\n C[(aa + 1792) >> 0] = -5329 * aa\n }\n }\n\n function X (aa) {\n var ac = aa[0];\n var ab = aa[1] - 1;\n while (ab >= 0) {\n if (ac & (1 << ab)) {\n t |= (1 << a)\n }\n ab--;\n a--;\n if (a < 0) {\n if (t == 255) {\n F(255);\n F(0)\n } else {\n F(t)\n }\n a = 7;\n t = 0\n }\n }\n }\n\n function F (aa) {\n j.push(e[aa])\n }\n\n function p (aa) {\n F((aa >> 8) & 255);\n F((aa) & 255)\n }\n\n function N (aZ, ap) {\n var aL, aK, aJ, aI, aH, aD, aC, aB;\n var aN = 0;\n var aR;\n const aq = 8;\n const ai = 64;\n for (aR = 0; aR < aq; ++aR) {\n aL = aZ[aN];\n aK = aZ[aN + 1];\n aJ = aZ[aN + 2];\n aI = aZ[aN + 3];\n aH = aZ[aN + 4];\n aD = aZ[aN + 5];\n aC = aZ[aN + 6];\n aB = aZ[aN + 7];\n var aY = aL + aB;\n var aO = aL - aB;\n var aX = aK + aC;\n var aP = aK - aC;\n var aU = aJ + aD;\n var aQ = aJ - aD;\n var aT = aI + aH;\n var aS = aI - aH;\n var an = aY + aT;\n var ak = aY - aT;\n var am = aX + aU;\n var al = aX - aU;\n aZ[aN] = an + am;\n aZ[aN + 4] = an - am;\n var ax = (al + ak) * 0.707106781;\n aZ[aN + 2] = ak + ax;\n aZ[aN + 6] = ak - ax;\n an = aS + aQ;\n am = aQ + aP;\n al = aP + aO;\n var at = (an - al) * 0.382683433;\n var aw = 0.5411961 * an + at;\n var au = 1.306562965 * al + at;\n var av = am * 0.707106781;\n var ah = aO + av;\n var ag = aO - av;\n aZ[aN + 5] = ag + aw;\n aZ[aN + 3] = ag - aw;\n aZ[aN + 1] = ah + au;\n aZ[aN + 7] = ah - au;\n aN += 8\n }\n aN = 0;\n for (aR = 0; aR < aq; ++aR) {\n aL = aZ[aN];\n aK = aZ[aN + 8];\n aJ = aZ[aN + 16];\n aI = aZ[aN + 24];\n aH = aZ[aN + 32];\n aD = aZ[aN + 40];\n aC = aZ[aN + 48];\n aB = aZ[aN + 56];\n var ar = aL + aB;\n var aj = aL - aB;\n var az = aK + aC;\n var ae = aK - aC;\n var aG = aJ + aD;\n var ac = aJ - aD;\n var aW = aI + aH;\n var aa = aI - aH;\n var ao = ar + aW;\n var aV = ar - aW;\n var ay = az + aG;\n var aF = az - aG;\n aZ[aN] = ao + ay;\n aZ[aN + 32] = ao - ay;\n var af = (aF + aV) * 0.707106781;\n aZ[aN + 16] = aV + af;\n aZ[aN + 48] = aV - af;\n ao = aa + ac;\n ay = ac + ae;\n aF = ae + aj;\n var aM = (ao - aF) * 0.382683433;\n var ad = 0.5411961 * ao + aM;\n var a1 = 1.306562965 * aF + aM;\n var ab = ay * 0.707106781;\n var a0 = aj + ab;\n var aA = aj - ab;\n aZ[aN + 40] = aA + ad;\n aZ[aN + 24] = aA - ad;\n aZ[aN + 8] = a0 + a1;\n aZ[aN + 56] = a0 - a1;\n aN++\n }\n var aE;\n for (aR = 0; aR < ai; ++aR) {\n aE = aZ[aR] * ap[aR];\n P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0)\n }\n return P\n }\n\n function b () {\n p(65504);\n p(16);\n F(74);\n F(70);\n F(73);\n F(70);\n F(0);\n F(1);\n F(1);\n F(0);\n p(1);\n p(1);\n F(0);\n F(0)\n }\n\n function r (aa, ab) {\n p(65472);\n p(17);\n F(8);\n p(ab);\n p(aa);\n F(3);\n F(1);\n F(17);\n F(0);\n F(2);\n F(17);\n F(1);\n F(3);\n F(17);\n F(1)\n }\n\n function D () {\n p(65499);\n p(132);\n F(0);\n for (var ab = 0; ab < 64; ab++) {\n F(O[ab])\n }\n F(1);\n for (var aa = 0; aa < 64; aa++) {\n F(K[aa])\n }\n }\n\n function H () {\n p(65476);\n p(418);\n F(0);\n for (var ae = 0; ae < 16; ae++) {\n F(g[ae + 1])\n }\n for (var ad = 0; ad <= 11; ad++) {\n F(c[ad])\n }\n F(16);\n for (var ac = 0; ac < 16; ac++) {\n F(w[ac + 1])\n }\n for (var ab = 0; ab <= 161; ab++) {\n F(E[ab])\n }\n F(1);\n for (var aa = 0; aa < 16; aa++) {\n F(v[aa + 1])\n }\n for (var ah = 0; ah <= 11; ah++) {\n F(Y[ah])\n }\n F(17);\n for (var ag = 0; ag < 16; ag++) {\n F(J[ag + 1])\n }\n for (var af = 0; af <= 161; af++) {\n F(B[af])\n }\n }\n\n function I () {\n p(65498);\n p(12);\n F(3);\n F(1);\n F(0);\n F(2);\n F(17);\n F(3);\n F(17);\n F(0);\n F(63);\n F(0)\n }\n\n function L (ad, aa, al, at, ap) {\n var ag = ap[0];\n var ab = ap[240];\n var ac;\n const ar = 16;\n const ai = 63;\n const ah = 64;\n var aq = N(ad, aa);\n for (var am = 0; am < ah; ++am) {\n S[i[am]] = aq[am]\n }\n var an = S[0] - al;\n al = S[0];\n if (an == 0) {\n X(at[0])\n } else {\n ac = 32767 + an;\n X(at[m[ac]]);\n X(n[ac])\n }\n var ae = 63;\n for (; (ae > 0) && (S[ae] == 0); ae--) {\n }\n if (ae == 0) {\n X(ag);\n return al\n }\n var ao = 1;\n var au;\n while (ao <= ae) {\n var ak = ao;\n for (; (S[ao] == 0) && (ao <= ae); ++ao) {\n }\n var aj = ao - ak;\n if (aj >= ar) {\n au = aj >> 4;\n for (var af = 1; af <= au; ++af) {\n X(ab)\n }\n aj = aj & 15\n }\n ac = 32767 + S[ao];\n X(ap[(aj << 4) + m[ac]]);\n X(n[ac]);\n ao++\n }\n if (ae != ai) {\n X(ag)\n }\n return al\n }\n\n function y () {\n var ab = String.fromCharCode;\n for (var aa = 0; aa < 256; aa++) {\n e[aa] = ab(aa)\n }\n }\n\n this.encode = function (an, aj, aB) {\n var aa = new Date().getTime();\n if (aj) {\n R(aj)\n }\n j = new Array();\n t = 0;\n a = 7;\n p(65496);\n b();\n D();\n r(an.width, an.height);\n H();\n I();\n var al = 0;\n var aq = 0;\n var ao = 0;\n t = 0;\n a = 7;\n this.encode.displayName = \"_encode_\";\n var at = an.data;\n var ar = an.width;\n var aA = an.height;\n var ay = ar * 4;\n var ai = ar * 3;\n var ah, ag = 0;\n var am, ax, az;\n var ab, ap, ac, af, ae;\n while (ag < aA) {\n ah = 0;\n while (ah < ay) {\n ab = ay * ag + ah;\n ap = ab;\n ac = -1;\n af = 0;\n for (ae = 0; ae < 64; ae++) {\n af = ae >> 3;\n ac = (ae & 7) * 4;\n ap = ab + (af * ay) + ac;\n if (ag + af >= aA) {\n ap -= (ay * (ag + 1 + af - aA))\n }\n if (ah + ac >= ay) {\n ap -= ((ah + ac) - ay + 4)\n }\n am = at[ap++];\n ax = at[ap++];\n az = at[ap++];\n A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128;\n f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128;\n U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128\n }\n al = L(A, d, al, u, G);\n aq = L(f, Z, aq, h, T);\n ao = L(U, Z, ao, h, T);\n ah += 32\n }\n ag += 8\n }\n if (a >= 0) {\n var aw = [];\n aw[1] = a + 1;\n aw[0] = (1 << (a + 1)) - 1;\n X(aw)\n }\n p(65497);\n if (aB) {\n var av = j.length;\n var aC = new Uint8Array(av);\n for (var au = 0; au < av; au++) {\n aC[au] = j[au].charCodeAt()\n }\n j = [];\n var ak = new Date().getTime() - aa;\n return aC\n }\n var ad = \"data:image/jpeg;base64,\" + btoa(j.join(\"\"));\n j = [];\n var ak = new Date().getTime() - aa;\n return ad\n };\n function R (ab) {\n if (ab <= 0) {\n ab = 1\n }\n if (ab > 100) {\n ab = 100\n }\n if (x == ab) {\n return\n }\n var aa = 0;\n if (ab < 50) {\n aa = Math.floor(5000 / ab)\n } else {\n aa = Math.floor(200 - ab * 2)\n }\n M(aa);\n x = ab;\n }\n\n function Q () {\n var aa = new Date().getTime();\n if (!l) {\n l = 50\n }\n y();\n W();\n z();\n V();\n R(l);\n var ab = new Date().getTime() - aa;\n }\n\n Q()\n}\n\nmodule.exports = JPEGEncoder;\n\n\n/** WEBPACK FOOTER **\n ** src/lib/jpeg_encoder_basic.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/lrz.all.bundle.js b/dist/lrz.all.bundle.js index c1d8e52..dbcee5e 100644 --- a/dist/lrz.all.bundle.js +++ b/dist/lrz.all.bundle.js @@ -1,2414 +1,2 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "./dist/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - __webpack_require__(5); - __webpack_require__(6); - - module.exports = __webpack_require__(7); - - /** - * - *    ┏┓   ┏┓ - *   ┏┛┻━━━┛┻┓ - *   ┃       ┃ - *   ┃   ━   ┃ - *   ┃ ┳┛ ┗┳ ┃ - *   ┃       ┃ - *   ┃   ┻   ┃ - *   ┃       ┃ - *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting - *     ┃   ┃ 神兽保佑,代码无bug - *     ┃   ┃ - *     ┃   ┗━━━┓ - *     ┃      ┣┓ - *     ┃     ┏┛ - *     ┗┓┓┏━┳┓┏┛ - *      ┃┫┫ ┃┫┫ - *      ┗┻┛ ┗┻┛ - * - */ - - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(setImmediate) {(function (root) { - - // Use polyfill for setImmediate for performance gains - var asap = (typeof setImmediate === 'function' && setImmediate) || - function (fn) { - setTimeout(fn, 1); - }; - - // Polyfill for Function.prototype.bind - function bind (fn, thisArg) { - return function () { - fn.apply(thisArg, arguments); - } - } - - var isArray = Array.isArray || function (value) { - return Object.prototype.toString.call(value) === "[object Array]" - }; - - function Promise (fn) { - if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - this._state = null; - this._value = null; - this._deferreds = [] - - doResolve(fn, bind(resolve, this), bind(reject, this)) - } - - function handle (deferred) { - var me = this; - if (this._state === null) { - this._deferreds.push(deferred); - return - } - asap(function () { - var cb = me._state ? deferred.onFulfilled : deferred.onRejected - if (cb === null) { - (me._state ? deferred.resolve : deferred.reject)(me._value); - return; - } - var ret; - try { - ret = cb(me._value); - } - catch (e) { - deferred.reject(e); - return; - } - deferred.resolve(ret); - }) - } - - function resolve (newValue) { - try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.'); - if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { - var then = newValue.then; - if (typeof then === 'function') { - doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this)); - return; - } - } - this._state = true; - this._value = newValue; - finale.call(this); - } catch (e) { - reject.call(this, e); - } - } - - function reject (newValue) { - this._state = false; - this._value = newValue; - finale.call(this); - } - - function finale () { - for (var i = 0, len = this._deferreds.length; i < len; i++) { - handle.call(this, this._deferreds[i]); - } - this._deferreds = null; - } - - function Handler (onFulfilled, onRejected, resolve, reject) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.resolve = resolve; - this.reject = reject; - } - - /** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ - function doResolve (fn, onFulfilled, onRejected) { - var done = false; - try { - fn(function (value) { - if (done) return; - done = true; - onFulfilled(value); - }, function (reason) { - if (done) return; - done = true; - onRejected(reason); - }) - } catch (ex) { - if (done) return; - done = true; - onRejected(ex); - } - } - - Promise.prototype['catch'] = function (onRejected) { - return this.then(null, onRejected); - }; - - Promise.prototype.then = function (onFulfilled, onRejected) { - var me = this; - return new Promise(function (resolve, reject) { - handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject)); - }) - }; - - Promise.all = function () { - var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments); - - return new Promise(function (resolve, reject) { - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res (i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call(val, function (val) { - res(i, val) - }, reject); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); - }; - - Promise.resolve = function (value) { - if (value && typeof value === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function (resolve) { - resolve(value); - }); - }; - - Promise.reject = function (value) { - return new Promise(function (resolve, reject) { - reject(value); - }); - }; - - Promise.race = function (values) { - return new Promise(function (resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); - }; - - /** - * Set the immediate function to execute callbacks - * @param fn {function} Function to execute - * @private - */ - Promise._setImmediateFn = function _setImmediateFn (fn) { - asap = fn; - }; - - - Promise.prototype.always = function (callback) { - var constructor = this.constructor; - - return this.then(function (value) { - return constructor.resolve(callback()).then(function () { - return value; - }); - }, function (reason) { - return constructor.resolve(callback()).then(function () { - throw reason; - }); - }); - }; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = Promise; - } else if (!root.Promise) { - root.Promise = Promise; - } - - })(this); - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate)) - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(3).nextTick; - var apply = Function.prototype.apply; - var slice = Array.prototype.slice; - var immediateIds = {}; - var nextImmediateId = 0; - - // DOM APIs, for completeness - - exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); - }; - exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); - }; - exports.clearTimeout = - exports.clearInterval = function(timeout) { timeout.close(); }; - - function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; - } - Timeout.prototype.unref = Timeout.prototype.ref = function() {}; - Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); - }; - - // Does not start the time, just sets up the members needed. - exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; - }; - - exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; - }; - - exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } - }; - - // That's not how node.js implements it but the exposed api is the same. - exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; - }; - - exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; - }; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate, __webpack_require__(2).clearImmediate)) - -/***/ }, -/* 3 */ -/***/ function(module, exports) { - - // shim for using process in browser - - var process = module.exports = {}; - var queue = []; - var draining = false; - var currentQueue; - var queueIndex = -1; - - function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } - } - - function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); - } - - process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } - }; - - // v8 likes predictible objects - function Item(fun, array) { - this.fun = fun; - this.array = array; - } - Item.prototype.run = function () { - this.fun.apply(null, this.array); - }; - process.title = 'browser'; - process.browser = true; - process.env = {}; - process.argv = []; - process.version = ''; // empty string to avoid regexp issues - process.versions = {}; - - function noop() {} - - process.on = noop; - process.addListener = noop; - process.once = noop; - process.off = noop; - process.removeListener = noop; - process.removeAllListeners = noop; - process.emit = noop; - - process.binding = function (name) { - throw new Error('process.binding is not supported'); - }; - - process.cwd = function () { return '/' }; - process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); - }; - process.umask = function() { return 0; }; - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* exif */ - (function () { - - var debug = false; - - var root = this; - - var EXIF = function (obj) { - if (obj instanceof EXIF) return obj; - if (!(this instanceof EXIF)) return new EXIF(obj); - this.EXIFwrapped = obj; - }; - - if (true) { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = EXIF; - } - exports.EXIF = EXIF; - } else { - root.EXIF = EXIF; - } - - var ExifTags = EXIF.Tags = { - - // version tags - 0x9000: "ExifVersion", // EXIF version - 0xA000: "FlashpixVersion", // Flashpix format version - - // colorspace tags - 0xA001: "ColorSpace", // Color space information tag - - // image configuration - 0xA002: "PixelXDimension", // Valid width of meaningful image - 0xA003: "PixelYDimension", // Valid height of meaningful image - 0x9101: "ComponentsConfiguration", // Information about channels - 0x9102: "CompressedBitsPerPixel", // Compressed bits per pixel - - // user information - 0x927C: "MakerNote", // Any desired information written by the manufacturer - 0x9286: "UserComment", // Comments by user - - // related file - 0xA004: "RelatedSoundFile", // Name of related sound file - - // date and time - 0x9003: "DateTimeOriginal", // Date and time when the original image was generated - 0x9004: "DateTimeDigitized", // Date and time when the image was stored digitally - 0x9290: "SubsecTime", // Fractions of seconds for DateTime - 0x9291: "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal - 0x9292: "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized - - // picture-taking conditions - 0x829A: "ExposureTime", // Exposure time (in seconds) - 0x829D: "FNumber", // F number - 0x8822: "ExposureProgram", // Exposure program - 0x8824: "SpectralSensitivity", // Spectral sensitivity - 0x8827: "ISOSpeedRatings", // ISO speed rating - 0x8828: "OECF", // Optoelectric conversion factor - 0x9201: "ShutterSpeedValue", // Shutter speed - 0x9202: "ApertureValue", // Lens aperture - 0x9203: "BrightnessValue", // Value of brightness - 0x9204: "ExposureBias", // Exposure bias - 0x9205: "MaxApertureValue", // Smallest F number of lens - 0x9206: "SubjectDistance", // Distance to subject in meters - 0x9207: "MeteringMode", // Metering mode - 0x9208: "LightSource", // Kind of light source - 0x9209: "Flash", // Flash status - 0x9214: "SubjectArea", // Location and area of main subject - 0x920A: "FocalLength", // Focal length of the lens in mm - 0xA20B: "FlashEnergy", // Strobe energy in BCPS - 0xA20C: "SpatialFrequencyResponse", // - 0xA20E: "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit - 0xA20F: "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit - 0xA210: "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution - 0xA214: "SubjectLocation", // Location of subject in image - 0xA215: "ExposureIndex", // Exposure index selected on camera - 0xA217: "SensingMethod", // Image sensor type - 0xA300: "FileSource", // Image source (3 == DSC) - 0xA301: "SceneType", // Scene type (1 == directly photographed) - 0xA302: "CFAPattern", // Color filter array geometric pattern - 0xA401: "CustomRendered", // Special processing - 0xA402: "ExposureMode", // Exposure mode - 0xA403: "WhiteBalance", // 1 = auto white balance, 2 = manual - 0xA404: "DigitalZoomRation", // Digital zoom ratio - 0xA405: "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) - 0xA406: "SceneCaptureType", // Type of scene - 0xA407: "GainControl", // Degree of overall image gain adjustment - 0xA408: "Contrast", // Direction of contrast processing applied by camera - 0xA409: "Saturation", // Direction of saturation processing applied by camera - 0xA40A: "Sharpness", // Direction of sharpness processing applied by camera - 0xA40B: "DeviceSettingDescription", // - 0xA40C: "SubjectDistanceRange", // Distance to subject - - // other tags - 0xA005: "InteroperabilityIFDPointer", - 0xA420: "ImageUniqueID" // Identifier assigned uniquely to each image - }; - - var TiffTags = EXIF.TiffTags = { - 0x0100: "ImageWidth", - 0x0101: "ImageHeight", - 0x8769: "ExifIFDPointer", - 0x8825: "GPSInfoIFDPointer", - 0xA005: "InteroperabilityIFDPointer", - 0x0102: "BitsPerSample", - 0x0103: "Compression", - 0x0106: "PhotometricInterpretation", - 0x0112: "Orientation", - 0x0115: "SamplesPerPixel", - 0x011C: "PlanarConfiguration", - 0x0212: "YCbCrSubSampling", - 0x0213: "YCbCrPositioning", - 0x011A: "XResolution", - 0x011B: "YResolution", - 0x0128: "ResolutionUnit", - 0x0111: "StripOffsets", - 0x0116: "RowsPerStrip", - 0x0117: "StripByteCounts", - 0x0201: "JPEGInterchangeFormat", - 0x0202: "JPEGInterchangeFormatLength", - 0x012D: "TransferFunction", - 0x013E: "WhitePoint", - 0x013F: "PrimaryChromaticities", - 0x0211: "YCbCrCoefficients", - 0x0214: "ReferenceBlackWhite", - 0x0132: "DateTime", - 0x010E: "ImageDescription", - 0x010F: "Make", - 0x0110: "Model", - 0x0131: "Software", - 0x013B: "Artist", - 0x8298: "Copyright" - }; - - var GPSTags = EXIF.GPSTags = { - 0x0000: "GPSVersionID", - 0x0001: "GPSLatitudeRef", - 0x0002: "GPSLatitude", - 0x0003: "GPSLongitudeRef", - 0x0004: "GPSLongitude", - 0x0005: "GPSAltitudeRef", - 0x0006: "GPSAltitude", - 0x0007: "GPSTimeStamp", - 0x0008: "GPSSatellites", - 0x0009: "GPSStatus", - 0x000A: "GPSMeasureMode", - 0x000B: "GPSDOP", - 0x000C: "GPSSpeedRef", - 0x000D: "GPSSpeed", - 0x000E: "GPSTrackRef", - 0x000F: "GPSTrack", - 0x0010: "GPSImgDirectionRef", - 0x0011: "GPSImgDirection", - 0x0012: "GPSMapDatum", - 0x0013: "GPSDestLatitudeRef", - 0x0014: "GPSDestLatitude", - 0x0015: "GPSDestLongitudeRef", - 0x0016: "GPSDestLongitude", - 0x0017: "GPSDestBearingRef", - 0x0018: "GPSDestBearing", - 0x0019: "GPSDestDistanceRef", - 0x001A: "GPSDestDistance", - 0x001B: "GPSProcessingMethod", - 0x001C: "GPSAreaInformation", - 0x001D: "GPSDateStamp", - 0x001E: "GPSDifferential" - }; - - var StringValues = EXIF.StringValues = { - ExposureProgram : { - 0: "Not defined", - 1: "Manual", - 2: "Normal program", - 3: "Aperture priority", - 4: "Shutter priority", - 5: "Creative program", - 6: "Action program", - 7: "Portrait mode", - 8: "Landscape mode" - }, - MeteringMode : { - 0 : "Unknown", - 1 : "Average", - 2 : "CenterWeightedAverage", - 3 : "Spot", - 4 : "MultiSpot", - 5 : "Pattern", - 6 : "Partial", - 255: "Other" - }, - LightSource : { - 0 : "Unknown", - 1 : "Daylight", - 2 : "Fluorescent", - 3 : "Tungsten (incandescent light)", - 4 : "Flash", - 9 : "Fine weather", - 10 : "Cloudy weather", - 11 : "Shade", - 12 : "Daylight fluorescent (D 5700 - 7100K)", - 13 : "Day white fluorescent (N 4600 - 5400K)", - 14 : "Cool white fluorescent (W 3900 - 4500K)", - 15 : "White fluorescent (WW 3200 - 3700K)", - 17 : "Standard light A", - 18 : "Standard light B", - 19 : "Standard light C", - 20 : "D55", - 21 : "D65", - 22 : "D75", - 23 : "D50", - 24 : "ISO studio tungsten", - 255: "Other" - }, - Flash : { - 0x0000: "Flash did not fire", - 0x0001: "Flash fired", - 0x0005: "Strobe return light not detected", - 0x0007: "Strobe return light detected", - 0x0009: "Flash fired, compulsory flash mode", - 0x000D: "Flash fired, compulsory flash mode, return light not detected", - 0x000F: "Flash fired, compulsory flash mode, return light detected", - 0x0010: "Flash did not fire, compulsory flash mode", - 0x0018: "Flash did not fire, auto mode", - 0x0019: "Flash fired, auto mode", - 0x001D: "Flash fired, auto mode, return light not detected", - 0x001F: "Flash fired, auto mode, return light detected", - 0x0020: "No flash function", - 0x0041: "Flash fired, red-eye reduction mode", - 0x0045: "Flash fired, red-eye reduction mode, return light not detected", - 0x0047: "Flash fired, red-eye reduction mode, return light detected", - 0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode", - 0x004D: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", - 0x004F: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", - 0x0059: "Flash fired, auto mode, red-eye reduction mode", - 0x005D: "Flash fired, auto mode, return light not detected, red-eye reduction mode", - 0x005F: "Flash fired, auto mode, return light detected, red-eye reduction mode" - }, - SensingMethod : { - 1: "Not defined", - 2: "One-chip color area sensor", - 3: "Two-chip color area sensor", - 4: "Three-chip color area sensor", - 5: "Color sequential area sensor", - 7: "Trilinear sensor", - 8: "Color sequential linear sensor" - }, - SceneCaptureType : { - 0: "Standard", - 1: "Landscape", - 2: "Portrait", - 3: "Night scene" - }, - SceneType : { - 1: "Directly photographed" - }, - CustomRendered : { - 0: "Normal process", - 1: "Custom process" - }, - WhiteBalance : { - 0: "Auto white balance", - 1: "Manual white balance" - }, - GainControl : { - 0: "None", - 1: "Low gain up", - 2: "High gain up", - 3: "Low gain down", - 4: "High gain down" - }, - Contrast : { - 0: "Normal", - 1: "Soft", - 2: "Hard" - }, - Saturation : { - 0: "Normal", - 1: "Low saturation", - 2: "High saturation" - }, - Sharpness : { - 0: "Normal", - 1: "Soft", - 2: "Hard" - }, - SubjectDistanceRange: { - 0: "Unknown", - 1: "Macro", - 2: "Close view", - 3: "Distant view" - }, - FileSource : { - 3: "DSC" - }, - - Components: { - 0: "", - 1: "Y", - 2: "Cb", - 3: "Cr", - 4: "R", - 5: "G", - 6: "B" - } - }; - - function addEvent (element, event, handler) { - if (element.addEventListener) { - element.addEventListener(event, handler, false); - } else if (element.attachEvent) { - element.attachEvent("on" + event, handler); - } - } - - function imageHasData (img) { - return !!(img.exifdata); - } - - - function base64ToArrayBuffer (base64, contentType) { - contentType = contentType || base64.match(/^data\:([^\;]+)\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg' - base64 = base64.replace(/^data\:([^\;]+)\;base64,/gmi, ''); - var binary = atob(base64); - var len = binary.length; - var buffer = new ArrayBuffer(len); - var view = new Uint8Array(buffer); - for (var i = 0; i < len; i++) { - view[i] = binary.charCodeAt(i); - } - return buffer; - } - - function objectURLToBlob (url, callback) { - var http = new XMLHttpRequest(); - http.open("GET", url, true); - http.responseType = "blob"; - http.onload = function (e) { - if (this.status == 200 || this.status === 0) { - callback(this.response); - } - }; - http.send(); - } - - function getImageData (img, callback) { - function handleBinaryFile (binFile) { - var data = findEXIFinJPEG(binFile); - var iptcdata = findIPTCinJPEG(binFile); - img.exifdata = data || {}; - img.iptcdata = iptcdata || {}; - if (callback) { - callback.call(img); - } - } - - if (img.src) { - if (/^data\:/i.test(img.src)) { // Data URI - var arrayBuffer = base64ToArrayBuffer(img.src); - handleBinaryFile(arrayBuffer); - - } else if (/^blob\:/i.test(img.src)) { // Object URL - var fileReader = new FileReader(); - fileReader.onload = function (e) { - handleBinaryFile(e.target.result); - }; - objectURLToBlob(img.src, function (blob) { - fileReader.readAsArrayBuffer(blob); - }); - } else { - var http = new XMLHttpRequest(); - http.onload = function () { - if (this.status == 200 || this.status === 0) { - handleBinaryFile(http.response); - } else { - callback(new Error("Could not load image")); - } - http = null; - }; - http.open("GET", img.src, true); - http.responseType = "arraybuffer"; - http.send(null); - } - } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) { - var fileReader = new FileReader(); - fileReader.onload = function (e) { - if (debug) console.log("Got file of length " + e.target.result.byteLength); - handleBinaryFile(e.target.result); - }; - - fileReader.readAsArrayBuffer(img); - } - } - - function findEXIFinJPEG (file) { - var dataView = new DataView(file); - - if (debug) console.log("Got file of length " + file.byteLength); - if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { - if (debug) console.log("Not a valid JPEG"); - return false; // not a valid jpeg - } - - var offset = 2, - length = file.byteLength, - marker; - - while (offset < length) { - if (dataView.getUint8(offset) != 0xFF) { - if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset)); - return false; // not a valid marker, something is wrong - } - - marker = dataView.getUint8(offset + 1); - if (debug) console.log(marker); - - // we could implement handling for other markers here, - // but we're only looking for 0xFFE1 for EXIF data - - if (marker == 225) { - if (debug) console.log("Found 0xFFE1 marker"); - - return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2); - - // offset += 2 + file.getShortAt(offset+2, true); - - } else { - offset += 2 + dataView.getUint16(offset + 2); - } - - } - - } - - function findIPTCinJPEG (file) { - var dataView = new DataView(file); - - if (debug) console.log("Got file of length " + file.byteLength); - if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { - if (debug) console.log("Not a valid JPEG"); - return false; // not a valid jpeg - } - - var offset = 2, - length = file.byteLength; - - - var isFieldSegmentStart = function (dataView, offset) { - return ( - dataView.getUint8(offset) === 0x38 && - dataView.getUint8(offset + 1) === 0x42 && - dataView.getUint8(offset + 2) === 0x49 && - dataView.getUint8(offset + 3) === 0x4D && - dataView.getUint8(offset + 4) === 0x04 && - dataView.getUint8(offset + 5) === 0x04 - ); - }; - - while (offset < length) { - - if (isFieldSegmentStart(dataView, offset)) { - - // Get the length of the name header (which is padded to an even number of bytes) - var nameHeaderLength = dataView.getUint8(offset + 7); - if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1; - // Check for pre photoshop 6 format - if (nameHeaderLength === 0) { - // Always 4 - nameHeaderLength = 4; - } - - var startOffset = offset + 8 + nameHeaderLength; - var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); - - return readIPTCData(file, startOffset, sectionLength); - - break; - - } - - - // Not the marker, continue searching - offset++; - - } - - } - - var IptcFieldMap = { - 0x78: 'caption', - 0x6E: 'credit', - 0x19: 'keywords', - 0x37: 'dateCreated', - 0x50: 'byline', - 0x55: 'bylineTitle', - 0x7A: 'captionWriter', - 0x69: 'headline', - 0x74: 'copyright', - 0x0F: 'category' - }; - - function readIPTCData (file, startOffset, sectionLength) { - var dataView = new DataView(file); - var data = {}; - var fieldValue, fieldName, dataSize, segmentType, segmentSize; - var segmentStartPos = startOffset; - while (segmentStartPos < startOffset + sectionLength) { - if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) { - segmentType = dataView.getUint8(segmentStartPos + 2); - if (segmentType in IptcFieldMap) { - dataSize = dataView.getInt16(segmentStartPos + 3); - segmentSize = dataSize + 5; - fieldName = IptcFieldMap[segmentType]; - fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize); - // Check if we already stored a value with this name - if (data.hasOwnProperty(fieldName)) { - // Value already stored with this name, create multivalue field - if (data[fieldName] instanceof Array) { - data[fieldName].push(fieldValue); - } - else { - data[fieldName] = [data[fieldName], fieldValue]; - } - } - else { - data[fieldName] = fieldValue; - } - } - - } - segmentStartPos++; - } - return data; - } - - - function readTags (file, tiffStart, dirStart, strings, bigEnd) { - var entries = file.getUint16(dirStart, !bigEnd), - tags = {}, - entryOffset, tag, - i; - - for (i = 0; i < entries; i++) { - entryOffset = dirStart + i * 12 + 2; - tag = strings[file.getUint16(entryOffset, !bigEnd)]; - if (!tag && debug) console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd)); - tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); - } - return tags; - } - - - function readTagValue (file, entryOffset, tiffStart, dirStart, bigEnd) { - var type = file.getUint16(entryOffset + 2, !bigEnd), - numValues = file.getUint32(entryOffset + 4, !bigEnd), - valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart, - offset, - vals, val, n, - numerator, denominator; - - switch (type) { - case 1: // byte, 8-bit unsigned int - case 7: // undefined, 8-bit byte, value depending on field - if (numValues == 1) { - return file.getUint8(entryOffset + 8, !bigEnd); - } else { - offset = numValues > 4 ? valueOffset : (entryOffset + 8); - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint8(offset + n); - } - return vals; - } - - case 2: // ascii, 8-bit byte - offset = numValues > 4 ? valueOffset : (entryOffset + 8); - return getStringFromDB(file, offset, numValues - 1); - - case 3: // short, 16 bit int - if (numValues == 1) { - return file.getUint16(entryOffset + 8, !bigEnd); - } else { - offset = numValues > 2 ? valueOffset : (entryOffset + 8); - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint16(offset + 2 * n, !bigEnd); - } - return vals; - } - - case 4: // long, 32 bit int - if (numValues == 1) { - return file.getUint32(entryOffset + 8, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd); - } - return vals; - } - - case 5: // rational = two long values, first is numerator, second is denominator - if (numValues == 1) { - numerator = file.getUint32(valueOffset, !bigEnd); - denominator = file.getUint32(valueOffset + 4, !bigEnd); - val = new Number(numerator / denominator); - val.numerator = numerator; - val.denominator = denominator; - return val; - } else { - vals = []; - for (n = 0; n < numValues; n++) { - numerator = file.getUint32(valueOffset + 8 * n, !bigEnd); - denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd); - vals[n] = new Number(numerator / denominator); - vals[n].numerator = numerator; - vals[n].denominator = denominator; - } - return vals; - } - - case 9: // slong, 32 bit signed int - if (numValues == 1) { - return file.getInt32(entryOffset + 8, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd); - } - return vals; - } - - case 10: // signed rational, two slongs, first is numerator, second is denominator - if (numValues == 1) { - return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd); - } - return vals; - } - } - } - - function getStringFromDB (buffer, start, length) { - var outstr = "", n; - for (n = start; n < start + length; n++) { - outstr += String.fromCharCode(buffer.getUint8(n)); - } - return outstr; - } - - function readEXIFData (file, start) { - if (getStringFromDB(file, start, 4) != "Exif") { - if (debug) console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4)); - return false; - } - - var bigEnd, - tags, tag, - exifData, gpsData, - tiffOffset = start + 6; - - // test for TIFF validity and endianness - if (file.getUint16(tiffOffset) == 0x4949) { - bigEnd = false; - } else if (file.getUint16(tiffOffset) == 0x4D4D) { - bigEnd = true; - } else { - if (debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"); - return false; - } - - if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002A) { - if (debug) console.log("Not valid TIFF data! (no 0x002A)"); - return false; - } - - var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); - - if (firstIFDOffset < 0x00000008) { - if (debug) console.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset + 4, !bigEnd)); - return false; - } - - tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd); - - if (tags.ExifIFDPointer) { - exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd); - for (tag in exifData) { - switch (tag) { - case "LightSource" : - case "Flash" : - case "MeteringMode" : - case "ExposureProgram" : - case "SensingMethod" : - case "SceneCaptureType" : - case "SceneType" : - case "CustomRendered" : - case "WhiteBalance" : - case "GainControl" : - case "Contrast" : - case "Saturation" : - case "Sharpness" : - case "SubjectDistanceRange" : - case "FileSource" : - exifData[tag] = StringValues[tag][exifData[tag]]; - break; - - case "ExifVersion" : - case "FlashpixVersion" : - exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]); - break; - - case "ComponentsConfiguration" : - exifData[tag] = - StringValues.Components[exifData[tag][0]] + - StringValues.Components[exifData[tag][1]] + - StringValues.Components[exifData[tag][2]] + - StringValues.Components[exifData[tag][3]]; - break; - } - tags[tag] = exifData[tag]; - } - } - - if (tags.GPSInfoIFDPointer) { - gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd); - for (tag in gpsData) { - switch (tag) { - case "GPSVersionID" : - gpsData[tag] = gpsData[tag][0] + - "." + gpsData[tag][1] + - "." + gpsData[tag][2] + - "." + gpsData[tag][3]; - break; - } - tags[tag] = gpsData[tag]; - } - } - - return tags; - } - - EXIF.getData = function (img, callback) { - if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) return false; - - if (!imageHasData(img)) { - getImageData(img, callback); - } else { - if (callback) { - callback.call(img); - } - } - return true; - } - - EXIF.getTag = function (img, tag) { - if (!imageHasData(img)) return; - return img.exifdata[tag]; - } - - EXIF.getAllTags = function (img) { - if (!imageHasData(img)) return {}; - var a, - data = img.exifdata, - tags = {}; - for (a in data) { - if (data.hasOwnProperty(a)) { - tags[a] = data[a]; - } - } - return tags; - } - - EXIF.pretty = function (img) { - if (!imageHasData(img)) return ""; - var a, - data = img.exifdata, - strPretty = ""; - for (a in data) { - if (data.hasOwnProperty(a)) { - if (typeof data[a] == "object") { - if (data[a] instanceof Number) { - strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a].denominator + "]\r\n"; - } else { - strPretty += a + " : [" + data[a].length + " values]\r\n"; - } - } else { - strPretty += a + " : " + data[a] + "\r\n"; - } - } - } - return strPretty; - } - - EXIF.readFromBinaryFile = function (file) { - return findEXIFinJPEG(file); - } - - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return EXIF; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } - }.call(this)); - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/** - * Mega pixel image rendering library for iOS6 Safari - * - * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel), - * which causes unexpected subsampling when drawing it in canvas. - * By using this library, you can safely render the image with proper stretching. - * - * Copyright (c) 2012 Shinichi Tomita - * Released under the MIT license - */ - (function () { - - /** - * Detect subsampling in loaded image. - * In iOS, larger images than 2M pixels may be subsampled in rendering. - */ - function detectSubsampling (img) { - var iw = img.naturalWidth, ih = img.naturalHeight; - if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image - var canvas = document.createElement('canvas'); - canvas.width = canvas.height = 1; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, -iw + 1, 0); - // subsampled image becomes half smaller in rendering size. - // check alpha channel value to confirm image is covering edge pixel or not. - // if alpha value is 0 image is not covering, hence subsampled. - return ctx.getImageData(0, 0, 1, 1).data[3] === 0; - } else { - return false; - } - } - - /** - * Detecting vertical squash in loaded image. - * Fixes a bug which squash image vertically while drawing into canvas for some images. - */ - function detectVerticalSquash (img, iw, ih) { - var canvas = document.createElement('canvas'); - canvas.width = 1; - canvas.height = ih; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - var data = ctx.getImageData(0, 0, 1, ih).data; - // search image edge pixel position in case it is squashed vertically. - var sy = 0; - var ey = ih; - var py = ih; - while (py > sy) { - var alpha = data[(py - 1) * 4 + 3]; - if (alpha === 0) { - ey = py; - } else { - sy = py; - } - py = (ey + sy) >> 1; - } - var ratio = (py / ih); - return (ratio === 0) ? 1 : ratio; - } - - /** - * Rendering image element (with resizing) and get its data URL - */ - function renderImageToDataURL (img, options, doSquash) { - var canvas = document.createElement('canvas'); - renderImageToCanvas(img, canvas, options, doSquash); - return canvas.toDataURL("image/jpeg", options.quality || 0.8); - } - - /** - * Rendering image element (with resizing) into the canvas element - */ - function renderImageToCanvas (img, canvas, options, doSquash) { - var iw = img.naturalWidth, ih = img.naturalHeight; - var width = options.width, height = options.height; - var ctx = canvas.getContext('2d'); - ctx.save(); - transformCoordinate(canvas, ctx, width, height, options.orientation); - var subsampled = detectSubsampling(img); - if (subsampled) { - iw /= 2; - ih /= 2; - } - var d = 1024; // size of tiling canvas - var tmpCanvas = document.createElement('canvas'); - tmpCanvas.width = tmpCanvas.height = d; - var tmpCtx = tmpCanvas.getContext('2d'); - var vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1; - var dw = Math.ceil(d * width / iw); - var dh = Math.ceil(d * height / ih / vertSquashRatio); - var sy = 0; - var dy = 0; - while (sy < ih) { - var sx = 0; - var dx = 0; - while (sx < iw) { - tmpCtx.clearRect(0, 0, d, d); - tmpCtx.drawImage(img, -sx, -sy); - ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh); - sx += d; - dx += dw; - } - sy += d; - dy += dh; - } - ctx.restore(); - tmpCanvas = tmpCtx = null; - } - - /** - * Transform canvas coordination according to specified frame size and orientation - * Orientation value is from EXIF tag - */ - function transformCoordinate (canvas, ctx, width, height, orientation) { - switch (orientation) { - case 5: - case 6: - case 7: - case 8: - canvas.width = height; - canvas.height = width; - break; - default: - canvas.width = width; - canvas.height = height; - } - switch (orientation) { - case 2: - // horizontal flip - ctx.translate(width, 0); - ctx.scale(-1, 1); - break; - case 3: - // 180 rotate left - ctx.translate(width, height); - ctx.rotate(Math.PI); - break; - case 4: - // vertical flip - ctx.translate(0, height); - ctx.scale(1, -1); - break; - case 5: - // vertical flip + 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.scale(1, -1); - break; - case 6: - // 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.translate(0, -height); - break; - case 7: - // horizontal flip + 90 rotate right - ctx.rotate(0.5 * Math.PI); - ctx.translate(width, -height); - ctx.scale(-1, 1); - break; - case 8: - // 90 rotate left - ctx.rotate(-0.5 * Math.PI); - ctx.translate(-width, 0); - break; - default: - break; - } - } - - - /** - * MegaPixImage class - */ - function MegaPixImage (srcImage) { - if (window.Blob && srcImage instanceof Blob) { - var img = new Image(); - var URL = window.URL && window.URL.createObjectURL ? window.URL : - window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL : - null; - if (!URL) { - throw Error("No createObjectURL function found to create blob url"); - } - img.src = URL.createObjectURL(srcImage); - this.blob = srcImage; - srcImage = img; - } - if (!srcImage.naturalWidth && !srcImage.naturalHeight) { - var _this = this; - srcImage.onload = function () { - var listeners = _this.imageLoadListeners; - if (listeners) { - _this.imageLoadListeners = null; - for (var i = 0, len = listeners.length; i < len; i++) { - listeners[i](); - } - } - }; - this.imageLoadListeners = []; - } - this.srcImage = srcImage; - } - - /** - * Rendering megapix image into specified target element - */ - MegaPixImage.prototype.render = function (target, options, callback) { - if (this.imageLoadListeners) { - var _this = this; - this.imageLoadListeners.push(function () { - _this.render(target, options, callback); - }); - return; - } - options = options || {}; - var srcImage = this.srcImage, - src = srcImage.src, - srcLength = src.length, - imgWidth = srcImage.naturalWidth, imgHeight = srcImage.naturalHeight, - width = options.width, height = options.height, - maxWidth = options.maxWidth, maxHeight = options.maxHeight, - doSquash = this.blob && this.blob.type === 'image/jpeg' || - src.indexOf('data:image/jpeg') === 0 || - src.indexOf('.jpg') === srcLength - 4 || - src.indexOf('.jpeg') === srcLength - 5; - if (width && !height) { - height = (imgHeight * width / imgWidth) << 0; - } else if (height && !width) { - width = (imgWidth * height / imgHeight) << 0; - } else { - width = imgWidth; - height = imgHeight; - } - if (maxWidth && width > maxWidth) { - width = maxWidth; - height = (imgHeight * width / imgWidth) << 0; - } - if (maxHeight && height > maxHeight) { - height = maxHeight; - width = (imgWidth * height / imgHeight) << 0; - } - var opt = {width: width, height: height}; - for (var k in options) opt[k] = options[k]; - - var tagName = target.tagName.toLowerCase(); - if (tagName === 'img') { - target.src = renderImageToDataURL(this.srcImage, opt, doSquash); - } else if (tagName === 'canvas') { - renderImageToCanvas(this.srcImage, target, opt, doSquash); - } - if (typeof this.onrender === 'function') { - this.onrender(target); - } - if (callback) { - callback(); - } - }; - - /** - * Export class to global - */ - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return MegaPixImage; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // for AMD loader - } else { - this.MegaPixImage = MegaPixImage; - } - - })(); - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - function JPEGEncoder (l) { - var o = this; - var s = Math.round; - var k = Math.floor; - var O = new Array(64); - var K = new Array(64); - var d = new Array(64); - var Z = new Array(64); - var u; - var h; - var G; - var T; - var n = new Array(65535); - var m = new Array(65535); - var P = new Array(64); - var S = new Array(64); - var j = []; - var t = 0; - var a = 7; - var A = new Array(64); - var f = new Array(64); - var U = new Array(64); - var e = new Array(256); - var C = new Array(2048); - var x; - var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; - var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]; - var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; - var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125]; - var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250]; - var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; - var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; - var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119]; - var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250]; - - function M (ag) { - var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99]; - for (var ae = 0; ae < 64; ae++) { - var aj = k((af[ae] * ag + 50) / 100); - if (aj < 1) { - aj = 1 - } else { - if (aj > 255) { - aj = 255 - } - } - O[i[ae]] = aj - } - var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]; - for (var ad = 0; ad < 64; ad++) { - var ai = k((ah[ad] * ag + 50) / 100); - if (ai < 1) { - ai = 1 - } else { - if (ai > 255) { - ai = 255 - } - } - K[i[ad]] = ai - } - var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379]; - var ab = 0; - for (var ak = 0; ak < 8; ak++) { - for (var aa = 0; aa < 8; aa++) { - d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8)); - Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8)); - ab++ - } - } - } - - function q (ae, aa) { - var ad = 0; - var ag = 0; - var af = new Array(); - for (var ab = 1; ab <= 16; ab++) { - for (var ac = 1; ac <= ae[ab]; ac++) { - af[aa[ag]] = []; - af[aa[ag]][0] = ad; - af[aa[ag]][1] = ab; - ag++; - ad++ - } - ad *= 2 - } - return af - } - - function W () { - u = q(g, c); - h = q(v, Y); - G = q(w, E); - T = q(J, B) - } - - function z () { - var ac = 1; - var ab = 2; - for (var aa = 1; aa <= 15; aa++) { - for (var ad = ac; ad < ab; ad++) { - m[32767 + ad] = aa; - n[32767 + ad] = []; - n[32767 + ad][1] = aa; - n[32767 + ad][0] = ad - } - for (var ae = -(ab - 1); ae <= -ac; ae++) { - m[32767 + ae] = aa; - n[32767 + ae] = []; - n[32767 + ae][1] = aa; - n[32767 + ae][0] = ab - 1 + ae - } - ac <<= 1; - ab <<= 1 - } - } - - function V () { - for (var aa = 0; aa < 256; aa++) { - C[aa] = 19595 * aa; - C[(aa + 256) >> 0] = 38470 * aa; - C[(aa + 512) >> 0] = 7471 * aa + 32768; - C[(aa + 768) >> 0] = -11059 * aa; - C[(aa + 1024) >> 0] = -21709 * aa; - C[(aa + 1280) >> 0] = 32768 * aa + 8421375; - C[(aa + 1536) >> 0] = -27439 * aa; - C[(aa + 1792) >> 0] = -5329 * aa - } - } - - function X (aa) { - var ac = aa[0]; - var ab = aa[1] - 1; - while (ab >= 0) { - if (ac & (1 << ab)) { - t |= (1 << a) - } - ab--; - a--; - if (a < 0) { - if (t == 255) { - F(255); - F(0) - } else { - F(t) - } - a = 7; - t = 0 - } - } - } - - function F (aa) { - j.push(e[aa]) - } - - function p (aa) { - F((aa >> 8) & 255); - F((aa) & 255) - } - - function N (aZ, ap) { - var aL, aK, aJ, aI, aH, aD, aC, aB; - var aN = 0; - var aR; - const aq = 8; - const ai = 64; - for (aR = 0; aR < aq; ++aR) { - aL = aZ[aN]; - aK = aZ[aN + 1]; - aJ = aZ[aN + 2]; - aI = aZ[aN + 3]; - aH = aZ[aN + 4]; - aD = aZ[aN + 5]; - aC = aZ[aN + 6]; - aB = aZ[aN + 7]; - var aY = aL + aB; - var aO = aL - aB; - var aX = aK + aC; - var aP = aK - aC; - var aU = aJ + aD; - var aQ = aJ - aD; - var aT = aI + aH; - var aS = aI - aH; - var an = aY + aT; - var ak = aY - aT; - var am = aX + aU; - var al = aX - aU; - aZ[aN] = an + am; - aZ[aN + 4] = an - am; - var ax = (al + ak) * 0.707106781; - aZ[aN + 2] = ak + ax; - aZ[aN + 6] = ak - ax; - an = aS + aQ; - am = aQ + aP; - al = aP + aO; - var at = (an - al) * 0.382683433; - var aw = 0.5411961 * an + at; - var au = 1.306562965 * al + at; - var av = am * 0.707106781; - var ah = aO + av; - var ag = aO - av; - aZ[aN + 5] = ag + aw; - aZ[aN + 3] = ag - aw; - aZ[aN + 1] = ah + au; - aZ[aN + 7] = ah - au; - aN += 8 - } - aN = 0; - for (aR = 0; aR < aq; ++aR) { - aL = aZ[aN]; - aK = aZ[aN + 8]; - aJ = aZ[aN + 16]; - aI = aZ[aN + 24]; - aH = aZ[aN + 32]; - aD = aZ[aN + 40]; - aC = aZ[aN + 48]; - aB = aZ[aN + 56]; - var ar = aL + aB; - var aj = aL - aB; - var az = aK + aC; - var ae = aK - aC; - var aG = aJ + aD; - var ac = aJ - aD; - var aW = aI + aH; - var aa = aI - aH; - var ao = ar + aW; - var aV = ar - aW; - var ay = az + aG; - var aF = az - aG; - aZ[aN] = ao + ay; - aZ[aN + 32] = ao - ay; - var af = (aF + aV) * 0.707106781; - aZ[aN + 16] = aV + af; - aZ[aN + 48] = aV - af; - ao = aa + ac; - ay = ac + ae; - aF = ae + aj; - var aM = (ao - aF) * 0.382683433; - var ad = 0.5411961 * ao + aM; - var a1 = 1.306562965 * aF + aM; - var ab = ay * 0.707106781; - var a0 = aj + ab; - var aA = aj - ab; - aZ[aN + 40] = aA + ad; - aZ[aN + 24] = aA - ad; - aZ[aN + 8] = a0 + a1; - aZ[aN + 56] = a0 - a1; - aN++ - } - var aE; - for (aR = 0; aR < ai; ++aR) { - aE = aZ[aR] * ap[aR]; - P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0) - } - return P - } - - function b () { - p(65504); - p(16); - F(74); - F(70); - F(73); - F(70); - F(0); - F(1); - F(1); - F(0); - p(1); - p(1); - F(0); - F(0) - } - - function r (aa, ab) { - p(65472); - p(17); - F(8); - p(ab); - p(aa); - F(3); - F(1); - F(17); - F(0); - F(2); - F(17); - F(1); - F(3); - F(17); - F(1) - } - - function D () { - p(65499); - p(132); - F(0); - for (var ab = 0; ab < 64; ab++) { - F(O[ab]) - } - F(1); - for (var aa = 0; aa < 64; aa++) { - F(K[aa]) - } - } - - function H () { - p(65476); - p(418); - F(0); - for (var ae = 0; ae < 16; ae++) { - F(g[ae + 1]) - } - for (var ad = 0; ad <= 11; ad++) { - F(c[ad]) - } - F(16); - for (var ac = 0; ac < 16; ac++) { - F(w[ac + 1]) - } - for (var ab = 0; ab <= 161; ab++) { - F(E[ab]) - } - F(1); - for (var aa = 0; aa < 16; aa++) { - F(v[aa + 1]) - } - for (var ah = 0; ah <= 11; ah++) { - F(Y[ah]) - } - F(17); - for (var ag = 0; ag < 16; ag++) { - F(J[ag + 1]) - } - for (var af = 0; af <= 161; af++) { - F(B[af]) - } - } - - function I () { - p(65498); - p(12); - F(3); - F(1); - F(0); - F(2); - F(17); - F(3); - F(17); - F(0); - F(63); - F(0) - } - - function L (ad, aa, al, at, ap) { - var ag = ap[0]; - var ab = ap[240]; - var ac; - const ar = 16; - const ai = 63; - const ah = 64; - var aq = N(ad, aa); - for (var am = 0; am < ah; ++am) { - S[i[am]] = aq[am] - } - var an = S[0] - al; - al = S[0]; - if (an == 0) { - X(at[0]) - } else { - ac = 32767 + an; - X(at[m[ac]]); - X(n[ac]) - } - var ae = 63; - for (; (ae > 0) && (S[ae] == 0); ae--) { - } - if (ae == 0) { - X(ag); - return al - } - var ao = 1; - var au; - while (ao <= ae) { - var ak = ao; - for (; (S[ao] == 0) && (ao <= ae); ++ao) { - } - var aj = ao - ak; - if (aj >= ar) { - au = aj >> 4; - for (var af = 1; af <= au; ++af) { - X(ab) - } - aj = aj & 15 - } - ac = 32767 + S[ao]; - X(ap[(aj << 4) + m[ac]]); - X(n[ac]); - ao++ - } - if (ae != ai) { - X(ag) - } - return al - } - - function y () { - var ab = String.fromCharCode; - for (var aa = 0; aa < 256; aa++) { - e[aa] = ab(aa) - } - } - - this.encode = function (an, aj, aB) { - var aa = new Date().getTime(); - if (aj) { - R(aj) - } - j = new Array(); - t = 0; - a = 7; - p(65496); - b(); - D(); - r(an.width, an.height); - H(); - I(); - var al = 0; - var aq = 0; - var ao = 0; - t = 0; - a = 7; - this.encode.displayName = "_encode_"; - var at = an.data; - var ar = an.width; - var aA = an.height; - var ay = ar * 4; - var ai = ar * 3; - var ah, ag = 0; - var am, ax, az; - var ab, ap, ac, af, ae; - while (ag < aA) { - ah = 0; - while (ah < ay) { - ab = ay * ag + ah; - ap = ab; - ac = -1; - af = 0; - for (ae = 0; ae < 64; ae++) { - af = ae >> 3; - ac = (ae & 7) * 4; - ap = ab + (af * ay) + ac; - if (ag + af >= aA) { - ap -= (ay * (ag + 1 + af - aA)) - } - if (ah + ac >= ay) { - ap -= ((ah + ac) - ay + 4) - } - am = at[ap++]; - ax = at[ap++]; - az = at[ap++]; - A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128; - f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128; - U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128 - } - al = L(A, d, al, u, G); - aq = L(f, Z, aq, h, T); - ao = L(U, Z, ao, h, T); - ah += 32 - } - ag += 8 - } - if (a >= 0) { - var aw = []; - aw[1] = a + 1; - aw[0] = (1 << (a + 1)) - 1; - X(aw) - } - p(65497); - if (aB) { - var av = j.length; - var aC = new Uint8Array(av); - for (var au = 0; au < av; au++) { - aC[au] = j[au].charCodeAt() - } - j = []; - var ak = new Date().getTime() - aa; - return aC - } - var ad = "data:image/jpeg;base64," + btoa(j.join("")); - j = []; - var ak = new Date().getTime() - aa; - return ad - }; - function R (ab) { - if (ab <= 0) { - ab = 1 - } - if (ab > 100) { - ab = 100 - } - if (x == ab) { - return - } - var aa = 0; - if (ab < 50) { - aa = Math.floor(5000 / ab) - } else { - aa = Math.floor(200 - ab * 2) - } - M(aa); - x = ab; - } - - function Q () { - var aa = new Date().getTime(); - if (!l) { - l = 50 - } - y(); - W(); - z(); - V(); - R(l); - var ab = new Date().getTime() - aa; - } - - Q() - } - - module.exports = JPEGEncoder; - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - // 保证按需加载的文件路径正确 - __webpack_require__.p = getCurrentJsDir() + '/'; - window.URL = window.URL || window.webkitURL; - - var Promise = __webpack_require__(1), - exif = __webpack_require__(4); - - var UA = (function (userAgent) { - // 判断设备是否是IOS7以下 - // 判断设备是否是android4.5以下 - // 判断是否iOS - // 判断是否android - // 判断是否QQ浏览器 - return { - oldIOS : +((/OS (\d)_.* like Mac OS X/g.exec(userAgent)).pop()) < 8, - oldAndroid: +((/Android (\d.*?);/g.exec(userAgent)).pop().substr(0, 3)) < 4.5, - iOS : /\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent), - android : /Android/g.test(userAgent), - mQQBrowser: /MQQBrowser/g.test(userAgent) - } - })(navigator.userAgent); - - function Lrz (file, opts) { - var that = this; - - if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7'); - - opts = opts || {}; - - that.defaults = { - width : null, - height : null, - quality: 0.7 - }; - - that.file = file; - - for (var p in opts) { - if (!opts.hasOwnProperty(p)) continue; - that.defaults[p] = opts[p]; - } - - return this.init(); - } - - Lrz.prototype.init = function () { - var that = this, - file = that.file, - img = new Image(), - canvas = document.createElement('canvas'), - blob = (typeof file === 'string') ? file : URL.createObjectURL(file); - - that.img = img; - that.blob = blob; - that.canvas = canvas; - - if (!document.createElement('canvas').getContext) { - throw new Error('浏览器不支持canvas'); - } - return new Promise(function (resolve, reject) { - img.onerror = function () { - throw new Error('加载图片文件失败'); - }; - - img.onload = function () { - that._getBase64() - .then(function (base64) { - if (base64.length < 10) reject('生成base64失败'); - - return base64; - }) - .then(function (base64) { - resolve({ - origin : that.file, - base64 : base64, - base64Len: base64.length - }); - - // 释放内存 - for (var p in that) { - if (!that.hasOwnProperty(p)) continue; - - that[p] = null; - } - URL.revokeObjectURL(that.blob); - }); - }; - - img.crossOrigin = "*"; - - img.src = blob; - }); - }; - - Lrz.prototype._getBase64 = function () { - var that = this, - img = that.img, - canvas = that.canvas; - - return new Promise(function (resolve) { - exif.getData(img, function () { - that.orientation = exif.getTag(this, "Orientation"); - that.resize = that._getResize(); - that.ctx = canvas.getContext('2d'); - - canvas.width = that.resize.width; - canvas.height = that.resize.height; - - // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。 - that.ctx.fillStyle = '#fff'; - that.ctx.fillRect(0, 0, canvas.width, canvas.height); - - // 根据设备进行不同处理 - UA.oldIOS - ? that._createBase64ForOldIOS().then(resolve) - : that._createBase64().then(resolve); - }); - }); - }; - - Lrz.prototype._createBase64ForOldIOS = function () { - var that = this, - img = that.img, - canvas = that.canvas, - orientation = that.orientation; - - return new Promise(function (resolve) { - !/* require */(/* empty */function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(5)]; (function (MegaPixImage) { - var mpImg = new MegaPixImage(img); - - if ("5678".indexOf(orientation) > -1) { - mpImg.render(canvas, { - width : canvas.height, - height : canvas.width, - orientation: orientation - }); - } else { - mpImg.render(canvas, { - width : canvas.width, - height : canvas.height, - orientation: orientation - }); - } - - resolve(canvas.toDataURL('image/jpeg', that.defaults.quality)); - }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}()); - }); - }; - - Lrz.prototype._createBase64 = function () { - var that = this, - resize = that.resize, - img = that.img, - canvas = that.canvas, - ctx = that.ctx, - defaults = that.defaults, - orientation = that.orientation; - - // 调整为正确方向 - switch (orientation) { - case 3: - ctx.rotate(180 * Math.PI / 180); - ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height); - break; - case 6: - ctx.rotate(90 * Math.PI / 180); - ctx.drawImage(img, 0, -resize.width, resize.height, resize.width); - break; - case 8: - ctx.rotate(270 * Math.PI / 180); - ctx.drawImage(img, -resize.height, 0, resize.height, resize.width); - break; - - case 2: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.drawImage(img, 0, 0, resize.width, resize.height); - break; - case 4: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(180 * Math.PI / 180); - ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height); - break; - case 5: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(90 * Math.PI / 180); - ctx.drawImage(img, 0, -resize.width, resize.height, resize.width); - break; - case 7: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(270 * Math.PI / 180); - ctx.drawImage(img, -resize.height, 0, resize.height, resize.width); - break; - - default: - ctx.drawImage(img, 0, 0, resize.width, resize.height); - } - - return new Promise(function (resolve) { - if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) { - !/* require */(/* empty */function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(6)]; (function (JPEGEncoder) { - var encoder = new JPEGEncoder(), - img = ctx.getImageData(0, 0, canvas.width, canvas.height); - - resolve(encoder.encode(img, defaults.quality * 100)); - }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}()) - } - else { - resolve(canvas.toDataURL('image/jpeg', defaults.quality)); - } - }); - }; - - Lrz.prototype._getResize = function () { - var that = this, - img = that.img, - defaults = that.defaults, - width = defaults.width, - height = defaults.height, - orientation = that.orientation; - - var ret = { - width : img.width, - height: img.height - }; - - if (orientation && ("5678".indexOf(orientation) > -1)) { - ret.width = img.height; - ret.height = img.width; - } - - var scale = ret.width / ret.height; - - if (width && height) { - if (scale >= width / height) { - if (ret.width > width) { - ret.width = width; - ret.height = Math.ceil(width / scale); - } - } else { - if (ret.height > height) { - ret.height = height; - ret.width = Math.ceil(height * scale); - } - } - } - else if (width) { - if (width < ret.width) { - ret.width = width; - ret.height = Math.ceil(width / scale); - } - } - else if (height) { - if (height < ret.height) { - ret.width = Math.ceil(height * scale); - ret.height = height; - } - } - - // 超过这个值base64无法生成,在IOS上 - while (ret.width >= 3264 || ret.height >= 2448) { - ret.width *= 0.8; - ret.height *= 0.8; - } - - return ret; - }; - - /** - * 获取当前js文件所在路径,必须得在代码顶部执行此函数 - * @returns {string} - */ - function getCurrentJsDir () { - var src = document.scripts[document.scripts.length - 1].src; - - return src.substr(0, src.lastIndexOf('/')); - } - - window.lrz = function (file, opts) { - return new Lrz(file, opts); - }; - - // 版本号来自package.json,构建时自动填充 - window.lrz.version = '__packageJSON.version__'; - - module.exports = window.lrz; - - /** - * - *    ┏┓   ┏┓ - *   ┏┛┻━━━┛┻┓ - *   ┃       ┃ - *   ┃   ━   ┃ - *   ┃ ┳┛ ┗┳ ┃ - *   ┃       ┃ - *   ┃   ┻   ┃ - *   ┃       ┃ - *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting - *     ┃   ┃ 神兽保佑,代码无bug - *     ┃   ┃ - *     ┃   ┗━━━┓ - *     ┃      ┣┓ - *     ┃     ┏┛ - *     ┗┓┓┏━┳┓┏┛ - *      ┃┫┫ ┃┫┫ - *      ┗┻┛ ┗┻┛ - * - */ - - -/***/ } -/******/ ]); +!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="./dist/",t(0)}([function(e,t,n){n(5),n(6),e.exports=n(7)},function(e,t,n){(function(t){!function(n){function r(e,t){return function(){e.apply(t,arguments)}}function i(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],l(e,r(a,this),r(s,this))}function o(e){var t=this;return null===this._state?void this._deferreds.push(e):void f(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function a(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void l(r(t,e),r(a,this),r(s,this))}this._state=!0,this._value=e,c.call(this)}catch(n){s.call(this,n)}}function s(e){this._state=!1,this._value=e,c.call(this)}function c(){for(var e=0,t=this._deferreds.length;t>e;e++)o.call(this,this._deferreds[e]);this._deferreds=null}function u(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function l(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(i){if(r)return;r=!0,n(i)}}var f="function"==typeof t&&t||function(e){setTimeout(e,1)},h=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=this;return new i(function(r,i){o.call(n,new u(e,t,r,i))})},i.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&h(arguments[0])?arguments[0]:arguments);return new i(function(t,n){function r(o,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(o,e)},n)}e[o]=a,0===--i&&t(e)}catch(c){n(c)}}if(0===e.length)return t([]);for(var i=e.length,o=0;or;r++)e[r].then(t,n)})},i._setImmediateFn=function(e){f=e},i.prototype.always=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})},"undefined"!=typeof e&&e.exports?e.exports=i:n.Promise||(n.Promise=i)}(this)}).call(t,n(2).setImmediate)},function(e,t,n){(function(e,r){function i(e,t){this._id=e,this._clearFn=t}var o=n(3).nextTick,a=Function.prototype.apply,s=Array.prototype.slice,c={},u=0;t.setTimeout=function(){return new i(a.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new i(a.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},t.setImmediate="function"==typeof e?e:function(e){var n=u++,r=arguments.length<2?!1:s.call(arguments,1);return c[n]=!0,o(function(){c[n]&&(r?e.apply(null,r):e.call(null),t.clearImmediate(n))}),n},t.clearImmediate="function"==typeof r?r:function(e){delete c[e]}}).call(t,n(2).setImmediate,n(2).clearImmediate)},function(e,t){function n(){u=!1,a.length?c=a.concat(c):l=-1,c.length&&r()}function r(){if(!u){var e=setTimeout(n);u=!0;for(var t=c.length;t;){for(a=c,c=[];++l1)for(var n=1;na;a++)o[a]=n.charCodeAt(a);return i}function a(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="blob",n.onload=function(e){(200==this.status||0===this.status)&&t(this.response)},n.send()}function s(e,t){function n(n){var r=c(n),i=u(n);e.exifdata=r||{},e.iptcdata=i||{},t&&t.call(e)}if(e.src)if(/^data\:/i.test(e.src)){var r=o(e.src);n(r)}else if(/^blob\:/i.test(e.src)){var i=new FileReader;i.onload=function(e){n(e.target.result)},a(e.src,function(e){i.readAsArrayBuffer(e)})}else{var s=new XMLHttpRequest;s.onload=function(){200==this.status||0===this.status?n(s.response):t(new Error("Could not load image")),s=null},s.open("GET",e.src,!0),s.responseType="arraybuffer",s.send(null)}else if(window.FileReader&&(e instanceof window.Blob||e instanceof window.File)){var i=new FileReader;i.onload=function(e){m&&console.log("Got file of length "+e.target.result.byteLength),n(e.target.result)},i.readAsArrayBuffer(e)}}function c(e){var t=new DataView(e);if(m&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return m&&console.log("Not a valid JPEG"),!1;for(var n,r=2,i=e.byteLength;i>r;){if(255!=t.getUint8(r))return m&&console.log("Not a valid marker at offset "+r+", found: "+t.getUint8(r)),!1;if(n=t.getUint8(r+1),m&&console.log(n),225==n)return m&&console.log("Found 0xFFE1 marker"),g(t,r+4,t.getUint16(r+2)-2);r+=2+t.getUint16(r+2)}}function u(e){var t=new DataView(e);if(m&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return m&&console.log("Not a valid JPEG"),!1;for(var n=2,r=e.byteLength,i=function(e,t){return 56===e.getUint8(t)&&66===e.getUint8(t+1)&&73===e.getUint8(t+2)&&77===e.getUint8(t+3)&&4===e.getUint8(t+4)&&4===e.getUint8(t+5)};r>n;){if(i(t,n)){var o=t.getUint8(n+7);o%2!==0&&(o+=1),0===o&&(o=4);var a=n+8+o,s=t.getUint16(n+6+o);return l(e,a,s)}n++}}function l(e,t,n){for(var r,i,o,a,s,c=new DataView(e),u={},l=t;t+n>l;)28===c.getUint8(l)&&2===c.getUint8(l+1)&&(a=c.getUint8(l+2),a in b&&(o=c.getInt16(l+3),s=o+5,i=b[a],r=d(c,l+5,o),u.hasOwnProperty(i)?u[i]instanceof Array?u[i].push(r):u[i]=[u[i],r]:u[i]=r)),l++;return u}function f(e,t,n,r,i){var o,a,s,c=e.getUint16(n,!i),u={};for(s=0;c>s;s++)o=n+12*s+2,a=r[e.getUint16(o,!i)],!a&&m&&console.log("Unknown tag: "+e.getUint16(o,!i)),u[a]=h(e,o,t,n,i);return u}function h(e,t,n,r,i){var o,a,s,c,u,l,f=e.getUint16(t+2,!i),h=e.getUint32(t+4,!i),g=e.getUint32(t+8,!i)+n;switch(f){case 1:case 7:if(1==h)return e.getUint8(t+8,!i);for(o=h>4?g:t+8,a=[],c=0;h>c;c++)a[c]=e.getUint8(o+c);return a;case 2:return o=h>4?g:t+8,d(e,o,h-1);case 3:if(1==h)return e.getUint16(t+8,!i);for(o=h>2?g:t+8,a=[],c=0;h>c;c++)a[c]=e.getUint16(o+2*c,!i);return a;case 4:if(1==h)return e.getUint32(t+8,!i);for(a=[],c=0;h>c;c++)a[c]=e.getUint32(g+4*c,!i);return a;case 5:if(1==h)return u=e.getUint32(g,!i),l=e.getUint32(g+4,!i),s=new Number(u/l),s.numerator=u,s.denominator=l,s;for(a=[],c=0;h>c;c++)u=e.getUint32(g+8*c,!i),l=e.getUint32(g+4+8*c,!i),a[c]=new Number(u/l),a[c].numerator=u,a[c].denominator=l;return a;case 9:if(1==h)return e.getInt32(t+8,!i);for(a=[],c=0;h>c;c++)a[c]=e.getInt32(g+4*c,!i);return a;case 10:if(1==h)return e.getInt32(g,!i)/e.getInt32(g+4,!i);for(a=[],c=0;h>c;c++)a[c]=e.getInt32(g+8*c,!i)/e.getInt32(g+4+8*c,!i);return a}}function d(e,t,n){var r,i="";for(r=t;t+n>r;r++)i+=String.fromCharCode(e.getUint8(r));return i}function g(e,t){if("Exif"!=d(e,t,4))return m&&console.log("Not valid EXIF data! "+d(e,t,4)),!1;var n,r,i,o,a,s=t+6;if(18761==e.getUint16(s))n=!1;else{if(19789!=e.getUint16(s))return m&&console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"),!1;n=!0}if(42!=e.getUint16(s+2,!n))return m&&console.log("Not valid TIFF data! (no 0x002A)"),!1;var c=e.getUint32(s+4,!n);if(8>c)return m&&console.log("Not valid TIFF data! (First offset less than 8)",e.getUint32(s+4,!n)),!1;if(r=f(e,s,s+c,v,n),r.ExifIFDPointer){o=f(e,s,s+r.ExifIFDPointer,w,n);for(i in o){switch(i){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":o[i]=S[i][o[i]];break;case"ExifVersion":case"FlashpixVersion":o[i]=String.fromCharCode(o[i][0],o[i][1],o[i][2],o[i][3]);break;case"ComponentsConfiguration":o[i]=S.Components[o[i][0]]+S.Components[o[i][1]]+S.Components[o[i][2]]+S.Components[o[i][3]]}r[i]=o[i]}}if(r.GPSInfoIFDPointer){a=f(e,s,s+r.GPSInfoIFDPointer,y,n);for(i in a){switch(i){case"GPSVersionID":a[i]=a[i][0]+"."+a[i][1]+"."+a[i][2]+"."+a[i][3]}r[i]=a[i]}}return r}var m=!1,p=function(e){return e instanceof p?e:this instanceof p?void(this.EXIFwrapped=e):new p(e)};"undefined"!=typeof e&&e.exports&&(t=e.exports=p),t.EXIF=p;var w=p.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"},v=p.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},y=p.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},S=p.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}},b={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};p.getData=function(e,t){return(e instanceof Image||e instanceof HTMLImageElement)&&!e.complete?!1:(n(e)?t&&t.call(e):s(e,t),!0)},p.getTag=function(e,t){return n(e)?e.exifdata[t]:void 0},p.getAllTags=function(e){if(!n(e))return{};var t,r=e.exifdata,i={};for(t in r)r.hasOwnProperty(t)&&(i[t]=r[t]);return i},p.pretty=function(e){if(!n(e))return"";var t,r=e.exifdata,i="";for(t in r)r.hasOwnProperty(t)&&(i+="object"==typeof r[t]?r[t]instanceof Number?t+" : "+r[t]+" ["+r[t].numerator+"/"+r[t].denominator+"]\r\n":t+" : ["+r[t].length+" values]\r\n":t+" : "+r[t]+"\r\n");return i},p.readFromBinaryFile=function(e){return c(e)},r=[],i=function(){return p}.apply(t,r),!(void 0!==i&&(e.exports=i))}).call(this)},function(e,t,n){var r,i;!function(){function n(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var r=document.createElement("canvas");r.width=r.height=1;var i=r.getContext("2d");return i.drawImage(e,-t+1,0),0===i.getImageData(0,0,1,1).data[3]}return!1}function o(e,t,n){var r=document.createElement("canvas");r.width=1,r.height=n;var i=r.getContext("2d");i.drawImage(e,0,0);for(var o=i.getImageData(0,0,1,n).data,a=0,s=n,c=n;c>a;){var u=o[4*(c-1)+3];0===u?s=c:a=c,c=s+a>>1}var l=c/n;return 0===l?1:l}function a(e,t,n){var r=document.createElement("canvas");return s(e,r,t,n),r.toDataURL("image/jpeg",t.quality||.8)}function s(e,t,r,i){var a=e.naturalWidth,s=e.naturalHeight,u=r.width,l=r.height,f=t.getContext("2d");f.save(),c(t,f,u,l,r.orientation);var h=n(e);h&&(a/=2,s/=2);var d=1024,g=document.createElement("canvas");g.width=g.height=d;for(var m=g.getContext("2d"),p=i?o(e,a,s):1,w=Math.ceil(d*u/a),v=Math.ceil(d*l/s/p),y=0,S=0;s>y;){for(var b=0,I=0;a>b;)m.clearRect(0,0,d,d),m.drawImage(e,-b,-y),f.drawImage(g,0,0,d,d,I,S,w,v),b+=d,I+=w;y+=d,S+=v}f.restore(),g=m=null}function c(e,t,n,r,i){switch(i){case 5:case 6:case 7:case 8:e.width=r,e.height=n;break;default:e.width=n,e.height=r}switch(i){case 2:t.translate(n,0),t.scale(-1,1);break;case 3:t.translate(n,r),t.rotate(Math.PI);break;case 4:t.translate(0,r),t.scale(1,-1);break;case 5:t.rotate(.5*Math.PI),t.scale(1,-1);break;case 6:t.rotate(.5*Math.PI),t.translate(0,-r);break;case 7:t.rotate(.5*Math.PI),t.translate(n,-r),t.scale(-1,1);break;case 8:t.rotate(-.5*Math.PI),t.translate(-n,0)}}function u(e){if(window.Blob&&e instanceof Blob){var t=new Image,n=window.URL&&window.URL.createObjectURL?window.URL:window.webkitURL&&window.webkitURL.createObjectURL?window.webkitURL:null;if(!n)throw Error("No createObjectURL function found to create blob url");t.src=n.createObjectURL(e),this.blob=e,e=t}if(!e.naturalWidth&&!e.naturalHeight){var r=this;e.onload=function(){var e=r.imageLoadListeners;if(e){r.imageLoadListeners=null;for(var t=0,n=e.length;n>t;t++)e[t]()}},this.imageLoadListeners=[]}this.srcImage=e}u.prototype.render=function(e,t,n){if(this.imageLoadListeners){var r=this;return void this.imageLoadListeners.push(function(){r.render(e,t,n)})}t=t||{};var i=this.srcImage,o=i.src,c=o.length,u=i.naturalWidth,l=i.naturalHeight,f=t.width,h=t.height,d=t.maxWidth,g=t.maxHeight,m=this.blob&&"image/jpeg"===this.blob.type||0===o.indexOf("data:image/jpeg")||o.indexOf(".jpg")===c-4||o.indexOf(".jpeg")===c-5;f&&!h?h=l*f/u<<0:h&&!f?f=u*h/l<<0:(f=u,h=l),d&&f>d&&(f=d,h=l*f/u<<0),g&&h>g&&(h=g,f=u*h/l<<0);var p={width:f,height:h};for(var w in t)p[w]=t[w];var v=e.tagName.toLowerCase();"img"===v?e.src=a(this.srcImage,p,m):"canvas"===v&&s(this.srcImage,e,p,m),"function"==typeof this.onrender&&this.onrender(e),n&&n()},r=[],i=function(){return u}.apply(t,r),!(void 0!==i&&(e.exports=i))}()},function(e,t){function n(e){function t(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],n=0;64>n;n++){var r=F((t[n]*e+50)/100);1>r?r=1:r>255&&(r=255),U[N[n]]=r}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],o=0;64>o;o++){var a=F((i[o]*e+50)/100);1>a?a=1:a>255&&(a=255),D[N[o]]=a}for(var s=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],c=0,u=0;8>u;u++)for(var l=0;8>l;l++)C[c]=1/(U[N[c]]*s[u]*s[l]*8),T[c]=1/(D[N[c]]*s[u]*s[l]*8),c++}function n(e,t){for(var n=0,r=0,i=new Array,o=1;16>=o;o++){for(var a=1;a<=e[o];a++)i[t[r]]=[],i[t[r]][0]=n,i[t[r]][1]=o,r++,n++;n*=2}return i}function r(){y=n(W,V),S=n(q,X),b=n(H,z),I=n(J,Y)}function i(){for(var e=1,t=2,n=1;15>=n;n++){for(var r=e;t>r;r++)L[32767+r]=n,x[32767+r]=[],x[32767+r][1]=n,x[32767+r][0]=r;for(var i=-(t-1);-e>=i;i++)L[32767+i]=n,x[32767+i]=[],x[32767+i][1]=n,x[32767+i][0]=t-1+i;e<<=1,t<<=1}}function o(){for(var e=0;256>e;e++)B[e]=19595*e,B[e+256>>0]=38470*e,B[e+512>>0]=7471*e+32768,B[e+768>>0]=-11059*e,B[e+1024>>0]=-21709*e,B[e+1280>>0]=32768*e+8421375,B[e+1536>>0]=-27439*e,B[e+1792>>0]=-5329*e}function a(e){for(var t=e[0],n=e[1]-1;n>=0;)t&1<_&&(255==M?(s(255),s(0)):s(M),_=7,M=0)}function s(e){G.push(j[e])}function c(e){s(e>>8&255),s(255&e)}function u(e,t){var n,r,i,o,a,s,c,u,l,f=0;const h=8,d=64;for(l=0;h>l;++l){n=e[f],r=e[f+1],i=e[f+2],o=e[f+3],a=e[f+4],s=e[f+5],c=e[f+6],u=e[f+7];var g=n+u,m=n-u,p=r+c,w=r-c,v=i+s,y=i-s,S=o+a,b=o-a,I=g+S,P=g-S,F=p+v,U=p-v;e[f]=I+F,e[f+4]=I-F;var D=.707106781*(U+P);e[f+2]=P+D,e[f+6]=P-D,I=b+y,F=y+w,U=w+m;var C=.382683433*(I-U),T=.5411961*I+C,x=1.306562965*U+C,L=.707106781*F,A=m+L,G=m-L;e[f+5]=G+T,e[f+3]=G-T,e[f+1]=A+x,e[f+7]=A-x,f+=8}for(f=0,l=0;h>l;++l){n=e[f],r=e[f+8],i=e[f+16],o=e[f+24],a=e[f+32],s=e[f+40],c=e[f+48],u=e[f+56];var M=n+u,_=n-u,E=r+c,O=r-c,k=i+s,j=i-s,B=o+a,N=o-a,W=M+B,V=M-B,H=E+k,z=E-k;e[f]=W+H,e[f+32]=W-H;var q=.707106781*(z+V);e[f+16]=V+q,e[f+48]=V-q,W=N+j,H=j+O,z=O+_;var X=.382683433*(W-z),J=.5411961*W+X,Y=1.306562965*z+X,Q=.707106781*H,K=_+Q,Z=_-Q;e[f+40]=Z+J,e[f+24]=Z-J,e[f+8]=K+Y,e[f+56]=K-Y,f++}var $;for(l=0;d>l;++l)$=e[l]*t[l],R[l]=$>0?$+.5|0:$-.5|0;return R}function l(){c(65504),c(16),s(74),s(70),s(73),s(70),s(0),s(1),s(1),s(0),c(1),c(1),s(0),s(0)}function f(e,t){c(65472),c(17),s(8),c(t),c(e),s(3),s(1),s(17),s(0),s(2),s(17),s(1),s(3),s(17),s(1)}function h(){c(65499),c(132),s(0);for(var e=0;64>e;e++)s(U[e]);s(1);for(var t=0;64>t;t++)s(D[t])}function d(){c(65476),c(418),s(0);for(var e=0;16>e;e++)s(W[e+1]);for(var t=0;11>=t;t++)s(V[t]);s(16);for(var n=0;16>n;n++)s(H[n+1]);for(var r=0;161>=r;r++)s(z[r]);s(1);for(var i=0;16>i;i++)s(q[i+1]);for(var o=0;11>=o;o++)s(X[o]);s(17);for(var a=0;16>a;a++)s(J[a+1]);for(var u=0;161>=u;u++)s(Y[u])}function g(){c(65498),c(12),s(3),s(1),s(0),s(2),s(17),s(3),s(17),s(0),s(63),s(0)}function m(e,t,n,r,i){var o,s=i[0],c=i[240];const l=16,f=63,h=64;for(var d=u(e,t),g=0;h>g;++g)A[N[g]]=d[g];var m=A[0]-n;n=A[0],0==m?a(r[0]):(o=32767+m,a(r[L[o]]),a(x[o]));for(var p=63;p>0&&0==A[p];p--);if(0==p)return a(s),n;for(var w,v=1;p>=v;){for(var y=v;0==A[v]&&p>=v;++v);var S=v-y;if(S>=l){w=S>>4;for(var b=1;w>=b;++b)a(c);S=15&S}o=32767+A[v],a(i[(S<<4)+L[o]]),a(x[o]),v++}return p!=f&&a(s),n}function p(){for(var e=String.fromCharCode,t=0;256>t;t++)j[t]=e(t)}function w(e){if(0>=e&&(e=1),e>100&&(e=100),P!=e){var n=0;n=50>e?Math.floor(5e3/e):Math.floor(200-2*e),t(n),P=e}}function v(){var t=(new Date).getTime();e||(e=50),p(),r(),i(),o(),w(e);(new Date).getTime()-t}var y,S,b,I,P,F=(Math.round,Math.floor),U=new Array(64),D=new Array(64),C=new Array(64),T=new Array(64),x=new Array(65535),L=new Array(65535),R=new Array(64),A=new Array(64),G=[],M=0,_=7,E=new Array(64),O=new Array(64),k=new Array(64),j=new Array(256),B=new Array(2048),N=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],W=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],H=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],z=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],q=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],X=[0,1,2,3,4,5,6,7,8,9,10,11],J=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],Y=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(e,t,n){var r=(new Date).getTime();t&&w(t),G=new Array,M=0,_=7,c(65496),l(),h(),f(e.width,e.height),d(),g();var i=0,o=0,s=0;M=0,_=7,this.encode.displayName="_encode_";for(var u,p,v,P,F,U,D,x,L,R=e.data,A=e.width,j=e.height,N=4*A,W=0;j>W;){for(u=0;N>u;){for(F=N*W+u,U=F,D=-1,x=0,L=0;64>L;L++)x=L>>3,D=4*(7&L),U=F+x*N+D,W+x>=j&&(U-=N*(W+1+x-j)),u+D>=N&&(U-=u+D-N+4),p=R[U++],v=R[U++],P=R[U++],E[L]=(B[p]+B[v+256>>0]+B[P+512>>0]>>16)-128,O[L]=(B[p+768>>0]+B[v+1024>>0]+B[P+1280>>0]>>16)-128,k[L]=(B[p+1280>>0]+B[v+1536>>0]+B[P+1792>>0]>>16)-128;i=m(E,C,i,y,b),o=m(O,T,o,S,I),s=m(k,T,s,S,I),u+=32}W+=8}if(_>=0){var V=[];V[1]=_+1,V[0]=(1<<_+1)-1,a(V)}if(c(65497),n){for(var H=G.length,z=new Uint8Array(H),q=0;H>q;q++)z[q]=G[q].charCodeAt();G=[];(new Date).getTime()-r;return z}var X="data:image/jpeg;base64,"+btoa(G.join(""));G=[];(new Date).getTime()-r;return X},v()}e.exports=n},function(e,t,n){function r(e,t){var n=this;if(!e)throw new Error("没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7");t=t||{},n.defaults={width:null,height:null,quality:.7},n.file=e;for(var r in t)t.hasOwnProperty(r)&&(n.defaults[r]=t[r]);return this.init()}function i(){var e=document.scripts[document.scripts.length-1].src;return e.substr(0,e.lastIndexOf("/"))}n.p=i()+"/",window.URL=window.URL||window.webkitURL;var o=n(1),a=n(4),s=function(e){var t=/OS (\d)_.* like Mac OS X/g.exec(e),n=/Android (\d.*?);/g.exec(e);return{oldIOS:t?+t.pop()<8:!1,oldAndroid:n?+n.pop().substr(0,3)<4.5:!1,iOS:/\(i[^;]+;( U;)? CPU.+Mac OS X/.test(e),android:/Android/g.test(e),mQQBrowser:/MQQBrowser/g.test(e)}}(navigator.userAgent);r.prototype.init=function(){var e=this,t=e.file,n=new Image,r=document.createElement("canvas"),i="string"==typeof t?t:URL.createObjectURL(t);if(e.img=n,e.blob=i,e.canvas=r,!document.createElement("canvas").getContext)throw new Error("浏览器不支持canvas");return new o(function(t,r){n.onerror=function(){throw new Error("加载图片文件失败")},n.onload=function(){e._getBase64().then(function(e){return e.length<10&&r("生成base64失败"),e}).then(function(n){t({origin:e.file,base64:n,base64Len:n.length});for(var r in e)e.hasOwnProperty(r)&&(e[r]=null);URL.revokeObjectURL(e.blob)})},n.crossOrigin="*",n.src=i})},r.prototype._getBase64=function(){var e=this,t=e.img,n=e.file,r=e.canvas;return new o(function(i){a.getData("object"==typeof n?n:t,function(){e.orientation=a.getTag(this,"Orientation"),e.resize=e._getResize(),e.ctx=r.getContext("2d"),r.width=e.resize.width,r.height=e.resize.height,e.ctx.fillStyle="#fff",e.ctx.fillRect(0,0,r.width,r.height),s.oldIOS?e._createBase64ForOldIOS().then(i):e._createBase64().then(i)})})},r.prototype._createBase64ForOldIOS=function(){var e=this,t=e.img,r=e.canvas,i=e.defaults,a=e.orientation;return new o(function(e){!function(){var o=[n(5)];(function(n){var o=new n(t);"5678".indexOf(a)>-1?o.render(r,{width:r.height,height:r.width,orientation:a}):o.render(r,{width:r.width,height:r.height,orientation:a}),e(r.toDataURL("image/jpeg",i.quality))}).apply(null,o)}()})},r.prototype._createBase64=function(){var e=this,t=e.resize,r=e.img,i=e.canvas,a=e.ctx,c=e.defaults,u=e.orientation;switch(u){case 3:a.rotate(180*Math.PI/180),a.drawImage(r,-t.width,-t.height,t.width,t.height);break;case 6:a.rotate(90*Math.PI/180),a.drawImage(r,0,-t.width,t.height,t.width);break;case 8:a.rotate(270*Math.PI/180),a.drawImage(r,-t.height,0,t.height,t.width);break;case 2:a.translate(t.width,0),a.scale(-1,1),a.drawImage(r,0,0,t.width,t.height);break;case 4:a.translate(t.width,0),a.scale(-1,1),a.rotate(180*Math.PI/180),a.drawImage(r,-t.width,-t.height,t.width,t.height);break;case 5:a.translate(t.width,0),a.scale(-1,1),a.rotate(90*Math.PI/180),a.drawImage(r,0,-t.width,t.height,t.width);break;case 7:a.translate(t.width,0),a.scale(-1,1),a.rotate(270*Math.PI/180),a.drawImage(r,-t.height,0,t.height,t.width);break;default:a.drawImage(r,0,0,t.width,t.height)}return new o(function(e){s.oldAndroid||s.mQQBrowser||!navigator.userAgent?!function(){var t=[n(6)];(function(t){var n=new t,r=a.getImageData(0,0,i.width,i.height);e(n.encode(r,100*c.quality))}).apply(null,t)}():e(i.toDataURL("image/jpeg",c.quality))})},r.prototype._getResize=function(){var e=this,t=e.img,n=e.defaults,r=n.width,i=n.height,o=e.orientation,a={width:t.width,height:t.height};o&&"5678".indexOf(o)>-1&&(a.width=t.height,a.height=t.width);var s=a.width/a.height;for(r&&i?s>=r/i?a.width>r&&(a.width=r,a.height=Math.ceil(r/s)):a.height>i&&(a.height=i,a.width=Math.ceil(i*s)):r?r=3264||a.height>=2448;)a.width*=.8,a.height*=.8;return a},window.lrz=function(e,t){return new r(e,t)},window.lrz.version="4.2.1",e.exports=window.lrz}]); //# sourceMappingURL=lrz.all.bundle.js.map \ No newline at end of file diff --git a/dist/lrz.all.bundle.js.map b/dist/lrz.all.bundle.js.map new file mode 100644 index 0000000..699af3e --- /dev/null +++ b/dist/lrz.all.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///lrz.all.bundle.js","webpack:///webpack/bootstrap d11662f66af4feed7794?2b0f","webpack:///./src/lrz.all.js","webpack:///src/lib/Promise.js?0bd1","webpack:///(webpack)/~/node-libs-browser/~/timers-browserify/main.js?69c1","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js?6f0e","webpack:///src/lib/exif.js?b270","webpack:///src/lib/megapix-image.js?f828","webpack:///src/lib/jpeg_encoder_basic.js?1bcc","webpack:///src/lrz.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","setImmediate","root","bind","fn","thisArg","apply","arguments","Promise","this","TypeError","_state","_value","_deferreds","doResolve","resolve","reject","handle","deferred","me","push","asap","cb","onFulfilled","onRejected","ret","e","newValue","then","finale","i","len","length","Handler","done","value","reason","ex","setTimeout","isArray","Array","Object","prototype","toString","all","args","slice","res","val","remaining","constructor","race","values","_setImmediateFn","always","callback","clearImmediate","Timeout","clearFn","_id","_clearFn","nextTick","Function","immediateIds","nextImmediateId","window","clearTimeout","setInterval","clearInterval","timeout","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","run","Item","fun","array","noop","process","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","Error","cwd","chdir","dir","umask","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","imageHasData","img","base64ToArrayBuffer","base64","contentType","match","replace","binary","atob","buffer","ArrayBuffer","view","Uint8Array","charCodeAt","objectURLToBlob","url","http","XMLHttpRequest","open","responseType","onload","status","response","send","getImageData","handleBinaryFile","binFile","data","findEXIFinJPEG","iptcdata","findIPTCinJPEG","exifdata","src","test","arrayBuffer","fileReader","FileReader","target","result","blob","readAsArrayBuffer","Blob","File","debug","console","log","byteLength","file","dataView","DataView","getUint8","marker","offset","readEXIFData","getUint16","isFieldSegmentStart","nameHeaderLength","startOffset","sectionLength","readIPTCData","fieldValue","fieldName","dataSize","segmentType","segmentSize","segmentStartPos","IptcFieldMap","getInt16","getStringFromDB","hasOwnProperty","readTags","tiffStart","dirStart","strings","bigEnd","entryOffset","tag","entries","tags","readTagValue","vals","n","numerator","denominator","type","numValues","getUint32","valueOffset","Number","getInt32","start","outstr","String","fromCharCode","exifData","gpsData","tiffOffset","firstIFDOffset","TiffTags","ExifIFDPointer","ExifTags","StringValues","Components","GPSInfoIFDPointer","GPSTags","EXIF","obj","EXIFwrapped","Tags",36864,40960,40961,40962,40963,37121,37122,37500,37510,40964,36867,36868,37520,37521,37522,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37396,37386,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,40965,42016,256,257,34665,34853,258,259,262,274,277,284,530,531,282,283,296,273,278,279,513,514,301,318,319,529,532,306,270,271,272,305,315,33432,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,"ExposureProgram","MeteringMode",255,"LightSource","Flash",31,32,65,69,71,73,77,79,89,93,95,"SensingMethod","SceneCaptureType","SceneType","CustomRendered","WhiteBalance","GainControl","Contrast","Saturation","Sharpness","SubjectDistanceRange","FileSource",120,110,55,80,85,122,105,116,"getData","Image","HTMLImageElement","complete","getTag","getAllTags","a","pretty","strPretty","readFromBinaryFile","undefined","detectSubsampling","iw","naturalWidth","ih","naturalHeight","canvas","document","createElement","width","height","ctx","getContext","drawImage","detectVerticalSquash","sy","ey","py","alpha","ratio","renderImageToDataURL","options","doSquash","renderImageToCanvas","toDataURL","quality","save","transformCoordinate","orientation","subsampled","d","tmpCanvas","tmpCtx","vertSquashRatio","dw","Math","ceil","dh","dy","sx","dx","clearRect","restore","translate","scale","rotate","PI","MegaPixImage","srcImage","URL","createObjectURL","webkitURL","_this","listeners","imageLoadListeners","render","srcLength","imgWidth","imgHeight","maxWidth","maxHeight","indexOf","opt","k","tagName","toLowerCase","onrender","JPEGEncoder","l","M","ag","af","ae","aj","O","ah","ad","ai","K","ac","ab","ak","aa","Z","q","W","u","g","h","v","Y","G","w","E","T","J","B","z","V","C","X","t","F","j","N","aZ","ap","aL","aK","aJ","aI","aH","aD","aC","aB","aR","aN","aq","aY","aO","aX","aP","aU","aQ","aT","aS","an","am","al","ax","at","aw","au","av","ar","az","aG","aW","ao","aV","ay","aF","aM","a1","a0","aA","aE","P","b","r","D","H","I","L","S","y","R","x","floor","Q","Date","getTime","round","A","f","U","encode","displayName","btoa","join","Lrz","opts","that","defaults","init","getCurrentJsDir","scripts","substr","lastIndexOf","exif","UA","userAgent","ISOldIOS","exec","isOldAndroid","oldIOS","pop","oldAndroid","iOS","android","mQQBrowser","navigator","onerror","_getBase64","origin","base64Len","revokeObjectURL","crossOrigin","resize","_getResize","fillStyle","fillRect","_createBase64ForOldIOS","_createBase64","__WEBPACK_AMD_REQUIRE_ARRAY__","mpImg","encoder","lrz"],"mappings":"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","file":"lrz.all.bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"./dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(5);\n\t__webpack_require__(6);\n\t\n\tmodule.exports = __webpack_require__(7);\n\t\n\t/**\n\t *\n\t *    ┏┓   ┏┓\n\t *   ┏┛┻━━━┛┻┓\n\t *   ┃       ┃\n\t *   ┃   ━   ┃\n\t *   ┃ ┳┛ ┗┳ ┃\n\t *   ┃       ┃\n\t *   ┃   ┻   ┃\n\t *   ┃       ┃\n\t *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n\t *     ┃   ┃ 神兽保佑,代码无bug\n\t *     ┃   ┃\n\t *     ┃   ┗━━━┓\n\t *     ┃      ┣┓\n\t *     ┃     ┏┛\n\t *     ┗┓┓┏━┳┓┏┛\n\t *      ┃┫┫ ┃┫┫\n\t *      ┗┻┛ ┗┻┛\n\t *\n\t */\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate) {(function (root) {\n\t\n\t // Use polyfill for setImmediate for performance gains\n\t var asap = (typeof setImmediate === 'function' && setImmediate) ||\n\t function (fn) {\n\t setTimeout(fn, 1);\n\t };\n\t\n\t // Polyfill for Function.prototype.bind\n\t function bind (fn, thisArg) {\n\t return function () {\n\t fn.apply(thisArg, arguments);\n\t }\n\t }\n\t\n\t var isArray = Array.isArray || function (value) {\n\t return Object.prototype.toString.call(value) === \"[object Array]\"\n\t };\n\t\n\t function Promise (fn) {\n\t if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n\t if (typeof fn !== 'function') throw new TypeError('not a function');\n\t this._state = null;\n\t this._value = null;\n\t this._deferreds = []\n\t\n\t doResolve(fn, bind(resolve, this), bind(reject, this))\n\t }\n\t\n\t function handle (deferred) {\n\t var me = this;\n\t if (this._state === null) {\n\t this._deferreds.push(deferred);\n\t return\n\t }\n\t asap(function () {\n\t var cb = me._state ? deferred.onFulfilled : deferred.onRejected\n\t if (cb === null) {\n\t (me._state ? deferred.resolve : deferred.reject)(me._value);\n\t return;\n\t }\n\t var ret;\n\t try {\n\t ret = cb(me._value);\n\t }\n\t catch (e) {\n\t deferred.reject(e);\n\t return;\n\t }\n\t deferred.resolve(ret);\n\t })\n\t }\n\t\n\t function resolve (newValue) {\n\t try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n\t if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.');\n\t if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n\t var then = newValue.then;\n\t if (typeof then === 'function') {\n\t doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n\t return;\n\t }\n\t }\n\t this._state = true;\n\t this._value = newValue;\n\t finale.call(this);\n\t } catch (e) {\n\t reject.call(this, e);\n\t }\n\t }\n\t\n\t function reject (newValue) {\n\t this._state = false;\n\t this._value = newValue;\n\t finale.call(this);\n\t }\n\t\n\t function finale () {\n\t for (var i = 0, len = this._deferreds.length; i < len; i++) {\n\t handle.call(this, this._deferreds[i]);\n\t }\n\t this._deferreds = null;\n\t }\n\t\n\t function Handler (onFulfilled, onRejected, resolve, reject) {\n\t this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n\t this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n\t this.resolve = resolve;\n\t this.reject = reject;\n\t }\n\t\n\t /**\n\t * Take a potentially misbehaving resolver function and make sure\n\t * onFulfilled and onRejected are only called once.\n\t *\n\t * Makes no guarantees about asynchrony.\n\t */\n\t function doResolve (fn, onFulfilled, onRejected) {\n\t var done = false;\n\t try {\n\t fn(function (value) {\n\t if (done) return;\n\t done = true;\n\t onFulfilled(value);\n\t }, function (reason) {\n\t if (done) return;\n\t done = true;\n\t onRejected(reason);\n\t })\n\t } catch (ex) {\n\t if (done) return;\n\t done = true;\n\t onRejected(ex);\n\t }\n\t }\n\t\n\t Promise.prototype['catch'] = function (onRejected) {\n\t return this.then(null, onRejected);\n\t };\n\t\n\t Promise.prototype.then = function (onFulfilled, onRejected) {\n\t var me = this;\n\t return new Promise(function (resolve, reject) {\n\t handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n\t })\n\t };\n\t\n\t Promise.all = function () {\n\t var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n\t\n\t return new Promise(function (resolve, reject) {\n\t if (args.length === 0) return resolve([]);\n\t var remaining = args.length;\n\t\n\t function res (i, val) {\n\t try {\n\t if (val && (typeof val === 'object' || typeof val === 'function')) {\n\t var then = val.then;\n\t if (typeof then === 'function') {\n\t then.call(val, function (val) {\n\t res(i, val)\n\t }, reject);\n\t return;\n\t }\n\t }\n\t args[i] = val;\n\t if (--remaining === 0) {\n\t resolve(args);\n\t }\n\t } catch (ex) {\n\t reject(ex);\n\t }\n\t }\n\t\n\t for (var i = 0; i < args.length; i++) {\n\t res(i, args[i]);\n\t }\n\t });\n\t };\n\t\n\t Promise.resolve = function (value) {\n\t if (value && typeof value === 'object' && value.constructor === Promise) {\n\t return value;\n\t }\n\t\n\t return new Promise(function (resolve) {\n\t resolve(value);\n\t });\n\t };\n\t\n\t Promise.reject = function (value) {\n\t return new Promise(function (resolve, reject) {\n\t reject(value);\n\t });\n\t };\n\t\n\t Promise.race = function (values) {\n\t return new Promise(function (resolve, reject) {\n\t for (var i = 0, len = values.length; i < len; i++) {\n\t values[i].then(resolve, reject);\n\t }\n\t });\n\t };\n\t\n\t /**\n\t * Set the immediate function to execute callbacks\n\t * @param fn {function} Function to execute\n\t * @private\n\t */\n\t Promise._setImmediateFn = function _setImmediateFn (fn) {\n\t asap = fn;\n\t };\n\t\n\t\n\t Promise.prototype.always = function (callback) {\n\t var constructor = this.constructor;\n\t\n\t return this.then(function (value) {\n\t return constructor.resolve(callback()).then(function () {\n\t return value;\n\t });\n\t }, function (reason) {\n\t return constructor.resolve(callback()).then(function () {\n\t throw reason;\n\t });\n\t });\n\t };\n\t\n\t if (typeof module !== 'undefined' && module.exports) {\n\t module.exports = Promise;\n\t } else if (!root.Promise) {\n\t root.Promise = Promise;\n\t }\n\t\n\t})(this);\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(3).nextTick;\n\tvar apply = Function.prototype.apply;\n\tvar slice = Array.prototype.slice;\n\tvar immediateIds = {};\n\tvar nextImmediateId = 0;\n\t\n\t// DOM APIs, for completeness\n\t\n\texports.setTimeout = function() {\n\t return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n\t};\n\texports.setInterval = function() {\n\t return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n\t};\n\texports.clearTimeout =\n\texports.clearInterval = function(timeout) { timeout.close(); };\n\t\n\tfunction Timeout(id, clearFn) {\n\t this._id = id;\n\t this._clearFn = clearFn;\n\t}\n\tTimeout.prototype.unref = Timeout.prototype.ref = function() {};\n\tTimeout.prototype.close = function() {\n\t this._clearFn.call(window, this._id);\n\t};\n\t\n\t// Does not start the time, just sets up the members needed.\n\texports.enroll = function(item, msecs) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = msecs;\n\t};\n\t\n\texports.unenroll = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = -1;\n\t};\n\t\n\texports._unrefActive = exports.active = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t\n\t var msecs = item._idleTimeout;\n\t if (msecs >= 0) {\n\t item._idleTimeoutId = setTimeout(function onTimeout() {\n\t if (item._onTimeout)\n\t item._onTimeout();\n\t }, msecs);\n\t }\n\t};\n\t\n\t// That's not how node.js implements it but the exposed api is the same.\n\texports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n\t var id = nextImmediateId++;\n\t var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\t\n\t immediateIds[id] = true;\n\t\n\t nextTick(function onNextTick() {\n\t if (immediateIds[id]) {\n\t // fn.call() is faster so we optimize for the common use-case\n\t // @see http://jsperf.com/call-apply-segu\n\t if (args) {\n\t fn.apply(null, args);\n\t } else {\n\t fn.call(null);\n\t }\n\t // Prevent ids from leaking\n\t exports.clearImmediate(id);\n\t }\n\t });\n\t\n\t return id;\n\t};\n\t\n\texports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n\t delete immediateIds[id];\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate, __webpack_require__(2).clearImmediate))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\t\n\tvar process = module.exports = {};\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = setTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t clearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t setTimeout(drainQueue, 0);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* exif */\n\t(function () {\n\t\n\t var debug = false;\n\t\n\t var root = this;\n\t\n\t var EXIF = function (obj) {\n\t if (obj instanceof EXIF) return obj;\n\t if (!(this instanceof EXIF)) return new EXIF(obj);\n\t this.EXIFwrapped = obj;\n\t };\n\t\n\t if (true) {\n\t if (typeof module !== 'undefined' && module.exports) {\n\t exports = module.exports = EXIF;\n\t }\n\t exports.EXIF = EXIF;\n\t } else {\n\t root.EXIF = EXIF;\n\t }\n\t\n\t var ExifTags = EXIF.Tags = {\n\t\n\t // version tags\n\t 0x9000: \"ExifVersion\", // EXIF version\n\t 0xA000: \"FlashpixVersion\", // Flashpix format version\n\t\n\t // colorspace tags\n\t 0xA001: \"ColorSpace\", // Color space information tag\n\t\n\t // image configuration\n\t 0xA002: \"PixelXDimension\", // Valid width of meaningful image\n\t 0xA003: \"PixelYDimension\", // Valid height of meaningful image\n\t 0x9101: \"ComponentsConfiguration\", // Information about channels\n\t 0x9102: \"CompressedBitsPerPixel\", // Compressed bits per pixel\n\t\n\t // user information\n\t 0x927C: \"MakerNote\", // Any desired information written by the manufacturer\n\t 0x9286: \"UserComment\", // Comments by user\n\t\n\t // related file\n\t 0xA004: \"RelatedSoundFile\", // Name of related sound file\n\t\n\t // date and time\n\t 0x9003: \"DateTimeOriginal\", // Date and time when the original image was generated\n\t 0x9004: \"DateTimeDigitized\", // Date and time when the image was stored digitally\n\t 0x9290: \"SubsecTime\", // Fractions of seconds for DateTime\n\t 0x9291: \"SubsecTimeOriginal\", // Fractions of seconds for DateTimeOriginal\n\t 0x9292: \"SubsecTimeDigitized\", // Fractions of seconds for DateTimeDigitized\n\t\n\t // picture-taking conditions\n\t 0x829A: \"ExposureTime\", // Exposure time (in seconds)\n\t 0x829D: \"FNumber\", // F number\n\t 0x8822: \"ExposureProgram\", // Exposure program\n\t 0x8824: \"SpectralSensitivity\", // Spectral sensitivity\n\t 0x8827: \"ISOSpeedRatings\", // ISO speed rating\n\t 0x8828: \"OECF\", // Optoelectric conversion factor\n\t 0x9201: \"ShutterSpeedValue\", // Shutter speed\n\t 0x9202: \"ApertureValue\", // Lens aperture\n\t 0x9203: \"BrightnessValue\", // Value of brightness\n\t 0x9204: \"ExposureBias\", // Exposure bias\n\t 0x9205: \"MaxApertureValue\", // Smallest F number of lens\n\t 0x9206: \"SubjectDistance\", // Distance to subject in meters\n\t 0x9207: \"MeteringMode\", // Metering mode\n\t 0x9208: \"LightSource\", // Kind of light source\n\t 0x9209: \"Flash\", // Flash status\n\t 0x9214: \"SubjectArea\", // Location and area of main subject\n\t 0x920A: \"FocalLength\", // Focal length of the lens in mm\n\t 0xA20B: \"FlashEnergy\", // Strobe energy in BCPS\n\t 0xA20C: \"SpatialFrequencyResponse\", //\n\t 0xA20E: \"FocalPlaneXResolution\", // Number of pixels in width direction per FocalPlaneResolutionUnit\n\t 0xA20F: \"FocalPlaneYResolution\", // Number of pixels in height direction per FocalPlaneResolutionUnit\n\t 0xA210: \"FocalPlaneResolutionUnit\", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution\n\t 0xA214: \"SubjectLocation\", // Location of subject in image\n\t 0xA215: \"ExposureIndex\", // Exposure index selected on camera\n\t 0xA217: \"SensingMethod\", // Image sensor type\n\t 0xA300: \"FileSource\", // Image source (3 == DSC)\n\t 0xA301: \"SceneType\", // Scene type (1 == directly photographed)\n\t 0xA302: \"CFAPattern\", // Color filter array geometric pattern\n\t 0xA401: \"CustomRendered\", // Special processing\n\t 0xA402: \"ExposureMode\", // Exposure mode\n\t 0xA403: \"WhiteBalance\", // 1 = auto white balance, 2 = manual\n\t 0xA404: \"DigitalZoomRation\", // Digital zoom ratio\n\t 0xA405: \"FocalLengthIn35mmFilm\", // Equivalent foacl length assuming 35mm film camera (in mm)\n\t 0xA406: \"SceneCaptureType\", // Type of scene\n\t 0xA407: \"GainControl\", // Degree of overall image gain adjustment\n\t 0xA408: \"Contrast\", // Direction of contrast processing applied by camera\n\t 0xA409: \"Saturation\", // Direction of saturation processing applied by camera\n\t 0xA40A: \"Sharpness\", // Direction of sharpness processing applied by camera\n\t 0xA40B: \"DeviceSettingDescription\", //\n\t 0xA40C: \"SubjectDistanceRange\", // Distance to subject\n\t\n\t // other tags\n\t 0xA005: \"InteroperabilityIFDPointer\",\n\t 0xA420: \"ImageUniqueID\" // Identifier assigned uniquely to each image\n\t };\n\t\n\t var TiffTags = EXIF.TiffTags = {\n\t 0x0100: \"ImageWidth\",\n\t 0x0101: \"ImageHeight\",\n\t 0x8769: \"ExifIFDPointer\",\n\t 0x8825: \"GPSInfoIFDPointer\",\n\t 0xA005: \"InteroperabilityIFDPointer\",\n\t 0x0102: \"BitsPerSample\",\n\t 0x0103: \"Compression\",\n\t 0x0106: \"PhotometricInterpretation\",\n\t 0x0112: \"Orientation\",\n\t 0x0115: \"SamplesPerPixel\",\n\t 0x011C: \"PlanarConfiguration\",\n\t 0x0212: \"YCbCrSubSampling\",\n\t 0x0213: \"YCbCrPositioning\",\n\t 0x011A: \"XResolution\",\n\t 0x011B: \"YResolution\",\n\t 0x0128: \"ResolutionUnit\",\n\t 0x0111: \"StripOffsets\",\n\t 0x0116: \"RowsPerStrip\",\n\t 0x0117: \"StripByteCounts\",\n\t 0x0201: \"JPEGInterchangeFormat\",\n\t 0x0202: \"JPEGInterchangeFormatLength\",\n\t 0x012D: \"TransferFunction\",\n\t 0x013E: \"WhitePoint\",\n\t 0x013F: \"PrimaryChromaticities\",\n\t 0x0211: \"YCbCrCoefficients\",\n\t 0x0214: \"ReferenceBlackWhite\",\n\t 0x0132: \"DateTime\",\n\t 0x010E: \"ImageDescription\",\n\t 0x010F: \"Make\",\n\t 0x0110: \"Model\",\n\t 0x0131: \"Software\",\n\t 0x013B: \"Artist\",\n\t 0x8298: \"Copyright\"\n\t };\n\t\n\t var GPSTags = EXIF.GPSTags = {\n\t 0x0000: \"GPSVersionID\",\n\t 0x0001: \"GPSLatitudeRef\",\n\t 0x0002: \"GPSLatitude\",\n\t 0x0003: \"GPSLongitudeRef\",\n\t 0x0004: \"GPSLongitude\",\n\t 0x0005: \"GPSAltitudeRef\",\n\t 0x0006: \"GPSAltitude\",\n\t 0x0007: \"GPSTimeStamp\",\n\t 0x0008: \"GPSSatellites\",\n\t 0x0009: \"GPSStatus\",\n\t 0x000A: \"GPSMeasureMode\",\n\t 0x000B: \"GPSDOP\",\n\t 0x000C: \"GPSSpeedRef\",\n\t 0x000D: \"GPSSpeed\",\n\t 0x000E: \"GPSTrackRef\",\n\t 0x000F: \"GPSTrack\",\n\t 0x0010: \"GPSImgDirectionRef\",\n\t 0x0011: \"GPSImgDirection\",\n\t 0x0012: \"GPSMapDatum\",\n\t 0x0013: \"GPSDestLatitudeRef\",\n\t 0x0014: \"GPSDestLatitude\",\n\t 0x0015: \"GPSDestLongitudeRef\",\n\t 0x0016: \"GPSDestLongitude\",\n\t 0x0017: \"GPSDestBearingRef\",\n\t 0x0018: \"GPSDestBearing\",\n\t 0x0019: \"GPSDestDistanceRef\",\n\t 0x001A: \"GPSDestDistance\",\n\t 0x001B: \"GPSProcessingMethod\",\n\t 0x001C: \"GPSAreaInformation\",\n\t 0x001D: \"GPSDateStamp\",\n\t 0x001E: \"GPSDifferential\"\n\t };\n\t\n\t var StringValues = EXIF.StringValues = {\n\t ExposureProgram : {\n\t 0: \"Not defined\",\n\t 1: \"Manual\",\n\t 2: \"Normal program\",\n\t 3: \"Aperture priority\",\n\t 4: \"Shutter priority\",\n\t 5: \"Creative program\",\n\t 6: \"Action program\",\n\t 7: \"Portrait mode\",\n\t 8: \"Landscape mode\"\n\t },\n\t MeteringMode : {\n\t 0 : \"Unknown\",\n\t 1 : \"Average\",\n\t 2 : \"CenterWeightedAverage\",\n\t 3 : \"Spot\",\n\t 4 : \"MultiSpot\",\n\t 5 : \"Pattern\",\n\t 6 : \"Partial\",\n\t 255: \"Other\"\n\t },\n\t LightSource : {\n\t 0 : \"Unknown\",\n\t 1 : \"Daylight\",\n\t 2 : \"Fluorescent\",\n\t 3 : \"Tungsten (incandescent light)\",\n\t 4 : \"Flash\",\n\t 9 : \"Fine weather\",\n\t 10 : \"Cloudy weather\",\n\t 11 : \"Shade\",\n\t 12 : \"Daylight fluorescent (D 5700 - 7100K)\",\n\t 13 : \"Day white fluorescent (N 4600 - 5400K)\",\n\t 14 : \"Cool white fluorescent (W 3900 - 4500K)\",\n\t 15 : \"White fluorescent (WW 3200 - 3700K)\",\n\t 17 : \"Standard light A\",\n\t 18 : \"Standard light B\",\n\t 19 : \"Standard light C\",\n\t 20 : \"D55\",\n\t 21 : \"D65\",\n\t 22 : \"D75\",\n\t 23 : \"D50\",\n\t 24 : \"ISO studio tungsten\",\n\t 255: \"Other\"\n\t },\n\t Flash : {\n\t 0x0000: \"Flash did not fire\",\n\t 0x0001: \"Flash fired\",\n\t 0x0005: \"Strobe return light not detected\",\n\t 0x0007: \"Strobe return light detected\",\n\t 0x0009: \"Flash fired, compulsory flash mode\",\n\t 0x000D: \"Flash fired, compulsory flash mode, return light not detected\",\n\t 0x000F: \"Flash fired, compulsory flash mode, return light detected\",\n\t 0x0010: \"Flash did not fire, compulsory flash mode\",\n\t 0x0018: \"Flash did not fire, auto mode\",\n\t 0x0019: \"Flash fired, auto mode\",\n\t 0x001D: \"Flash fired, auto mode, return light not detected\",\n\t 0x001F: \"Flash fired, auto mode, return light detected\",\n\t 0x0020: \"No flash function\",\n\t 0x0041: \"Flash fired, red-eye reduction mode\",\n\t 0x0045: \"Flash fired, red-eye reduction mode, return light not detected\",\n\t 0x0047: \"Flash fired, red-eye reduction mode, return light detected\",\n\t 0x0049: \"Flash fired, compulsory flash mode, red-eye reduction mode\",\n\t 0x004D: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",\n\t 0x004F: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",\n\t 0x0059: \"Flash fired, auto mode, red-eye reduction mode\",\n\t 0x005D: \"Flash fired, auto mode, return light not detected, red-eye reduction mode\",\n\t 0x005F: \"Flash fired, auto mode, return light detected, red-eye reduction mode\"\n\t },\n\t SensingMethod : {\n\t 1: \"Not defined\",\n\t 2: \"One-chip color area sensor\",\n\t 3: \"Two-chip color area sensor\",\n\t 4: \"Three-chip color area sensor\",\n\t 5: \"Color sequential area sensor\",\n\t 7: \"Trilinear sensor\",\n\t 8: \"Color sequential linear sensor\"\n\t },\n\t SceneCaptureType : {\n\t 0: \"Standard\",\n\t 1: \"Landscape\",\n\t 2: \"Portrait\",\n\t 3: \"Night scene\"\n\t },\n\t SceneType : {\n\t 1: \"Directly photographed\"\n\t },\n\t CustomRendered : {\n\t 0: \"Normal process\",\n\t 1: \"Custom process\"\n\t },\n\t WhiteBalance : {\n\t 0: \"Auto white balance\",\n\t 1: \"Manual white balance\"\n\t },\n\t GainControl : {\n\t 0: \"None\",\n\t 1: \"Low gain up\",\n\t 2: \"High gain up\",\n\t 3: \"Low gain down\",\n\t 4: \"High gain down\"\n\t },\n\t Contrast : {\n\t 0: \"Normal\",\n\t 1: \"Soft\",\n\t 2: \"Hard\"\n\t },\n\t Saturation : {\n\t 0: \"Normal\",\n\t 1: \"Low saturation\",\n\t 2: \"High saturation\"\n\t },\n\t Sharpness : {\n\t 0: \"Normal\",\n\t 1: \"Soft\",\n\t 2: \"Hard\"\n\t },\n\t SubjectDistanceRange: {\n\t 0: \"Unknown\",\n\t 1: \"Macro\",\n\t 2: \"Close view\",\n\t 3: \"Distant view\"\n\t },\n\t FileSource : {\n\t 3: \"DSC\"\n\t },\n\t\n\t Components: {\n\t 0: \"\",\n\t 1: \"Y\",\n\t 2: \"Cb\",\n\t 3: \"Cr\",\n\t 4: \"R\",\n\t 5: \"G\",\n\t 6: \"B\"\n\t }\n\t };\n\t\n\t function addEvent (element, event, handler) {\n\t if (element.addEventListener) {\n\t element.addEventListener(event, handler, false);\n\t } else if (element.attachEvent) {\n\t element.attachEvent(\"on\" + event, handler);\n\t }\n\t }\n\t\n\t function imageHasData (img) {\n\t return !!(img.exifdata);\n\t }\n\t\n\t\n\t function base64ToArrayBuffer (base64, contentType) {\n\t contentType = contentType || base64.match(/^data\\:([^\\;]+)\\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'\n\t base64 = base64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n\t var binary = atob(base64);\n\t var len = binary.length;\n\t var buffer = new ArrayBuffer(len);\n\t var view = new Uint8Array(buffer);\n\t for (var i = 0; i < len; i++) {\n\t view[i] = binary.charCodeAt(i);\n\t }\n\t return buffer;\n\t }\n\t\n\t function objectURLToBlob (url, callback) {\n\t var http = new XMLHttpRequest();\n\t http.open(\"GET\", url, true);\n\t http.responseType = \"blob\";\n\t http.onload = function (e) {\n\t if (this.status == 200 || this.status === 0) {\n\t callback(this.response);\n\t }\n\t };\n\t http.send();\n\t }\n\t\n\t function getImageData (img, callback) {\n\t function handleBinaryFile (binFile) {\n\t var data = findEXIFinJPEG(binFile);\n\t var iptcdata = findIPTCinJPEG(binFile);\n\t img.exifdata = data || {};\n\t img.iptcdata = iptcdata || {};\n\t if (callback) {\n\t callback.call(img);\n\t }\n\t }\n\t\n\t if (img.src) {\n\t if (/^data\\:/i.test(img.src)) { // Data URI\n\t var arrayBuffer = base64ToArrayBuffer(img.src);\n\t handleBinaryFile(arrayBuffer);\n\t\n\t } else if (/^blob\\:/i.test(img.src)) { // Object URL\n\t var fileReader = new FileReader();\n\t fileReader.onload = function (e) {\n\t handleBinaryFile(e.target.result);\n\t };\n\t objectURLToBlob(img.src, function (blob) {\n\t fileReader.readAsArrayBuffer(blob);\n\t });\n\t } else {\n\t var http = new XMLHttpRequest();\n\t http.onload = function () {\n\t if (this.status == 200 || this.status === 0) {\n\t handleBinaryFile(http.response);\n\t } else {\n\t callback(new Error(\"Could not load image\"));\n\t }\n\t http = null;\n\t };\n\t http.open(\"GET\", img.src, true);\n\t http.responseType = \"arraybuffer\";\n\t http.send(null);\n\t }\n\t } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) {\n\t var fileReader = new FileReader();\n\t fileReader.onload = function (e) {\n\t if (debug) console.log(\"Got file of length \" + e.target.result.byteLength);\n\t handleBinaryFile(e.target.result);\n\t };\n\t\n\t fileReader.readAsArrayBuffer(img);\n\t }\n\t }\n\t\n\t function findEXIFinJPEG (file) {\n\t var dataView = new DataView(file);\n\t\n\t if (debug) console.log(\"Got file of length \" + file.byteLength);\n\t if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {\n\t if (debug) console.log(\"Not a valid JPEG\");\n\t return false; // not a valid jpeg\n\t }\n\t\n\t var offset = 2,\n\t length = file.byteLength,\n\t marker;\n\t\n\t while (offset < length) {\n\t if (dataView.getUint8(offset) != 0xFF) {\n\t if (debug) console.log(\"Not a valid marker at offset \" + offset + \", found: \" + dataView.getUint8(offset));\n\t return false; // not a valid marker, something is wrong\n\t }\n\t\n\t marker = dataView.getUint8(offset + 1);\n\t if (debug) console.log(marker);\n\t\n\t // we could implement handling for other markers here,\n\t // but we're only looking for 0xFFE1 for EXIF data\n\t\n\t if (marker == 225) {\n\t if (debug) console.log(\"Found 0xFFE1 marker\");\n\t\n\t return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2);\n\t\n\t // offset += 2 + file.getShortAt(offset+2, true);\n\t\n\t } else {\n\t offset += 2 + dataView.getUint16(offset + 2);\n\t }\n\t\n\t }\n\t\n\t }\n\t\n\t function findIPTCinJPEG (file) {\n\t var dataView = new DataView(file);\n\t\n\t if (debug) console.log(\"Got file of length \" + file.byteLength);\n\t if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {\n\t if (debug) console.log(\"Not a valid JPEG\");\n\t return false; // not a valid jpeg\n\t }\n\t\n\t var offset = 2,\n\t length = file.byteLength;\n\t\n\t\n\t var isFieldSegmentStart = function (dataView, offset) {\n\t return (\n\t dataView.getUint8(offset) === 0x38 &&\n\t dataView.getUint8(offset + 1) === 0x42 &&\n\t dataView.getUint8(offset + 2) === 0x49 &&\n\t dataView.getUint8(offset + 3) === 0x4D &&\n\t dataView.getUint8(offset + 4) === 0x04 &&\n\t dataView.getUint8(offset + 5) === 0x04\n\t );\n\t };\n\t\n\t while (offset < length) {\n\t\n\t if (isFieldSegmentStart(dataView, offset)) {\n\t\n\t // Get the length of the name header (which is padded to an even number of bytes)\n\t var nameHeaderLength = dataView.getUint8(offset + 7);\n\t if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1;\n\t // Check for pre photoshop 6 format\n\t if (nameHeaderLength === 0) {\n\t // Always 4\n\t nameHeaderLength = 4;\n\t }\n\t\n\t var startOffset = offset + 8 + nameHeaderLength;\n\t var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength);\n\t\n\t return readIPTCData(file, startOffset, sectionLength);\n\t\n\t break;\n\t\n\t }\n\t\n\t\n\t // Not the marker, continue searching\n\t offset++;\n\t\n\t }\n\t\n\t }\n\t\n\t var IptcFieldMap = {\n\t 0x78: 'caption',\n\t 0x6E: 'credit',\n\t 0x19: 'keywords',\n\t 0x37: 'dateCreated',\n\t 0x50: 'byline',\n\t 0x55: 'bylineTitle',\n\t 0x7A: 'captionWriter',\n\t 0x69: 'headline',\n\t 0x74: 'copyright',\n\t 0x0F: 'category'\n\t };\n\t\n\t function readIPTCData (file, startOffset, sectionLength) {\n\t var dataView = new DataView(file);\n\t var data = {};\n\t var fieldValue, fieldName, dataSize, segmentType, segmentSize;\n\t var segmentStartPos = startOffset;\n\t while (segmentStartPos < startOffset + sectionLength) {\n\t if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) {\n\t segmentType = dataView.getUint8(segmentStartPos + 2);\n\t if (segmentType in IptcFieldMap) {\n\t dataSize = dataView.getInt16(segmentStartPos + 3);\n\t segmentSize = dataSize + 5;\n\t fieldName = IptcFieldMap[segmentType];\n\t fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize);\n\t // Check if we already stored a value with this name\n\t if (data.hasOwnProperty(fieldName)) {\n\t // Value already stored with this name, create multivalue field\n\t if (data[fieldName] instanceof Array) {\n\t data[fieldName].push(fieldValue);\n\t }\n\t else {\n\t data[fieldName] = [data[fieldName], fieldValue];\n\t }\n\t }\n\t else {\n\t data[fieldName] = fieldValue;\n\t }\n\t }\n\t\n\t }\n\t segmentStartPos++;\n\t }\n\t return data;\n\t }\n\t\n\t\n\t function readTags (file, tiffStart, dirStart, strings, bigEnd) {\n\t var entries = file.getUint16(dirStart, !bigEnd),\n\t tags = {},\n\t entryOffset, tag,\n\t i;\n\t\n\t for (i = 0; i < entries; i++) {\n\t entryOffset = dirStart + i * 12 + 2;\n\t tag = strings[file.getUint16(entryOffset, !bigEnd)];\n\t if (!tag && debug) console.log(\"Unknown tag: \" + file.getUint16(entryOffset, !bigEnd));\n\t tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);\n\t }\n\t return tags;\n\t }\n\t\n\t\n\t function readTagValue (file, entryOffset, tiffStart, dirStart, bigEnd) {\n\t var type = file.getUint16(entryOffset + 2, !bigEnd),\n\t numValues = file.getUint32(entryOffset + 4, !bigEnd),\n\t valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart,\n\t offset,\n\t vals, val, n,\n\t numerator, denominator;\n\t\n\t switch (type) {\n\t case 1: // byte, 8-bit unsigned int\n\t case 7: // undefined, 8-bit byte, value depending on field\n\t if (numValues == 1) {\n\t return file.getUint8(entryOffset + 8, !bigEnd);\n\t } else {\n\t offset = numValues > 4 ? valueOffset : (entryOffset + 8);\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint8(offset + n);\n\t }\n\t return vals;\n\t }\n\t\n\t case 2: // ascii, 8-bit byte\n\t offset = numValues > 4 ? valueOffset : (entryOffset + 8);\n\t return getStringFromDB(file, offset, numValues - 1);\n\t\n\t case 3: // short, 16 bit int\n\t if (numValues == 1) {\n\t return file.getUint16(entryOffset + 8, !bigEnd);\n\t } else {\n\t offset = numValues > 2 ? valueOffset : (entryOffset + 8);\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint16(offset + 2 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 4: // long, 32 bit int\n\t if (numValues == 1) {\n\t return file.getUint32(entryOffset + 8, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 5: // rational = two long values, first is numerator, second is denominator\n\t if (numValues == 1) {\n\t numerator = file.getUint32(valueOffset, !bigEnd);\n\t denominator = file.getUint32(valueOffset + 4, !bigEnd);\n\t val = new Number(numerator / denominator);\n\t val.numerator = numerator;\n\t val.denominator = denominator;\n\t return val;\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t numerator = file.getUint32(valueOffset + 8 * n, !bigEnd);\n\t denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd);\n\t vals[n] = new Number(numerator / denominator);\n\t vals[n].numerator = numerator;\n\t vals[n].denominator = denominator;\n\t }\n\t return vals;\n\t }\n\t\n\t case 9: // slong, 32 bit signed int\n\t if (numValues == 1) {\n\t return file.getInt32(entryOffset + 8, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 10: // signed rational, two slongs, first is numerator, second is denominator\n\t if (numValues == 1) {\n\t return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t }\n\t }\n\t\n\t function getStringFromDB (buffer, start, length) {\n\t var outstr = \"\", n;\n\t for (n = start; n < start + length; n++) {\n\t outstr += String.fromCharCode(buffer.getUint8(n));\n\t }\n\t return outstr;\n\t }\n\t\n\t function readEXIFData (file, start) {\n\t if (getStringFromDB(file, start, 4) != \"Exif\") {\n\t if (debug) console.log(\"Not valid EXIF data! \" + getStringFromDB(file, start, 4));\n\t return false;\n\t }\n\t\n\t var bigEnd,\n\t tags, tag,\n\t exifData, gpsData,\n\t tiffOffset = start + 6;\n\t\n\t // test for TIFF validity and endianness\n\t if (file.getUint16(tiffOffset) == 0x4949) {\n\t bigEnd = false;\n\t } else if (file.getUint16(tiffOffset) == 0x4D4D) {\n\t bigEnd = true;\n\t } else {\n\t if (debug) console.log(\"Not valid TIFF data! (no 0x4949 or 0x4D4D)\");\n\t return false;\n\t }\n\t\n\t if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002A) {\n\t if (debug) console.log(\"Not valid TIFF data! (no 0x002A)\");\n\t return false;\n\t }\n\t\n\t var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);\n\t\n\t if (firstIFDOffset < 0x00000008) {\n\t if (debug) console.log(\"Not valid TIFF data! (First offset less than 8)\", file.getUint32(tiffOffset + 4, !bigEnd));\n\t return false;\n\t }\n\t\n\t tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd);\n\t\n\t if (tags.ExifIFDPointer) {\n\t exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);\n\t for (tag in exifData) {\n\t switch (tag) {\n\t case \"LightSource\" :\n\t case \"Flash\" :\n\t case \"MeteringMode\" :\n\t case \"ExposureProgram\" :\n\t case \"SensingMethod\" :\n\t case \"SceneCaptureType\" :\n\t case \"SceneType\" :\n\t case \"CustomRendered\" :\n\t case \"WhiteBalance\" :\n\t case \"GainControl\" :\n\t case \"Contrast\" :\n\t case \"Saturation\" :\n\t case \"Sharpness\" :\n\t case \"SubjectDistanceRange\" :\n\t case \"FileSource\" :\n\t exifData[tag] = StringValues[tag][exifData[tag]];\n\t break;\n\t\n\t case \"ExifVersion\" :\n\t case \"FlashpixVersion\" :\n\t exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);\n\t break;\n\t\n\t case \"ComponentsConfiguration\" :\n\t exifData[tag] =\n\t StringValues.Components[exifData[tag][0]] +\n\t StringValues.Components[exifData[tag][1]] +\n\t StringValues.Components[exifData[tag][2]] +\n\t StringValues.Components[exifData[tag][3]];\n\t break;\n\t }\n\t tags[tag] = exifData[tag];\n\t }\n\t }\n\t\n\t if (tags.GPSInfoIFDPointer) {\n\t gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);\n\t for (tag in gpsData) {\n\t switch (tag) {\n\t case \"GPSVersionID\" :\n\t gpsData[tag] = gpsData[tag][0] +\n\t \".\" + gpsData[tag][1] +\n\t \".\" + gpsData[tag][2] +\n\t \".\" + gpsData[tag][3];\n\t break;\n\t }\n\t tags[tag] = gpsData[tag];\n\t }\n\t }\n\t\n\t return tags;\n\t }\n\t\n\t EXIF.getData = function (img, callback) {\n\t if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) return false;\n\t\n\t if (!imageHasData(img)) {\n\t getImageData(img, callback);\n\t } else {\n\t if (callback) {\n\t callback.call(img);\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t EXIF.getTag = function (img, tag) {\n\t if (!imageHasData(img)) return;\n\t return img.exifdata[tag];\n\t }\n\t\n\t EXIF.getAllTags = function (img) {\n\t if (!imageHasData(img)) return {};\n\t var a,\n\t data = img.exifdata,\n\t tags = {};\n\t for (a in data) {\n\t if (data.hasOwnProperty(a)) {\n\t tags[a] = data[a];\n\t }\n\t }\n\t return tags;\n\t }\n\t\n\t EXIF.pretty = function (img) {\n\t if (!imageHasData(img)) return \"\";\n\t var a,\n\t data = img.exifdata,\n\t strPretty = \"\";\n\t for (a in data) {\n\t if (data.hasOwnProperty(a)) {\n\t if (typeof data[a] == \"object\") {\n\t if (data[a] instanceof Number) {\n\t strPretty += a + \" : \" + data[a] + \" [\" + data[a].numerator + \"/\" + data[a].denominator + \"]\\r\\n\";\n\t } else {\n\t strPretty += a + \" : [\" + data[a].length + \" values]\\r\\n\";\n\t }\n\t } else {\n\t strPretty += a + \" : \" + data[a] + \"\\r\\n\";\n\t }\n\t }\n\t }\n\t return strPretty;\n\t }\n\t\n\t EXIF.readFromBinaryFile = function (file) {\n\t return findEXIFinJPEG(file);\n\t }\n\t\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return EXIF;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t }\n\t}.call(this));\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n\t * Mega pixel image rendering library for iOS6 Safari\n\t *\n\t * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel),\n\t * which causes unexpected subsampling when drawing it in canvas.\n\t * By using this library, you can safely render the image with proper stretching.\n\t *\n\t * Copyright (c) 2012 Shinichi Tomita \n\t * Released under the MIT license\n\t */\n\t(function () {\n\t\n\t /**\n\t * Detect subsampling in loaded image.\n\t * In iOS, larger images than 2M pixels may be subsampled in rendering.\n\t */\n\t function detectSubsampling (img) {\n\t var iw = img.naturalWidth, ih = img.naturalHeight;\n\t if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image\n\t var canvas = document.createElement('canvas');\n\t canvas.width = canvas.height = 1;\n\t var ctx = canvas.getContext('2d');\n\t ctx.drawImage(img, -iw + 1, 0);\n\t // subsampled image becomes half smaller in rendering size.\n\t // check alpha channel value to confirm image is covering edge pixel or not.\n\t // if alpha value is 0 image is not covering, hence subsampled.\n\t return ctx.getImageData(0, 0, 1, 1).data[3] === 0;\n\t } else {\n\t return false;\n\t }\n\t }\n\t\n\t /**\n\t * Detecting vertical squash in loaded image.\n\t * Fixes a bug which squash image vertically while drawing into canvas for some images.\n\t */\n\t function detectVerticalSquash (img, iw, ih) {\n\t var canvas = document.createElement('canvas');\n\t canvas.width = 1;\n\t canvas.height = ih;\n\t var ctx = canvas.getContext('2d');\n\t ctx.drawImage(img, 0, 0);\n\t var data = ctx.getImageData(0, 0, 1, ih).data;\n\t // search image edge pixel position in case it is squashed vertically.\n\t var sy = 0;\n\t var ey = ih;\n\t var py = ih;\n\t while (py > sy) {\n\t var alpha = data[(py - 1) * 4 + 3];\n\t if (alpha === 0) {\n\t ey = py;\n\t } else {\n\t sy = py;\n\t }\n\t py = (ey + sy) >> 1;\n\t }\n\t var ratio = (py / ih);\n\t return (ratio === 0) ? 1 : ratio;\n\t }\n\t\n\t /**\n\t * Rendering image element (with resizing) and get its data URL\n\t */\n\t function renderImageToDataURL (img, options, doSquash) {\n\t var canvas = document.createElement('canvas');\n\t renderImageToCanvas(img, canvas, options, doSquash);\n\t return canvas.toDataURL(\"image/jpeg\", options.quality || 0.8);\n\t }\n\t\n\t /**\n\t * Rendering image element (with resizing) into the canvas element\n\t */\n\t function renderImageToCanvas (img, canvas, options, doSquash) {\n\t var iw = img.naturalWidth, ih = img.naturalHeight;\n\t var width = options.width, height = options.height;\n\t var ctx = canvas.getContext('2d');\n\t ctx.save();\n\t transformCoordinate(canvas, ctx, width, height, options.orientation);\n\t var subsampled = detectSubsampling(img);\n\t if (subsampled) {\n\t iw /= 2;\n\t ih /= 2;\n\t }\n\t var d = 1024; // size of tiling canvas\n\t var tmpCanvas = document.createElement('canvas');\n\t tmpCanvas.width = tmpCanvas.height = d;\n\t var tmpCtx = tmpCanvas.getContext('2d');\n\t var vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1;\n\t var dw = Math.ceil(d * width / iw);\n\t var dh = Math.ceil(d * height / ih / vertSquashRatio);\n\t var sy = 0;\n\t var dy = 0;\n\t while (sy < ih) {\n\t var sx = 0;\n\t var dx = 0;\n\t while (sx < iw) {\n\t tmpCtx.clearRect(0, 0, d, d);\n\t tmpCtx.drawImage(img, -sx, -sy);\n\t ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh);\n\t sx += d;\n\t dx += dw;\n\t }\n\t sy += d;\n\t dy += dh;\n\t }\n\t ctx.restore();\n\t tmpCanvas = tmpCtx = null;\n\t }\n\t\n\t /**\n\t * Transform canvas coordination according to specified frame size and orientation\n\t * Orientation value is from EXIF tag\n\t */\n\t function transformCoordinate (canvas, ctx, width, height, orientation) {\n\t switch (orientation) {\n\t case 5:\n\t case 6:\n\t case 7:\n\t case 8:\n\t canvas.width = height;\n\t canvas.height = width;\n\t break;\n\t default:\n\t canvas.width = width;\n\t canvas.height = height;\n\t }\n\t switch (orientation) {\n\t case 2:\n\t // horizontal flip\n\t ctx.translate(width, 0);\n\t ctx.scale(-1, 1);\n\t break;\n\t case 3:\n\t // 180 rotate left\n\t ctx.translate(width, height);\n\t ctx.rotate(Math.PI);\n\t break;\n\t case 4:\n\t // vertical flip\n\t ctx.translate(0, height);\n\t ctx.scale(1, -1);\n\t break;\n\t case 5:\n\t // vertical flip + 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.scale(1, -1);\n\t break;\n\t case 6:\n\t // 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.translate(0, -height);\n\t break;\n\t case 7:\n\t // horizontal flip + 90 rotate right\n\t ctx.rotate(0.5 * Math.PI);\n\t ctx.translate(width, -height);\n\t ctx.scale(-1, 1);\n\t break;\n\t case 8:\n\t // 90 rotate left\n\t ctx.rotate(-0.5 * Math.PI);\n\t ctx.translate(-width, 0);\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t\n\t\n\t /**\n\t * MegaPixImage class\n\t */\n\t function MegaPixImage (srcImage) {\n\t if (window.Blob && srcImage instanceof Blob) {\n\t var img = new Image();\n\t var URL = window.URL && window.URL.createObjectURL ? window.URL :\n\t window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL :\n\t null;\n\t if (!URL) {\n\t throw Error(\"No createObjectURL function found to create blob url\");\n\t }\n\t img.src = URL.createObjectURL(srcImage);\n\t this.blob = srcImage;\n\t srcImage = img;\n\t }\n\t if (!srcImage.naturalWidth && !srcImage.naturalHeight) {\n\t var _this = this;\n\t srcImage.onload = function () {\n\t var listeners = _this.imageLoadListeners;\n\t if (listeners) {\n\t _this.imageLoadListeners = null;\n\t for (var i = 0, len = listeners.length; i < len; i++) {\n\t listeners[i]();\n\t }\n\t }\n\t };\n\t this.imageLoadListeners = [];\n\t }\n\t this.srcImage = srcImage;\n\t }\n\t\n\t /**\n\t * Rendering megapix image into specified target element\n\t */\n\t MegaPixImage.prototype.render = function (target, options, callback) {\n\t if (this.imageLoadListeners) {\n\t var _this = this;\n\t this.imageLoadListeners.push(function () {\n\t _this.render(target, options, callback);\n\t });\n\t return;\n\t }\n\t options = options || {};\n\t var srcImage = this.srcImage,\n\t src = srcImage.src,\n\t srcLength = src.length,\n\t imgWidth = srcImage.naturalWidth, imgHeight = srcImage.naturalHeight,\n\t width = options.width, height = options.height,\n\t maxWidth = options.maxWidth, maxHeight = options.maxHeight,\n\t doSquash = this.blob && this.blob.type === 'image/jpeg' ||\n\t src.indexOf('data:image/jpeg') === 0 ||\n\t src.indexOf('.jpg') === srcLength - 4 ||\n\t src.indexOf('.jpeg') === srcLength - 5;\n\t if (width && !height) {\n\t height = (imgHeight * width / imgWidth) << 0;\n\t } else if (height && !width) {\n\t width = (imgWidth * height / imgHeight) << 0;\n\t } else {\n\t width = imgWidth;\n\t height = imgHeight;\n\t }\n\t if (maxWidth && width > maxWidth) {\n\t width = maxWidth;\n\t height = (imgHeight * width / imgWidth) << 0;\n\t }\n\t if (maxHeight && height > maxHeight) {\n\t height = maxHeight;\n\t width = (imgWidth * height / imgHeight) << 0;\n\t }\n\t var opt = {width: width, height: height};\n\t for (var k in options) opt[k] = options[k];\n\t\n\t var tagName = target.tagName.toLowerCase();\n\t if (tagName === 'img') {\n\t target.src = renderImageToDataURL(this.srcImage, opt, doSquash);\n\t } else if (tagName === 'canvas') {\n\t renderImageToCanvas(this.srcImage, target, opt, doSquash);\n\t }\n\t if (typeof this.onrender === 'function') {\n\t this.onrender(target);\n\t }\n\t if (callback) {\n\t callback();\n\t }\n\t };\n\t\n\t /**\n\t * Export class to global\n\t */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return MegaPixImage;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // for AMD loader\n\t } else {\n\t this.MegaPixImage = MegaPixImage;\n\t }\n\t\n\t})();\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tfunction JPEGEncoder (l) {\n\t var o = this;\n\t var s = Math.round;\n\t var k = Math.floor;\n\t var O = new Array(64);\n\t var K = new Array(64);\n\t var d = new Array(64);\n\t var Z = new Array(64);\n\t var u;\n\t var h;\n\t var G;\n\t var T;\n\t var n = new Array(65535);\n\t var m = new Array(65535);\n\t var P = new Array(64);\n\t var S = new Array(64);\n\t var j = [];\n\t var t = 0;\n\t var a = 7;\n\t var A = new Array(64);\n\t var f = new Array(64);\n\t var U = new Array(64);\n\t var e = new Array(256);\n\t var C = new Array(2048);\n\t var x;\n\t var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\n\t var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n\t var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];\n\t var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\t var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\n\t var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];\n\t var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\t\n\t function M (ag) {\n\t var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99];\n\t for (var ae = 0; ae < 64; ae++) {\n\t var aj = k((af[ae] * ag + 50) / 100);\n\t if (aj < 1) {\n\t aj = 1\n\t } else {\n\t if (aj > 255) {\n\t aj = 255\n\t }\n\t }\n\t O[i[ae]] = aj\n\t }\n\t var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99];\n\t for (var ad = 0; ad < 64; ad++) {\n\t var ai = k((ah[ad] * ag + 50) / 100);\n\t if (ai < 1) {\n\t ai = 1\n\t } else {\n\t if (ai > 255) {\n\t ai = 255\n\t }\n\t }\n\t K[i[ad]] = ai\n\t }\n\t var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t var ab = 0;\n\t for (var ak = 0; ak < 8; ak++) {\n\t for (var aa = 0; aa < 8; aa++) {\n\t d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8));\n\t Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8));\n\t ab++\n\t }\n\t }\n\t }\n\t\n\t function q (ae, aa) {\n\t var ad = 0;\n\t var ag = 0;\n\t var af = new Array();\n\t for (var ab = 1; ab <= 16; ab++) {\n\t for (var ac = 1; ac <= ae[ab]; ac++) {\n\t af[aa[ag]] = [];\n\t af[aa[ag]][0] = ad;\n\t af[aa[ag]][1] = ab;\n\t ag++;\n\t ad++\n\t }\n\t ad *= 2\n\t }\n\t return af\n\t }\n\t\n\t function W () {\n\t u = q(g, c);\n\t h = q(v, Y);\n\t G = q(w, E);\n\t T = q(J, B)\n\t }\n\t\n\t function z () {\n\t var ac = 1;\n\t var ab = 2;\n\t for (var aa = 1; aa <= 15; aa++) {\n\t for (var ad = ac; ad < ab; ad++) {\n\t m[32767 + ad] = aa;\n\t n[32767 + ad] = [];\n\t n[32767 + ad][1] = aa;\n\t n[32767 + ad][0] = ad\n\t }\n\t for (var ae = -(ab - 1); ae <= -ac; ae++) {\n\t m[32767 + ae] = aa;\n\t n[32767 + ae] = [];\n\t n[32767 + ae][1] = aa;\n\t n[32767 + ae][0] = ab - 1 + ae\n\t }\n\t ac <<= 1;\n\t ab <<= 1\n\t }\n\t }\n\t\n\t function V () {\n\t for (var aa = 0; aa < 256; aa++) {\n\t C[aa] = 19595 * aa;\n\t C[(aa + 256) >> 0] = 38470 * aa;\n\t C[(aa + 512) >> 0] = 7471 * aa + 32768;\n\t C[(aa + 768) >> 0] = -11059 * aa;\n\t C[(aa + 1024) >> 0] = -21709 * aa;\n\t C[(aa + 1280) >> 0] = 32768 * aa + 8421375;\n\t C[(aa + 1536) >> 0] = -27439 * aa;\n\t C[(aa + 1792) >> 0] = -5329 * aa\n\t }\n\t }\n\t\n\t function X (aa) {\n\t var ac = aa[0];\n\t var ab = aa[1] - 1;\n\t while (ab >= 0) {\n\t if (ac & (1 << ab)) {\n\t t |= (1 << a)\n\t }\n\t ab--;\n\t a--;\n\t if (a < 0) {\n\t if (t == 255) {\n\t F(255);\n\t F(0)\n\t } else {\n\t F(t)\n\t }\n\t a = 7;\n\t t = 0\n\t }\n\t }\n\t }\n\t\n\t function F (aa) {\n\t j.push(e[aa])\n\t }\n\t\n\t function p (aa) {\n\t F((aa >> 8) & 255);\n\t F((aa) & 255)\n\t }\n\t\n\t function N (aZ, ap) {\n\t var aL, aK, aJ, aI, aH, aD, aC, aB;\n\t var aN = 0;\n\t var aR;\n\t const aq = 8;\n\t const ai = 64;\n\t for (aR = 0; aR < aq; ++aR) {\n\t aL = aZ[aN];\n\t aK = aZ[aN + 1];\n\t aJ = aZ[aN + 2];\n\t aI = aZ[aN + 3];\n\t aH = aZ[aN + 4];\n\t aD = aZ[aN + 5];\n\t aC = aZ[aN + 6];\n\t aB = aZ[aN + 7];\n\t var aY = aL + aB;\n\t var aO = aL - aB;\n\t var aX = aK + aC;\n\t var aP = aK - aC;\n\t var aU = aJ + aD;\n\t var aQ = aJ - aD;\n\t var aT = aI + aH;\n\t var aS = aI - aH;\n\t var an = aY + aT;\n\t var ak = aY - aT;\n\t var am = aX + aU;\n\t var al = aX - aU;\n\t aZ[aN] = an + am;\n\t aZ[aN + 4] = an - am;\n\t var ax = (al + ak) * 0.707106781;\n\t aZ[aN + 2] = ak + ax;\n\t aZ[aN + 6] = ak - ax;\n\t an = aS + aQ;\n\t am = aQ + aP;\n\t al = aP + aO;\n\t var at = (an - al) * 0.382683433;\n\t var aw = 0.5411961 * an + at;\n\t var au = 1.306562965 * al + at;\n\t var av = am * 0.707106781;\n\t var ah = aO + av;\n\t var ag = aO - av;\n\t aZ[aN + 5] = ag + aw;\n\t aZ[aN + 3] = ag - aw;\n\t aZ[aN + 1] = ah + au;\n\t aZ[aN + 7] = ah - au;\n\t aN += 8\n\t }\n\t aN = 0;\n\t for (aR = 0; aR < aq; ++aR) {\n\t aL = aZ[aN];\n\t aK = aZ[aN + 8];\n\t aJ = aZ[aN + 16];\n\t aI = aZ[aN + 24];\n\t aH = aZ[aN + 32];\n\t aD = aZ[aN + 40];\n\t aC = aZ[aN + 48];\n\t aB = aZ[aN + 56];\n\t var ar = aL + aB;\n\t var aj = aL - aB;\n\t var az = aK + aC;\n\t var ae = aK - aC;\n\t var aG = aJ + aD;\n\t var ac = aJ - aD;\n\t var aW = aI + aH;\n\t var aa = aI - aH;\n\t var ao = ar + aW;\n\t var aV = ar - aW;\n\t var ay = az + aG;\n\t var aF = az - aG;\n\t aZ[aN] = ao + ay;\n\t aZ[aN + 32] = ao - ay;\n\t var af = (aF + aV) * 0.707106781;\n\t aZ[aN + 16] = aV + af;\n\t aZ[aN + 48] = aV - af;\n\t ao = aa + ac;\n\t ay = ac + ae;\n\t aF = ae + aj;\n\t var aM = (ao - aF) * 0.382683433;\n\t var ad = 0.5411961 * ao + aM;\n\t var a1 = 1.306562965 * aF + aM;\n\t var ab = ay * 0.707106781;\n\t var a0 = aj + ab;\n\t var aA = aj - ab;\n\t aZ[aN + 40] = aA + ad;\n\t aZ[aN + 24] = aA - ad;\n\t aZ[aN + 8] = a0 + a1;\n\t aZ[aN + 56] = a0 - a1;\n\t aN++\n\t }\n\t var aE;\n\t for (aR = 0; aR < ai; ++aR) {\n\t aE = aZ[aR] * ap[aR];\n\t P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0)\n\t }\n\t return P\n\t }\n\t\n\t function b () {\n\t p(65504);\n\t p(16);\n\t F(74);\n\t F(70);\n\t F(73);\n\t F(70);\n\t F(0);\n\t F(1);\n\t F(1);\n\t F(0);\n\t p(1);\n\t p(1);\n\t F(0);\n\t F(0)\n\t }\n\t\n\t function r (aa, ab) {\n\t p(65472);\n\t p(17);\n\t F(8);\n\t p(ab);\n\t p(aa);\n\t F(3);\n\t F(1);\n\t F(17);\n\t F(0);\n\t F(2);\n\t F(17);\n\t F(1);\n\t F(3);\n\t F(17);\n\t F(1)\n\t }\n\t\n\t function D () {\n\t p(65499);\n\t p(132);\n\t F(0);\n\t for (var ab = 0; ab < 64; ab++) {\n\t F(O[ab])\n\t }\n\t F(1);\n\t for (var aa = 0; aa < 64; aa++) {\n\t F(K[aa])\n\t }\n\t }\n\t\n\t function H () {\n\t p(65476);\n\t p(418);\n\t F(0);\n\t for (var ae = 0; ae < 16; ae++) {\n\t F(g[ae + 1])\n\t }\n\t for (var ad = 0; ad <= 11; ad++) {\n\t F(c[ad])\n\t }\n\t F(16);\n\t for (var ac = 0; ac < 16; ac++) {\n\t F(w[ac + 1])\n\t }\n\t for (var ab = 0; ab <= 161; ab++) {\n\t F(E[ab])\n\t }\n\t F(1);\n\t for (var aa = 0; aa < 16; aa++) {\n\t F(v[aa + 1])\n\t }\n\t for (var ah = 0; ah <= 11; ah++) {\n\t F(Y[ah])\n\t }\n\t F(17);\n\t for (var ag = 0; ag < 16; ag++) {\n\t F(J[ag + 1])\n\t }\n\t for (var af = 0; af <= 161; af++) {\n\t F(B[af])\n\t }\n\t }\n\t\n\t function I () {\n\t p(65498);\n\t p(12);\n\t F(3);\n\t F(1);\n\t F(0);\n\t F(2);\n\t F(17);\n\t F(3);\n\t F(17);\n\t F(0);\n\t F(63);\n\t F(0)\n\t }\n\t\n\t function L (ad, aa, al, at, ap) {\n\t var ag = ap[0];\n\t var ab = ap[240];\n\t var ac;\n\t const ar = 16;\n\t const ai = 63;\n\t const ah = 64;\n\t var aq = N(ad, aa);\n\t for (var am = 0; am < ah; ++am) {\n\t S[i[am]] = aq[am]\n\t }\n\t var an = S[0] - al;\n\t al = S[0];\n\t if (an == 0) {\n\t X(at[0])\n\t } else {\n\t ac = 32767 + an;\n\t X(at[m[ac]]);\n\t X(n[ac])\n\t }\n\t var ae = 63;\n\t for (; (ae > 0) && (S[ae] == 0); ae--) {\n\t }\n\t if (ae == 0) {\n\t X(ag);\n\t return al\n\t }\n\t var ao = 1;\n\t var au;\n\t while (ao <= ae) {\n\t var ak = ao;\n\t for (; (S[ao] == 0) && (ao <= ae); ++ao) {\n\t }\n\t var aj = ao - ak;\n\t if (aj >= ar) {\n\t au = aj >> 4;\n\t for (var af = 1; af <= au; ++af) {\n\t X(ab)\n\t }\n\t aj = aj & 15\n\t }\n\t ac = 32767 + S[ao];\n\t X(ap[(aj << 4) + m[ac]]);\n\t X(n[ac]);\n\t ao++\n\t }\n\t if (ae != ai) {\n\t X(ag)\n\t }\n\t return al\n\t }\n\t\n\t function y () {\n\t var ab = String.fromCharCode;\n\t for (var aa = 0; aa < 256; aa++) {\n\t e[aa] = ab(aa)\n\t }\n\t }\n\t\n\t this.encode = function (an, aj, aB) {\n\t var aa = new Date().getTime();\n\t if (aj) {\n\t R(aj)\n\t }\n\t j = new Array();\n\t t = 0;\n\t a = 7;\n\t p(65496);\n\t b();\n\t D();\n\t r(an.width, an.height);\n\t H();\n\t I();\n\t var al = 0;\n\t var aq = 0;\n\t var ao = 0;\n\t t = 0;\n\t a = 7;\n\t this.encode.displayName = \"_encode_\";\n\t var at = an.data;\n\t var ar = an.width;\n\t var aA = an.height;\n\t var ay = ar * 4;\n\t var ai = ar * 3;\n\t var ah, ag = 0;\n\t var am, ax, az;\n\t var ab, ap, ac, af, ae;\n\t while (ag < aA) {\n\t ah = 0;\n\t while (ah < ay) {\n\t ab = ay * ag + ah;\n\t ap = ab;\n\t ac = -1;\n\t af = 0;\n\t for (ae = 0; ae < 64; ae++) {\n\t af = ae >> 3;\n\t ac = (ae & 7) * 4;\n\t ap = ab + (af * ay) + ac;\n\t if (ag + af >= aA) {\n\t ap -= (ay * (ag + 1 + af - aA))\n\t }\n\t if (ah + ac >= ay) {\n\t ap -= ((ah + ac) - ay + 4)\n\t }\n\t am = at[ap++];\n\t ax = at[ap++];\n\t az = at[ap++];\n\t A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128;\n\t f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128;\n\t U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128\n\t }\n\t al = L(A, d, al, u, G);\n\t aq = L(f, Z, aq, h, T);\n\t ao = L(U, Z, ao, h, T);\n\t ah += 32\n\t }\n\t ag += 8\n\t }\n\t if (a >= 0) {\n\t var aw = [];\n\t aw[1] = a + 1;\n\t aw[0] = (1 << (a + 1)) - 1;\n\t X(aw)\n\t }\n\t p(65497);\n\t if (aB) {\n\t var av = j.length;\n\t var aC = new Uint8Array(av);\n\t for (var au = 0; au < av; au++) {\n\t aC[au] = j[au].charCodeAt()\n\t }\n\t j = [];\n\t var ak = new Date().getTime() - aa;\n\t return aC\n\t }\n\t var ad = \"data:image/jpeg;base64,\" + btoa(j.join(\"\"));\n\t j = [];\n\t var ak = new Date().getTime() - aa;\n\t return ad\n\t };\n\t function R (ab) {\n\t if (ab <= 0) {\n\t ab = 1\n\t }\n\t if (ab > 100) {\n\t ab = 100\n\t }\n\t if (x == ab) {\n\t return\n\t }\n\t var aa = 0;\n\t if (ab < 50) {\n\t aa = Math.floor(5000 / ab)\n\t } else {\n\t aa = Math.floor(200 - ab * 2)\n\t }\n\t M(aa);\n\t x = ab;\n\t }\n\t\n\t function Q () {\n\t var aa = new Date().getTime();\n\t if (!l) {\n\t l = 50\n\t }\n\t y();\n\t W();\n\t z();\n\t V();\n\t R(l);\n\t var ab = new Date().getTime() - aa;\n\t }\n\t\n\t Q()\n\t}\n\t\n\tmodule.exports = JPEGEncoder;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 保证按需加载的文件路径正确\n\t__webpack_require__.p = getCurrentJsDir() + '/';\n\twindow.URL = window.URL || window.webkitURL;\n\t\n\tvar Promise = __webpack_require__(1),\n\t exif = __webpack_require__(4);\n\t\n\tvar UA = (function (userAgent) {\n\t var ISOldIOS = /OS (\\d)_.* like Mac OS X/g.exec(userAgent),\n\t isOldAndroid = /Android (\\d.*?);/g.exec(userAgent);\n\t\n\t // 判断设备是否是IOS7以下\n\t // 判断设备是否是android4.5以下\n\t // 判断是否iOS\n\t // 判断是否android\n\t // 判断是否QQ浏览器\n\t return {\n\t oldIOS : ISOldIOS ? +ISOldIOS.pop() < 8 : false,\n\t oldAndroid: isOldAndroid ? +isOldAndroid.pop().substr(0, 3) < 4.5 : false,\n\t iOS : /\\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent),\n\t android : /Android/g.test(userAgent),\n\t mQQBrowser: /MQQBrowser/g.test(userAgent)\n\t }\n\t})(navigator.userAgent);\n\t\n\tfunction Lrz (file, opts) {\n\t var that = this;\n\t\n\t if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7');\n\t\n\t opts = opts || {};\n\t\n\t that.defaults = {\n\t width : null,\n\t height : null,\n\t quality: 0.7\n\t };\n\t\n\t that.file = file;\n\t\n\t for (var p in opts) {\n\t if (!opts.hasOwnProperty(p)) continue;\n\t that.defaults[p] = opts[p];\n\t }\n\t\n\t return this.init();\n\t}\n\t\n\tLrz.prototype.init = function () {\n\t var that = this,\n\t file = that.file,\n\t img = new Image(),\n\t canvas = document.createElement('canvas'),\n\t blob = (typeof file === 'string') ? file : URL.createObjectURL(file);\n\t\n\t that.img = img;\n\t that.blob = blob;\n\t that.canvas = canvas;\n\t\n\t if (!document.createElement('canvas').getContext) {\n\t throw new Error('浏览器不支持canvas');\n\t }\n\t return new Promise(function (resolve, reject) {\n\t img.onerror = function () {\n\t throw new Error('加载图片文件失败');\n\t };\n\t\n\t img.onload = function () {\n\t that._getBase64()\n\t .then(function (base64) {\n\t if (base64.length < 10) reject('生成base64失败');\n\t\n\t return base64;\n\t })\n\t .then(function (base64) {\n\t resolve({\n\t origin : that.file,\n\t base64 : base64,\n\t base64Len: base64.length\n\t });\n\t\n\t // 释放内存\n\t for (var p in that) {\n\t if (!that.hasOwnProperty(p)) continue;\n\t\n\t that[p] = null;\n\t }\n\t URL.revokeObjectURL(that.blob);\n\t });\n\t };\n\t\n\t img.crossOrigin = \"*\";\n\t\n\t img.src = blob;\n\t });\n\t};\n\t\n\tLrz.prototype._getBase64 = function () {\n\t var that = this,\n\t img = that.img,\n\t file = that.file,\n\t canvas = that.canvas;\n\t\n\t var setCanvas = function () {\n\t };\n\t\n\t return new Promise(function (resolve) {\n\t // 传入blob在android4.3以下有bug\n\t exif.getData(typeof file === 'object' ? file : img, function () {\n\t that.orientation = exif.getTag(this, \"Orientation\");\n\t\n\t that.resize = that._getResize();\n\t that.ctx = canvas.getContext('2d');\n\t\n\t canvas.width = that.resize.width;\n\t canvas.height = that.resize.height;\n\t\n\t // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。\n\t that.ctx.fillStyle = '#fff';\n\t that.ctx.fillRect(0, 0, canvas.width, canvas.height);\n\t\n\t // 根据设备对应处理方式\n\t if (UA.oldIOS) {\n\t that._createBase64ForOldIOS().then(resolve);\n\t }\n\t else {\n\t that._createBase64().then(resolve);\n\t }\n\t });\n\t });\n\t};\n\t\n\t\n\tLrz.prototype._createBase64ForOldIOS = function () {\n\t var that = this,\n\t img = that.img,\n\t canvas = that.canvas,\n\t defaults = that.defaults,\n\t orientation = that.orientation;\n\t\n\t return new Promise(function (resolve) {\n\t !/* require */(/* empty */function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(5)]; (function (MegaPixImage) {\n\t var mpImg = new MegaPixImage(img);\n\t\n\t if (\"5678\".indexOf(orientation) > -1) {\n\t mpImg.render(canvas, {\n\t width : canvas.height,\n\t height : canvas.width,\n\t orientation: orientation\n\t });\n\t } else {\n\t mpImg.render(canvas, {\n\t width : canvas.width,\n\t height : canvas.height,\n\t orientation: orientation\n\t });\n\t }\n\t\n\t resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n\t }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}());\n\t });\n\t};\n\t\n\tLrz.prototype._createBase64 = function () {\n\t var that = this,\n\t resize = that.resize,\n\t img = that.img,\n\t canvas = that.canvas,\n\t ctx = that.ctx,\n\t defaults = that.defaults,\n\t orientation = that.orientation;\n\t\n\t // 调整为正确方向\n\t switch (orientation) {\n\t case 3:\n\t ctx.rotate(180 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n\t break;\n\t case 6:\n\t ctx.rotate(90 * Math.PI / 180);\n\t ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n\t break;\n\t case 8:\n\t ctx.rotate(270 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n\t break;\n\t\n\t case 2:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.drawImage(img, 0, 0, resize.width, resize.height);\n\t break;\n\t case 4:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(180 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n\t break;\n\t case 5:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(90 * Math.PI / 180);\n\t ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n\t break;\n\t case 7:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(270 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n\t break;\n\t\n\t default:\n\t ctx.drawImage(img, 0, 0, resize.width, resize.height);\n\t }\n\t\n\t return new Promise(function (resolve) {\n\t if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) {\n\t !/* require */(/* empty */function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(6)]; (function (JPEGEncoder) {\n\t var encoder = new JPEGEncoder(),\n\t img = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\t\n\t resolve(encoder.encode(img, defaults.quality * 100));\n\t }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}())\n\t }\n\t else {\n\t resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n\t }\n\t });\n\t};\n\t\n\tLrz.prototype._getResize = function () {\n\t var that = this,\n\t img = that.img,\n\t defaults = that.defaults,\n\t width = defaults.width,\n\t height = defaults.height,\n\t orientation = that.orientation;\n\t\n\t var ret = {\n\t width : img.width,\n\t height: img.height\n\t };\n\t\n\t if (orientation && (\"5678\".indexOf(orientation) > -1)) {\n\t ret.width = img.height;\n\t ret.height = img.width;\n\t }\n\t\n\t var scale = ret.width / ret.height;\n\t\n\t if (width && height) {\n\t if (scale >= width / height) {\n\t if (ret.width > width) {\n\t ret.width = width;\n\t ret.height = Math.ceil(width / scale);\n\t }\n\t } else {\n\t if (ret.height > height) {\n\t ret.height = height;\n\t ret.width = Math.ceil(height * scale);\n\t }\n\t }\n\t }\n\t else if (width) {\n\t if (width < ret.width) {\n\t ret.width = width;\n\t ret.height = Math.ceil(width / scale);\n\t }\n\t }\n\t else if (height) {\n\t if (height < ret.height) {\n\t ret.width = Math.ceil(height * scale);\n\t ret.height = height;\n\t }\n\t }\n\t\n\t // 超过这个值base64无法生成,在IOS上\n\t while (ret.width >= 3264 || ret.height >= 2448) {\n\t ret.width *= 0.8;\n\t ret.height *= 0.8;\n\t }\n\t\n\t return ret;\n\t};\n\t\n\t/**\n\t * 获取当前js文件所在路径,必须得在代码顶部执行此函数\n\t * @returns {string}\n\t */\n\tfunction getCurrentJsDir () {\n\t var src = document.scripts[document.scripts.length - 1].src;\n\t\n\t return src.substr(0, src.lastIndexOf('/'));\n\t}\n\t\n\twindow.lrz = function (file, opts) {\n\t return new Lrz(file, opts);\n\t};\n\t\n\t// 版本号来自package.json,构建时自动填充\n\twindow.lrz.version = '4.2.1';\n\t\n\tmodule.exports = window.lrz;\n\t\n\t/**\n\t *\n\t *    ┏┓   ┏┓\n\t *   ┏┛┻━━━┛┻┓\n\t *   ┃       ┃\n\t *   ┃   ━   ┃\n\t *   ┃ ┳┛ ┗┳ ┃\n\t *   ┃       ┃\n\t *   ┃   ┻   ┃\n\t *   ┃       ┃\n\t *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n\t *     ┃   ┃ 神兽保佑,代码无bug\n\t *     ┃   ┃\n\t *     ┃   ┗━━━┓\n\t *     ┃      ┣┓\n\t *     ┃     ┏┛\n\t *     ┗┓┓┏━┳┓┏┛\n\t *      ┃┫┫ ┃┫┫\n\t *      ┗┻┛ ┗┻┛\n\t *\n\t */\n\t\n\t\n\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** lrz.all.bundle.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d11662f66af4feed7794\n **/","require('megapix-image');\nrequire('jpeg_encoder_basic');\n\nmodule.exports = require('lrz');\n\n/**\n *\n *    ┏┓   ┏┓\n *   ┏┛┻━━━┛┻┓\n *   ┃       ┃\n *   ┃   ━   ┃\n *   ┃ ┳┛ ┗┳ ┃\n *   ┃       ┃\n *   ┃   ┻   ┃\n *   ┃       ┃\n *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n *     ┃   ┃ 神兽保佑,代码无bug\n *     ┃   ┃\n *     ┃   ┗━━━┓\n *     ┃      ┣┓\n *     ┃     ┏┛\n *     ┗┓┓┏━┳┓┏┛\n *      ┃┫┫ ┃┫┫\n *      ┗┻┛ ┗┻┛\n *\n */\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/lrz.all.js\n ** module id = 0\n ** module chunks = 3\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/Promise.js\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/timers-browserify/main.js\n ** module id = 2\n ** module chunks = 0 3\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 3\n ** module chunks = 0 3\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/exif.js\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/megapix-image.js\n **/","function JPEGEncoder (l) {\n var o = this;\n var s = Math.round;\n var k = Math.floor;\n var O = new Array(64);\n var K = new Array(64);\n var d = new Array(64);\n var Z = new Array(64);\n var u;\n var h;\n var G;\n var T;\n var n = new Array(65535);\n var m = new Array(65535);\n var P = new Array(64);\n var S = new Array(64);\n var j = [];\n var t = 0;\n var a = 7;\n var A = new Array(64);\n var f = new Array(64);\n var U = new Array(64);\n var e = new Array(256);\n var C = new Array(2048);\n var x;\n var i = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\n var g = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n var c = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var w = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];\n var E = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n var v = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\n var Y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var J = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];\n var B = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];\n\n function M (ag) {\n var af = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99];\n for (var ae = 0; ae < 64; ae++) {\n var aj = k((af[ae] * ag + 50) / 100);\n if (aj < 1) {\n aj = 1\n } else {\n if (aj > 255) {\n aj = 255\n }\n }\n O[i[ae]] = aj\n }\n var ah = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99];\n for (var ad = 0; ad < 64; ad++) {\n var ai = k((ah[ad] * ag + 50) / 100);\n if (ai < 1) {\n ai = 1\n } else {\n if (ai > 255) {\n ai = 255\n }\n }\n K[i[ad]] = ai\n }\n var ac = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n var ab = 0;\n for (var ak = 0; ak < 8; ak++) {\n for (var aa = 0; aa < 8; aa++) {\n d[ab] = (1 / (O[i[ab]] * ac[ak] * ac[aa] * 8));\n Z[ab] = (1 / (K[i[ab]] * ac[ak] * ac[aa] * 8));\n ab++\n }\n }\n }\n\n function q (ae, aa) {\n var ad = 0;\n var ag = 0;\n var af = new Array();\n for (var ab = 1; ab <= 16; ab++) {\n for (var ac = 1; ac <= ae[ab]; ac++) {\n af[aa[ag]] = [];\n af[aa[ag]][0] = ad;\n af[aa[ag]][1] = ab;\n ag++;\n ad++\n }\n ad *= 2\n }\n return af\n }\n\n function W () {\n u = q(g, c);\n h = q(v, Y);\n G = q(w, E);\n T = q(J, B)\n }\n\n function z () {\n var ac = 1;\n var ab = 2;\n for (var aa = 1; aa <= 15; aa++) {\n for (var ad = ac; ad < ab; ad++) {\n m[32767 + ad] = aa;\n n[32767 + ad] = [];\n n[32767 + ad][1] = aa;\n n[32767 + ad][0] = ad\n }\n for (var ae = -(ab - 1); ae <= -ac; ae++) {\n m[32767 + ae] = aa;\n n[32767 + ae] = [];\n n[32767 + ae][1] = aa;\n n[32767 + ae][0] = ab - 1 + ae\n }\n ac <<= 1;\n ab <<= 1\n }\n }\n\n function V () {\n for (var aa = 0; aa < 256; aa++) {\n C[aa] = 19595 * aa;\n C[(aa + 256) >> 0] = 38470 * aa;\n C[(aa + 512) >> 0] = 7471 * aa + 32768;\n C[(aa + 768) >> 0] = -11059 * aa;\n C[(aa + 1024) >> 0] = -21709 * aa;\n C[(aa + 1280) >> 0] = 32768 * aa + 8421375;\n C[(aa + 1536) >> 0] = -27439 * aa;\n C[(aa + 1792) >> 0] = -5329 * aa\n }\n }\n\n function X (aa) {\n var ac = aa[0];\n var ab = aa[1] - 1;\n while (ab >= 0) {\n if (ac & (1 << ab)) {\n t |= (1 << a)\n }\n ab--;\n a--;\n if (a < 0) {\n if (t == 255) {\n F(255);\n F(0)\n } else {\n F(t)\n }\n a = 7;\n t = 0\n }\n }\n }\n\n function F (aa) {\n j.push(e[aa])\n }\n\n function p (aa) {\n F((aa >> 8) & 255);\n F((aa) & 255)\n }\n\n function N (aZ, ap) {\n var aL, aK, aJ, aI, aH, aD, aC, aB;\n var aN = 0;\n var aR;\n const aq = 8;\n const ai = 64;\n for (aR = 0; aR < aq; ++aR) {\n aL = aZ[aN];\n aK = aZ[aN + 1];\n aJ = aZ[aN + 2];\n aI = aZ[aN + 3];\n aH = aZ[aN + 4];\n aD = aZ[aN + 5];\n aC = aZ[aN + 6];\n aB = aZ[aN + 7];\n var aY = aL + aB;\n var aO = aL - aB;\n var aX = aK + aC;\n var aP = aK - aC;\n var aU = aJ + aD;\n var aQ = aJ - aD;\n var aT = aI + aH;\n var aS = aI - aH;\n var an = aY + aT;\n var ak = aY - aT;\n var am = aX + aU;\n var al = aX - aU;\n aZ[aN] = an + am;\n aZ[aN + 4] = an - am;\n var ax = (al + ak) * 0.707106781;\n aZ[aN + 2] = ak + ax;\n aZ[aN + 6] = ak - ax;\n an = aS + aQ;\n am = aQ + aP;\n al = aP + aO;\n var at = (an - al) * 0.382683433;\n var aw = 0.5411961 * an + at;\n var au = 1.306562965 * al + at;\n var av = am * 0.707106781;\n var ah = aO + av;\n var ag = aO - av;\n aZ[aN + 5] = ag + aw;\n aZ[aN + 3] = ag - aw;\n aZ[aN + 1] = ah + au;\n aZ[aN + 7] = ah - au;\n aN += 8\n }\n aN = 0;\n for (aR = 0; aR < aq; ++aR) {\n aL = aZ[aN];\n aK = aZ[aN + 8];\n aJ = aZ[aN + 16];\n aI = aZ[aN + 24];\n aH = aZ[aN + 32];\n aD = aZ[aN + 40];\n aC = aZ[aN + 48];\n aB = aZ[aN + 56];\n var ar = aL + aB;\n var aj = aL - aB;\n var az = aK + aC;\n var ae = aK - aC;\n var aG = aJ + aD;\n var ac = aJ - aD;\n var aW = aI + aH;\n var aa = aI - aH;\n var ao = ar + aW;\n var aV = ar - aW;\n var ay = az + aG;\n var aF = az - aG;\n aZ[aN] = ao + ay;\n aZ[aN + 32] = ao - ay;\n var af = (aF + aV) * 0.707106781;\n aZ[aN + 16] = aV + af;\n aZ[aN + 48] = aV - af;\n ao = aa + ac;\n ay = ac + ae;\n aF = ae + aj;\n var aM = (ao - aF) * 0.382683433;\n var ad = 0.5411961 * ao + aM;\n var a1 = 1.306562965 * aF + aM;\n var ab = ay * 0.707106781;\n var a0 = aj + ab;\n var aA = aj - ab;\n aZ[aN + 40] = aA + ad;\n aZ[aN + 24] = aA - ad;\n aZ[aN + 8] = a0 + a1;\n aZ[aN + 56] = a0 - a1;\n aN++\n }\n var aE;\n for (aR = 0; aR < ai; ++aR) {\n aE = aZ[aR] * ap[aR];\n P[aR] = (aE > 0) ? ((aE + 0.5) | 0) : ((aE - 0.5) | 0)\n }\n return P\n }\n\n function b () {\n p(65504);\n p(16);\n F(74);\n F(70);\n F(73);\n F(70);\n F(0);\n F(1);\n F(1);\n F(0);\n p(1);\n p(1);\n F(0);\n F(0)\n }\n\n function r (aa, ab) {\n p(65472);\n p(17);\n F(8);\n p(ab);\n p(aa);\n F(3);\n F(1);\n F(17);\n F(0);\n F(2);\n F(17);\n F(1);\n F(3);\n F(17);\n F(1)\n }\n\n function D () {\n p(65499);\n p(132);\n F(0);\n for (var ab = 0; ab < 64; ab++) {\n F(O[ab])\n }\n F(1);\n for (var aa = 0; aa < 64; aa++) {\n F(K[aa])\n }\n }\n\n function H () {\n p(65476);\n p(418);\n F(0);\n for (var ae = 0; ae < 16; ae++) {\n F(g[ae + 1])\n }\n for (var ad = 0; ad <= 11; ad++) {\n F(c[ad])\n }\n F(16);\n for (var ac = 0; ac < 16; ac++) {\n F(w[ac + 1])\n }\n for (var ab = 0; ab <= 161; ab++) {\n F(E[ab])\n }\n F(1);\n for (var aa = 0; aa < 16; aa++) {\n F(v[aa + 1])\n }\n for (var ah = 0; ah <= 11; ah++) {\n F(Y[ah])\n }\n F(17);\n for (var ag = 0; ag < 16; ag++) {\n F(J[ag + 1])\n }\n for (var af = 0; af <= 161; af++) {\n F(B[af])\n }\n }\n\n function I () {\n p(65498);\n p(12);\n F(3);\n F(1);\n F(0);\n F(2);\n F(17);\n F(3);\n F(17);\n F(0);\n F(63);\n F(0)\n }\n\n function L (ad, aa, al, at, ap) {\n var ag = ap[0];\n var ab = ap[240];\n var ac;\n const ar = 16;\n const ai = 63;\n const ah = 64;\n var aq = N(ad, aa);\n for (var am = 0; am < ah; ++am) {\n S[i[am]] = aq[am]\n }\n var an = S[0] - al;\n al = S[0];\n if (an == 0) {\n X(at[0])\n } else {\n ac = 32767 + an;\n X(at[m[ac]]);\n X(n[ac])\n }\n var ae = 63;\n for (; (ae > 0) && (S[ae] == 0); ae--) {\n }\n if (ae == 0) {\n X(ag);\n return al\n }\n var ao = 1;\n var au;\n while (ao <= ae) {\n var ak = ao;\n for (; (S[ao] == 0) && (ao <= ae); ++ao) {\n }\n var aj = ao - ak;\n if (aj >= ar) {\n au = aj >> 4;\n for (var af = 1; af <= au; ++af) {\n X(ab)\n }\n aj = aj & 15\n }\n ac = 32767 + S[ao];\n X(ap[(aj << 4) + m[ac]]);\n X(n[ac]);\n ao++\n }\n if (ae != ai) {\n X(ag)\n }\n return al\n }\n\n function y () {\n var ab = String.fromCharCode;\n for (var aa = 0; aa < 256; aa++) {\n e[aa] = ab(aa)\n }\n }\n\n this.encode = function (an, aj, aB) {\n var aa = new Date().getTime();\n if (aj) {\n R(aj)\n }\n j = new Array();\n t = 0;\n a = 7;\n p(65496);\n b();\n D();\n r(an.width, an.height);\n H();\n I();\n var al = 0;\n var aq = 0;\n var ao = 0;\n t = 0;\n a = 7;\n this.encode.displayName = \"_encode_\";\n var at = an.data;\n var ar = an.width;\n var aA = an.height;\n var ay = ar * 4;\n var ai = ar * 3;\n var ah, ag = 0;\n var am, ax, az;\n var ab, ap, ac, af, ae;\n while (ag < aA) {\n ah = 0;\n while (ah < ay) {\n ab = ay * ag + ah;\n ap = ab;\n ac = -1;\n af = 0;\n for (ae = 0; ae < 64; ae++) {\n af = ae >> 3;\n ac = (ae & 7) * 4;\n ap = ab + (af * ay) + ac;\n if (ag + af >= aA) {\n ap -= (ay * (ag + 1 + af - aA))\n }\n if (ah + ac >= ay) {\n ap -= ((ah + ac) - ay + 4)\n }\n am = at[ap++];\n ax = at[ap++];\n az = at[ap++];\n A[ae] = ((C[am] + C[(ax + 256) >> 0] + C[(az + 512) >> 0]) >> 16) - 128;\n f[ae] = ((C[(am + 768) >> 0] + C[(ax + 1024) >> 0] + C[(az + 1280) >> 0]) >> 16) - 128;\n U[ae] = ((C[(am + 1280) >> 0] + C[(ax + 1536) >> 0] + C[(az + 1792) >> 0]) >> 16) - 128\n }\n al = L(A, d, al, u, G);\n aq = L(f, Z, aq, h, T);\n ao = L(U, Z, ao, h, T);\n ah += 32\n }\n ag += 8\n }\n if (a >= 0) {\n var aw = [];\n aw[1] = a + 1;\n aw[0] = (1 << (a + 1)) - 1;\n X(aw)\n }\n p(65497);\n if (aB) {\n var av = j.length;\n var aC = new Uint8Array(av);\n for (var au = 0; au < av; au++) {\n aC[au] = j[au].charCodeAt()\n }\n j = [];\n var ak = new Date().getTime() - aa;\n return aC\n }\n var ad = \"data:image/jpeg;base64,\" + btoa(j.join(\"\"));\n j = [];\n var ak = new Date().getTime() - aa;\n return ad\n };\n function R (ab) {\n if (ab <= 0) {\n ab = 1\n }\n if (ab > 100) {\n ab = 100\n }\n if (x == ab) {\n return\n }\n var aa = 0;\n if (ab < 50) {\n aa = Math.floor(5000 / ab)\n } else {\n aa = Math.floor(200 - ab * 2)\n }\n M(aa);\n x = ab;\n }\n\n function Q () {\n var aa = new Date().getTime();\n if (!l) {\n l = 50\n }\n y();\n W();\n z();\n V();\n R(l);\n var ab = new Date().getTime() - aa;\n }\n\n Q()\n}\n\nmodule.exports = JPEGEncoder;\n\n\n/** WEBPACK FOOTER **\n ** src/lib/jpeg_encoder_basic.js\n **/","// 保证按需加载的文件路径正确\n__webpack_public_path__ = getCurrentJsDir() + '/';\nwindow.URL = window.URL || window.webkitURL;\n\nvar Promise = require('Promise'),\n exif = require('exif');\n\nvar UA = (function (userAgent) {\n var ISOldIOS = /OS (\\d)_.* like Mac OS X/g.exec(userAgent),\n isOldAndroid = /Android (\\d.*?);/g.exec(userAgent);\n\n // 判断设备是否是IOS7以下\n // 判断设备是否是android4.5以下\n // 判断是否iOS\n // 判断是否android\n // 判断是否QQ浏览器\n return {\n oldIOS : ISOldIOS ? +ISOldIOS.pop() < 8 : false,\n oldAndroid: isOldAndroid ? +isOldAndroid.pop().substr(0, 3) < 4.5 : false,\n iOS : /\\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent),\n android : /Android/g.test(userAgent),\n mQQBrowser: /MQQBrowser/g.test(userAgent)\n }\n})(navigator.userAgent);\n\nfunction Lrz (file, opts) {\n var that = this;\n\n if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7');\n\n opts = opts || {};\n\n that.defaults = {\n width : null,\n height : null,\n quality: 0.7\n };\n\n that.file = file;\n\n for (var p in opts) {\n if (!opts.hasOwnProperty(p)) continue;\n that.defaults[p] = opts[p];\n }\n\n return this.init();\n}\n\nLrz.prototype.init = function () {\n var that = this,\n file = that.file,\n img = new Image(),\n canvas = document.createElement('canvas'),\n blob = (typeof file === 'string') ? file : URL.createObjectURL(file);\n\n that.img = img;\n that.blob = blob;\n that.canvas = canvas;\n\n if (!document.createElement('canvas').getContext) {\n throw new Error('浏览器不支持canvas');\n }\n return new Promise(function (resolve, reject) {\n img.onerror = function () {\n throw new Error('加载图片文件失败');\n };\n\n img.onload = function () {\n that._getBase64()\n .then(function (base64) {\n if (base64.length < 10) reject('生成base64失败');\n\n return base64;\n })\n .then(function (base64) {\n resolve({\n origin : that.file,\n base64 : base64,\n base64Len: base64.length\n });\n\n // 释放内存\n for (var p in that) {\n if (!that.hasOwnProperty(p)) continue;\n\n that[p] = null;\n }\n URL.revokeObjectURL(that.blob);\n });\n };\n\n img.crossOrigin = \"*\";\n\n img.src = blob;\n });\n};\n\nLrz.prototype._getBase64 = function () {\n var that = this,\n img = that.img,\n file = that.file,\n canvas = that.canvas;\n\n var setCanvas = function () {\n };\n\n return new Promise(function (resolve) {\n // 传入blob在android4.3以下有bug\n exif.getData(typeof file === 'object' ? file : img, function () {\n that.orientation = exif.getTag(this, \"Orientation\");\n\n that.resize = that._getResize();\n that.ctx = canvas.getContext('2d');\n\n canvas.width = that.resize.width;\n canvas.height = that.resize.height;\n\n // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。\n that.ctx.fillStyle = '#fff';\n that.ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // 根据设备对应处理方式\n if (UA.oldIOS) {\n that._createBase64ForOldIOS().then(resolve);\n }\n else {\n that._createBase64().then(resolve);\n }\n });\n });\n};\n\n\nLrz.prototype._createBase64ForOldIOS = function () {\n var that = this,\n img = that.img,\n canvas = that.canvas,\n defaults = that.defaults,\n orientation = that.orientation;\n\n return new Promise(function (resolve) {\n require(['megapix-image'], function (MegaPixImage) {\n var mpImg = new MegaPixImage(img);\n\n if (\"5678\".indexOf(orientation) > -1) {\n mpImg.render(canvas, {\n width : canvas.height,\n height : canvas.width,\n orientation: orientation\n });\n } else {\n mpImg.render(canvas, {\n width : canvas.width,\n height : canvas.height,\n orientation: orientation\n });\n }\n\n resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n });\n });\n};\n\nLrz.prototype._createBase64 = function () {\n var that = this,\n resize = that.resize,\n img = that.img,\n canvas = that.canvas,\n ctx = that.ctx,\n defaults = that.defaults,\n orientation = that.orientation;\n\n // 调整为正确方向\n switch (orientation) {\n case 3:\n ctx.rotate(180 * Math.PI / 180);\n ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n break;\n case 6:\n ctx.rotate(90 * Math.PI / 180);\n ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n break;\n case 8:\n ctx.rotate(270 * Math.PI / 180);\n ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n break;\n\n case 2:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.drawImage(img, 0, 0, resize.width, resize.height);\n break;\n case 4:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(180 * Math.PI / 180);\n ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n break;\n case 5:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(90 * Math.PI / 180);\n ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n break;\n case 7:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(270 * Math.PI / 180);\n ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n break;\n\n default:\n ctx.drawImage(img, 0, 0, resize.width, resize.height);\n }\n\n return new Promise(function (resolve) {\n if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) {\n require(['jpeg_encoder_basic'], function (JPEGEncoder) {\n var encoder = new JPEGEncoder(),\n img = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n resolve(encoder.encode(img, defaults.quality * 100));\n })\n }\n else {\n resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n }\n });\n};\n\nLrz.prototype._getResize = function () {\n var that = this,\n img = that.img,\n defaults = that.defaults,\n width = defaults.width,\n height = defaults.height,\n orientation = that.orientation;\n\n var ret = {\n width : img.width,\n height: img.height\n };\n\n if (orientation && (\"5678\".indexOf(orientation) > -1)) {\n ret.width = img.height;\n ret.height = img.width;\n }\n\n var scale = ret.width / ret.height;\n\n if (width && height) {\n if (scale >= width / height) {\n if (ret.width > width) {\n ret.width = width;\n ret.height = Math.ceil(width / scale);\n }\n } else {\n if (ret.height > height) {\n ret.height = height;\n ret.width = Math.ceil(height * scale);\n }\n }\n }\n else if (width) {\n if (width < ret.width) {\n ret.width = width;\n ret.height = Math.ceil(width / scale);\n }\n }\n else if (height) {\n if (height < ret.height) {\n ret.width = Math.ceil(height * scale);\n ret.height = height;\n }\n }\n\n // 超过这个值base64无法生成,在IOS上\n while (ret.width >= 3264 || ret.height >= 2448) {\n ret.width *= 0.8;\n ret.height *= 0.8;\n }\n\n return ret;\n};\n\n/**\n * 获取当前js文件所在路径,必须得在代码顶部执行此函数\n * @returns {string}\n */\nfunction getCurrentJsDir () {\n var src = document.scripts[document.scripts.length - 1].src;\n\n return src.substr(0, src.lastIndexOf('/'));\n}\n\nwindow.lrz = function (file, opts) {\n return new Lrz(file, opts);\n};\n\n// 版本号来自package.json,构建时自动填充\nwindow.lrz.version = '4.2.1';\n\nmodule.exports = window.lrz;\n\n/**\n *\n *    ┏┓   ┏┓\n *   ┏┛┻━━━┛┻┓\n *   ┃       ┃\n *   ┃   ━   ┃\n *   ┃ ┳┛ ┗┳ ┃\n *   ┃       ┃\n *   ┃   ┻   ┃\n *   ┃       ┃\n *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n *     ┃   ┃ 神兽保佑,代码无bug\n *     ┃   ┃\n *     ┃   ┗━━━┓\n *     ┃      ┣┓\n *     ┃     ┏┛\n *     ┗┓┓┏━┳┓┏┛\n *      ┃┫┫ ┃┫┫\n *      ┗┻┛ ┗┻┛\n *\n */\n\n\n\n\n\n/** WEBPACK FOOTER **\n ** src/lrz.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/lrz.bundle.js b/dist/lrz.bundle.js index aeba620..b1e31bc 100644 --- a/dist/lrz.bundle.js +++ b/dist/lrz.bundle.js @@ -1,1624 +1,2 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ var parentJsonpFunction = window["webpackJsonp"]; -/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) { -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, callbacks = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) -/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]); -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules); -/******/ while(callbacks.length) -/******/ callbacks.shift().call(null, __webpack_require__); -/******/ -/******/ }; -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // "0" means "already loaded" -/******/ // Array means "loading", array contains callbacks -/******/ var installedChunks = { -/******/ 0:0 -/******/ }; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) { -/******/ // "0" is the signal for "already loaded" -/******/ if(installedChunks[chunkId] === 0) -/******/ return callback.call(null, __webpack_require__); -/******/ -/******/ // an array means "currently loading". -/******/ if(installedChunks[chunkId] !== undefined) { -/******/ installedChunks[chunkId].push(callback); -/******/ } else { -/******/ // start chunk loading -/******/ installedChunks[chunkId] = [callback]; -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ script.type = 'text/javascript'; -/******/ script.charset = 'utf-8'; -/******/ script.async = true; -/******/ -/******/ script.src = __webpack_require__.p + "" + ({}[chunkId]||chunkId) + ".chunk.js"; -/******/ head.appendChild(script); -/******/ } -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "./dist/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - // 保证按需加载的文件路径正确 - __webpack_require__.p = getCurrentJsDir() + '/'; - window.URL = window.URL || window.webkitURL; - - var Promise = __webpack_require__(1), - exif = __webpack_require__(4); - - var UA = (function (userAgent) { - // 判断设备是否是IOS7以下 - // 判断设备是否是android4.5以下 - // 判断是否iOS - // 判断是否android - // 判断是否QQ浏览器 - return { - oldIOS : +((/OS (\d)_.* like Mac OS X/g.exec(userAgent)).pop()) < 8, - oldAndroid: +((/Android (\d.*?);/g.exec(userAgent)).pop().substr(0, 3)) < 4.5, - iOS : /\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent), - android : /Android/g.test(userAgent), - mQQBrowser: /MQQBrowser/g.test(userAgent) - } - })(navigator.userAgent); - - function Lrz (file, opts) { - var that = this; - - if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7'); - - opts = opts || {}; - - that.defaults = { - width : null, - height : null, - quality: 0.7 - }; - - that.file = file; - - for (var p in opts) { - if (!opts.hasOwnProperty(p)) continue; - that.defaults[p] = opts[p]; - } - - return this.init(); - } - - Lrz.prototype.init = function () { - var that = this, - file = that.file, - img = new Image(), - canvas = document.createElement('canvas'), - blob = (typeof file === 'string') ? file : URL.createObjectURL(file); - - that.img = img; - that.blob = blob; - that.canvas = canvas; - - if (!document.createElement('canvas').getContext) { - throw new Error('浏览器不支持canvas'); - } - return new Promise(function (resolve, reject) { - img.onerror = function () { - throw new Error('加载图片文件失败'); - }; - - img.onload = function () { - that._getBase64() - .then(function (base64) { - if (base64.length < 10) reject('生成base64失败'); - - return base64; - }) - .then(function (base64) { - resolve({ - origin : that.file, - base64 : base64, - base64Len: base64.length - }); - - // 释放内存 - for (var p in that) { - if (!that.hasOwnProperty(p)) continue; - - that[p] = null; - } - URL.revokeObjectURL(that.blob); - }); - }; - - img.crossOrigin = "*"; - - img.src = blob; - }); - }; - - Lrz.prototype._getBase64 = function () { - var that = this, - img = that.img, - canvas = that.canvas; - - return new Promise(function (resolve) { - exif.getData(img, function () { - that.orientation = exif.getTag(this, "Orientation"); - that.resize = that._getResize(); - that.ctx = canvas.getContext('2d'); - - canvas.width = that.resize.width; - canvas.height = that.resize.height; - - // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。 - that.ctx.fillStyle = '#fff'; - that.ctx.fillRect(0, 0, canvas.width, canvas.height); - - // 根据设备进行不同处理 - UA.oldIOS - ? that._createBase64ForOldIOS().then(resolve) - : that._createBase64().then(resolve); - }); - }); - }; - - Lrz.prototype._createBase64ForOldIOS = function () { - var that = this, - img = that.img, - canvas = that.canvas, - orientation = that.orientation; - - return new Promise(function (resolve) { - __webpack_require__.e/* require */(1, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(5)]; (function (MegaPixImage) { - var mpImg = new MegaPixImage(img); - - if ("5678".indexOf(orientation) > -1) { - mpImg.render(canvas, { - width : canvas.height, - height : canvas.width, - orientation: orientation - }); - } else { - mpImg.render(canvas, { - width : canvas.width, - height : canvas.height, - orientation: orientation - }); - } - - resolve(canvas.toDataURL('image/jpeg', that.defaults.quality)); - }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}); - }); - }; - - Lrz.prototype._createBase64 = function () { - var that = this, - resize = that.resize, - img = that.img, - canvas = that.canvas, - ctx = that.ctx, - defaults = that.defaults, - orientation = that.orientation; - - // 调整为正确方向 - switch (orientation) { - case 3: - ctx.rotate(180 * Math.PI / 180); - ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height); - break; - case 6: - ctx.rotate(90 * Math.PI / 180); - ctx.drawImage(img, 0, -resize.width, resize.height, resize.width); - break; - case 8: - ctx.rotate(270 * Math.PI / 180); - ctx.drawImage(img, -resize.height, 0, resize.height, resize.width); - break; - - case 2: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.drawImage(img, 0, 0, resize.width, resize.height); - break; - case 4: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(180 * Math.PI / 180); - ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height); - break; - case 5: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(90 * Math.PI / 180); - ctx.drawImage(img, 0, -resize.width, resize.height, resize.width); - break; - case 7: - ctx.translate(resize.width, 0); - ctx.scale(-1, 1); - ctx.rotate(270 * Math.PI / 180); - ctx.drawImage(img, -resize.height, 0, resize.height, resize.width); - break; - - default: - ctx.drawImage(img, 0, 0, resize.width, resize.height); - } - - return new Promise(function (resolve) { - if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) { - __webpack_require__.e/* require */(2, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(6)]; (function (JPEGEncoder) { - var encoder = new JPEGEncoder(), - img = ctx.getImageData(0, 0, canvas.width, canvas.height); - - resolve(encoder.encode(img, defaults.quality * 100)); - }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}) - } - else { - resolve(canvas.toDataURL('image/jpeg', defaults.quality)); - } - }); - }; - - Lrz.prototype._getResize = function () { - var that = this, - img = that.img, - defaults = that.defaults, - width = defaults.width, - height = defaults.height, - orientation = that.orientation; - - var ret = { - width : img.width, - height: img.height - }; - - if (orientation && ("5678".indexOf(orientation) > -1)) { - ret.width = img.height; - ret.height = img.width; - } - - var scale = ret.width / ret.height; - - if (width && height) { - if (scale >= width / height) { - if (ret.width > width) { - ret.width = width; - ret.height = Math.ceil(width / scale); - } - } else { - if (ret.height > height) { - ret.height = height; - ret.width = Math.ceil(height * scale); - } - } - } - else if (width) { - if (width < ret.width) { - ret.width = width; - ret.height = Math.ceil(width / scale); - } - } - else if (height) { - if (height < ret.height) { - ret.width = Math.ceil(height * scale); - ret.height = height; - } - } - - // 超过这个值base64无法生成,在IOS上 - while (ret.width >= 3264 || ret.height >= 2448) { - ret.width *= 0.8; - ret.height *= 0.8; - } - - return ret; - }; - - /** - * 获取当前js文件所在路径,必须得在代码顶部执行此函数 - * @returns {string} - */ - function getCurrentJsDir () { - var src = document.scripts[document.scripts.length - 1].src; - - return src.substr(0, src.lastIndexOf('/')); - } - - window.lrz = function (file, opts) { - return new Lrz(file, opts); - }; - - // 版本号来自package.json,构建时自动填充 - window.lrz.version = '__packageJSON.version__'; - - module.exports = window.lrz; - - /** - * - *    ┏┓   ┏┓ - *   ┏┛┻━━━┛┻┓ - *   ┃       ┃ - *   ┃   ━   ┃ - *   ┃ ┳┛ ┗┳ ┃ - *   ┃       ┃ - *   ┃   ┻   ┃ - *   ┃       ┃ - *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting - *     ┃   ┃ 神兽保佑,代码无bug - *     ┃   ┃ - *     ┃   ┗━━━┓ - *     ┃      ┣┓ - *     ┃     ┏┛ - *     ┗┓┓┏━┳┓┏┛ - *      ┃┫┫ ┃┫┫ - *      ┗┻┛ ┗┻┛ - * - */ - - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(setImmediate) {(function (root) { - - // Use polyfill for setImmediate for performance gains - var asap = (typeof setImmediate === 'function' && setImmediate) || - function (fn) { - setTimeout(fn, 1); - }; - - // Polyfill for Function.prototype.bind - function bind (fn, thisArg) { - return function () { - fn.apply(thisArg, arguments); - } - } - - var isArray = Array.isArray || function (value) { - return Object.prototype.toString.call(value) === "[object Array]" - }; - - function Promise (fn) { - if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - this._state = null; - this._value = null; - this._deferreds = [] - - doResolve(fn, bind(resolve, this), bind(reject, this)) - } - - function handle (deferred) { - var me = this; - if (this._state === null) { - this._deferreds.push(deferred); - return - } - asap(function () { - var cb = me._state ? deferred.onFulfilled : deferred.onRejected - if (cb === null) { - (me._state ? deferred.resolve : deferred.reject)(me._value); - return; - } - var ret; - try { - ret = cb(me._value); - } - catch (e) { - deferred.reject(e); - return; - } - deferred.resolve(ret); - }) - } - - function resolve (newValue) { - try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.'); - if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { - var then = newValue.then; - if (typeof then === 'function') { - doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this)); - return; - } - } - this._state = true; - this._value = newValue; - finale.call(this); - } catch (e) { - reject.call(this, e); - } - } - - function reject (newValue) { - this._state = false; - this._value = newValue; - finale.call(this); - } - - function finale () { - for (var i = 0, len = this._deferreds.length; i < len; i++) { - handle.call(this, this._deferreds[i]); - } - this._deferreds = null; - } - - function Handler (onFulfilled, onRejected, resolve, reject) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.resolve = resolve; - this.reject = reject; - } - - /** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ - function doResolve (fn, onFulfilled, onRejected) { - var done = false; - try { - fn(function (value) { - if (done) return; - done = true; - onFulfilled(value); - }, function (reason) { - if (done) return; - done = true; - onRejected(reason); - }) - } catch (ex) { - if (done) return; - done = true; - onRejected(ex); - } - } - - Promise.prototype['catch'] = function (onRejected) { - return this.then(null, onRejected); - }; - - Promise.prototype.then = function (onFulfilled, onRejected) { - var me = this; - return new Promise(function (resolve, reject) { - handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject)); - }) - }; - - Promise.all = function () { - var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments); - - return new Promise(function (resolve, reject) { - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res (i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call(val, function (val) { - res(i, val) - }, reject); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); - }; - - Promise.resolve = function (value) { - if (value && typeof value === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function (resolve) { - resolve(value); - }); - }; - - Promise.reject = function (value) { - return new Promise(function (resolve, reject) { - reject(value); - }); - }; - - Promise.race = function (values) { - return new Promise(function (resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); - }; - - /** - * Set the immediate function to execute callbacks - * @param fn {function} Function to execute - * @private - */ - Promise._setImmediateFn = function _setImmediateFn (fn) { - asap = fn; - }; - - - Promise.prototype.always = function (callback) { - var constructor = this.constructor; - - return this.then(function (value) { - return constructor.resolve(callback()).then(function () { - return value; - }); - }, function (reason) { - return constructor.resolve(callback()).then(function () { - throw reason; - }); - }); - }; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = Promise; - } else if (!root.Promise) { - root.Promise = Promise; - } - - })(this); - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate)) - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(3).nextTick; - var apply = Function.prototype.apply; - var slice = Array.prototype.slice; - var immediateIds = {}; - var nextImmediateId = 0; - - // DOM APIs, for completeness - - exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); - }; - exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); - }; - exports.clearTimeout = - exports.clearInterval = function(timeout) { timeout.close(); }; - - function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; - } - Timeout.prototype.unref = Timeout.prototype.ref = function() {}; - Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); - }; - - // Does not start the time, just sets up the members needed. - exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; - }; - - exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; - }; - - exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } - }; - - // That's not how node.js implements it but the exposed api is the same. - exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; - }; - - exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; - }; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate, __webpack_require__(2).clearImmediate)) - -/***/ }, -/* 3 */ -/***/ function(module, exports) { - - // shim for using process in browser - - var process = module.exports = {}; - var queue = []; - var draining = false; - var currentQueue; - var queueIndex = -1; - - function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } - } - - function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); - } - - process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } - }; - - // v8 likes predictible objects - function Item(fun, array) { - this.fun = fun; - this.array = array; - } - Item.prototype.run = function () { - this.fun.apply(null, this.array); - }; - process.title = 'browser'; - process.browser = true; - process.env = {}; - process.argv = []; - process.version = ''; // empty string to avoid regexp issues - process.versions = {}; - - function noop() {} - - process.on = noop; - process.addListener = noop; - process.once = noop; - process.off = noop; - process.removeListener = noop; - process.removeAllListeners = noop; - process.emit = noop; - - process.binding = function (name) { - throw new Error('process.binding is not supported'); - }; - - process.cwd = function () { return '/' }; - process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); - }; - process.umask = function() { return 0; }; - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* exif */ - (function () { - - var debug = false; - - var root = this; - - var EXIF = function (obj) { - if (obj instanceof EXIF) return obj; - if (!(this instanceof EXIF)) return new EXIF(obj); - this.EXIFwrapped = obj; - }; - - if (true) { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = EXIF; - } - exports.EXIF = EXIF; - } else { - root.EXIF = EXIF; - } - - var ExifTags = EXIF.Tags = { - - // version tags - 0x9000: "ExifVersion", // EXIF version - 0xA000: "FlashpixVersion", // Flashpix format version - - // colorspace tags - 0xA001: "ColorSpace", // Color space information tag - - // image configuration - 0xA002: "PixelXDimension", // Valid width of meaningful image - 0xA003: "PixelYDimension", // Valid height of meaningful image - 0x9101: "ComponentsConfiguration", // Information about channels - 0x9102: "CompressedBitsPerPixel", // Compressed bits per pixel - - // user information - 0x927C: "MakerNote", // Any desired information written by the manufacturer - 0x9286: "UserComment", // Comments by user - - // related file - 0xA004: "RelatedSoundFile", // Name of related sound file - - // date and time - 0x9003: "DateTimeOriginal", // Date and time when the original image was generated - 0x9004: "DateTimeDigitized", // Date and time when the image was stored digitally - 0x9290: "SubsecTime", // Fractions of seconds for DateTime - 0x9291: "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal - 0x9292: "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized - - // picture-taking conditions - 0x829A: "ExposureTime", // Exposure time (in seconds) - 0x829D: "FNumber", // F number - 0x8822: "ExposureProgram", // Exposure program - 0x8824: "SpectralSensitivity", // Spectral sensitivity - 0x8827: "ISOSpeedRatings", // ISO speed rating - 0x8828: "OECF", // Optoelectric conversion factor - 0x9201: "ShutterSpeedValue", // Shutter speed - 0x9202: "ApertureValue", // Lens aperture - 0x9203: "BrightnessValue", // Value of brightness - 0x9204: "ExposureBias", // Exposure bias - 0x9205: "MaxApertureValue", // Smallest F number of lens - 0x9206: "SubjectDistance", // Distance to subject in meters - 0x9207: "MeteringMode", // Metering mode - 0x9208: "LightSource", // Kind of light source - 0x9209: "Flash", // Flash status - 0x9214: "SubjectArea", // Location and area of main subject - 0x920A: "FocalLength", // Focal length of the lens in mm - 0xA20B: "FlashEnergy", // Strobe energy in BCPS - 0xA20C: "SpatialFrequencyResponse", // - 0xA20E: "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit - 0xA20F: "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit - 0xA210: "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution - 0xA214: "SubjectLocation", // Location of subject in image - 0xA215: "ExposureIndex", // Exposure index selected on camera - 0xA217: "SensingMethod", // Image sensor type - 0xA300: "FileSource", // Image source (3 == DSC) - 0xA301: "SceneType", // Scene type (1 == directly photographed) - 0xA302: "CFAPattern", // Color filter array geometric pattern - 0xA401: "CustomRendered", // Special processing - 0xA402: "ExposureMode", // Exposure mode - 0xA403: "WhiteBalance", // 1 = auto white balance, 2 = manual - 0xA404: "DigitalZoomRation", // Digital zoom ratio - 0xA405: "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) - 0xA406: "SceneCaptureType", // Type of scene - 0xA407: "GainControl", // Degree of overall image gain adjustment - 0xA408: "Contrast", // Direction of contrast processing applied by camera - 0xA409: "Saturation", // Direction of saturation processing applied by camera - 0xA40A: "Sharpness", // Direction of sharpness processing applied by camera - 0xA40B: "DeviceSettingDescription", // - 0xA40C: "SubjectDistanceRange", // Distance to subject - - // other tags - 0xA005: "InteroperabilityIFDPointer", - 0xA420: "ImageUniqueID" // Identifier assigned uniquely to each image - }; - - var TiffTags = EXIF.TiffTags = { - 0x0100: "ImageWidth", - 0x0101: "ImageHeight", - 0x8769: "ExifIFDPointer", - 0x8825: "GPSInfoIFDPointer", - 0xA005: "InteroperabilityIFDPointer", - 0x0102: "BitsPerSample", - 0x0103: "Compression", - 0x0106: "PhotometricInterpretation", - 0x0112: "Orientation", - 0x0115: "SamplesPerPixel", - 0x011C: "PlanarConfiguration", - 0x0212: "YCbCrSubSampling", - 0x0213: "YCbCrPositioning", - 0x011A: "XResolution", - 0x011B: "YResolution", - 0x0128: "ResolutionUnit", - 0x0111: "StripOffsets", - 0x0116: "RowsPerStrip", - 0x0117: "StripByteCounts", - 0x0201: "JPEGInterchangeFormat", - 0x0202: "JPEGInterchangeFormatLength", - 0x012D: "TransferFunction", - 0x013E: "WhitePoint", - 0x013F: "PrimaryChromaticities", - 0x0211: "YCbCrCoefficients", - 0x0214: "ReferenceBlackWhite", - 0x0132: "DateTime", - 0x010E: "ImageDescription", - 0x010F: "Make", - 0x0110: "Model", - 0x0131: "Software", - 0x013B: "Artist", - 0x8298: "Copyright" - }; - - var GPSTags = EXIF.GPSTags = { - 0x0000: "GPSVersionID", - 0x0001: "GPSLatitudeRef", - 0x0002: "GPSLatitude", - 0x0003: "GPSLongitudeRef", - 0x0004: "GPSLongitude", - 0x0005: "GPSAltitudeRef", - 0x0006: "GPSAltitude", - 0x0007: "GPSTimeStamp", - 0x0008: "GPSSatellites", - 0x0009: "GPSStatus", - 0x000A: "GPSMeasureMode", - 0x000B: "GPSDOP", - 0x000C: "GPSSpeedRef", - 0x000D: "GPSSpeed", - 0x000E: "GPSTrackRef", - 0x000F: "GPSTrack", - 0x0010: "GPSImgDirectionRef", - 0x0011: "GPSImgDirection", - 0x0012: "GPSMapDatum", - 0x0013: "GPSDestLatitudeRef", - 0x0014: "GPSDestLatitude", - 0x0015: "GPSDestLongitudeRef", - 0x0016: "GPSDestLongitude", - 0x0017: "GPSDestBearingRef", - 0x0018: "GPSDestBearing", - 0x0019: "GPSDestDistanceRef", - 0x001A: "GPSDestDistance", - 0x001B: "GPSProcessingMethod", - 0x001C: "GPSAreaInformation", - 0x001D: "GPSDateStamp", - 0x001E: "GPSDifferential" - }; - - var StringValues = EXIF.StringValues = { - ExposureProgram : { - 0: "Not defined", - 1: "Manual", - 2: "Normal program", - 3: "Aperture priority", - 4: "Shutter priority", - 5: "Creative program", - 6: "Action program", - 7: "Portrait mode", - 8: "Landscape mode" - }, - MeteringMode : { - 0 : "Unknown", - 1 : "Average", - 2 : "CenterWeightedAverage", - 3 : "Spot", - 4 : "MultiSpot", - 5 : "Pattern", - 6 : "Partial", - 255: "Other" - }, - LightSource : { - 0 : "Unknown", - 1 : "Daylight", - 2 : "Fluorescent", - 3 : "Tungsten (incandescent light)", - 4 : "Flash", - 9 : "Fine weather", - 10 : "Cloudy weather", - 11 : "Shade", - 12 : "Daylight fluorescent (D 5700 - 7100K)", - 13 : "Day white fluorescent (N 4600 - 5400K)", - 14 : "Cool white fluorescent (W 3900 - 4500K)", - 15 : "White fluorescent (WW 3200 - 3700K)", - 17 : "Standard light A", - 18 : "Standard light B", - 19 : "Standard light C", - 20 : "D55", - 21 : "D65", - 22 : "D75", - 23 : "D50", - 24 : "ISO studio tungsten", - 255: "Other" - }, - Flash : { - 0x0000: "Flash did not fire", - 0x0001: "Flash fired", - 0x0005: "Strobe return light not detected", - 0x0007: "Strobe return light detected", - 0x0009: "Flash fired, compulsory flash mode", - 0x000D: "Flash fired, compulsory flash mode, return light not detected", - 0x000F: "Flash fired, compulsory flash mode, return light detected", - 0x0010: "Flash did not fire, compulsory flash mode", - 0x0018: "Flash did not fire, auto mode", - 0x0019: "Flash fired, auto mode", - 0x001D: "Flash fired, auto mode, return light not detected", - 0x001F: "Flash fired, auto mode, return light detected", - 0x0020: "No flash function", - 0x0041: "Flash fired, red-eye reduction mode", - 0x0045: "Flash fired, red-eye reduction mode, return light not detected", - 0x0047: "Flash fired, red-eye reduction mode, return light detected", - 0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode", - 0x004D: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", - 0x004F: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", - 0x0059: "Flash fired, auto mode, red-eye reduction mode", - 0x005D: "Flash fired, auto mode, return light not detected, red-eye reduction mode", - 0x005F: "Flash fired, auto mode, return light detected, red-eye reduction mode" - }, - SensingMethod : { - 1: "Not defined", - 2: "One-chip color area sensor", - 3: "Two-chip color area sensor", - 4: "Three-chip color area sensor", - 5: "Color sequential area sensor", - 7: "Trilinear sensor", - 8: "Color sequential linear sensor" - }, - SceneCaptureType : { - 0: "Standard", - 1: "Landscape", - 2: "Portrait", - 3: "Night scene" - }, - SceneType : { - 1: "Directly photographed" - }, - CustomRendered : { - 0: "Normal process", - 1: "Custom process" - }, - WhiteBalance : { - 0: "Auto white balance", - 1: "Manual white balance" - }, - GainControl : { - 0: "None", - 1: "Low gain up", - 2: "High gain up", - 3: "Low gain down", - 4: "High gain down" - }, - Contrast : { - 0: "Normal", - 1: "Soft", - 2: "Hard" - }, - Saturation : { - 0: "Normal", - 1: "Low saturation", - 2: "High saturation" - }, - Sharpness : { - 0: "Normal", - 1: "Soft", - 2: "Hard" - }, - SubjectDistanceRange: { - 0: "Unknown", - 1: "Macro", - 2: "Close view", - 3: "Distant view" - }, - FileSource : { - 3: "DSC" - }, - - Components: { - 0: "", - 1: "Y", - 2: "Cb", - 3: "Cr", - 4: "R", - 5: "G", - 6: "B" - } - }; - - function addEvent (element, event, handler) { - if (element.addEventListener) { - element.addEventListener(event, handler, false); - } else if (element.attachEvent) { - element.attachEvent("on" + event, handler); - } - } - - function imageHasData (img) { - return !!(img.exifdata); - } - - - function base64ToArrayBuffer (base64, contentType) { - contentType = contentType || base64.match(/^data\:([^\;]+)\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg' - base64 = base64.replace(/^data\:([^\;]+)\;base64,/gmi, ''); - var binary = atob(base64); - var len = binary.length; - var buffer = new ArrayBuffer(len); - var view = new Uint8Array(buffer); - for (var i = 0; i < len; i++) { - view[i] = binary.charCodeAt(i); - } - return buffer; - } - - function objectURLToBlob (url, callback) { - var http = new XMLHttpRequest(); - http.open("GET", url, true); - http.responseType = "blob"; - http.onload = function (e) { - if (this.status == 200 || this.status === 0) { - callback(this.response); - } - }; - http.send(); - } - - function getImageData (img, callback) { - function handleBinaryFile (binFile) { - var data = findEXIFinJPEG(binFile); - var iptcdata = findIPTCinJPEG(binFile); - img.exifdata = data || {}; - img.iptcdata = iptcdata || {}; - if (callback) { - callback.call(img); - } - } - - if (img.src) { - if (/^data\:/i.test(img.src)) { // Data URI - var arrayBuffer = base64ToArrayBuffer(img.src); - handleBinaryFile(arrayBuffer); - - } else if (/^blob\:/i.test(img.src)) { // Object URL - var fileReader = new FileReader(); - fileReader.onload = function (e) { - handleBinaryFile(e.target.result); - }; - objectURLToBlob(img.src, function (blob) { - fileReader.readAsArrayBuffer(blob); - }); - } else { - var http = new XMLHttpRequest(); - http.onload = function () { - if (this.status == 200 || this.status === 0) { - handleBinaryFile(http.response); - } else { - callback(new Error("Could not load image")); - } - http = null; - }; - http.open("GET", img.src, true); - http.responseType = "arraybuffer"; - http.send(null); - } - } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) { - var fileReader = new FileReader(); - fileReader.onload = function (e) { - if (debug) console.log("Got file of length " + e.target.result.byteLength); - handleBinaryFile(e.target.result); - }; - - fileReader.readAsArrayBuffer(img); - } - } - - function findEXIFinJPEG (file) { - var dataView = new DataView(file); - - if (debug) console.log("Got file of length " + file.byteLength); - if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { - if (debug) console.log("Not a valid JPEG"); - return false; // not a valid jpeg - } - - var offset = 2, - length = file.byteLength, - marker; - - while (offset < length) { - if (dataView.getUint8(offset) != 0xFF) { - if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset)); - return false; // not a valid marker, something is wrong - } - - marker = dataView.getUint8(offset + 1); - if (debug) console.log(marker); - - // we could implement handling for other markers here, - // but we're only looking for 0xFFE1 for EXIF data - - if (marker == 225) { - if (debug) console.log("Found 0xFFE1 marker"); - - return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2); - - // offset += 2 + file.getShortAt(offset+2, true); - - } else { - offset += 2 + dataView.getUint16(offset + 2); - } - - } - - } - - function findIPTCinJPEG (file) { - var dataView = new DataView(file); - - if (debug) console.log("Got file of length " + file.byteLength); - if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { - if (debug) console.log("Not a valid JPEG"); - return false; // not a valid jpeg - } - - var offset = 2, - length = file.byteLength; - - - var isFieldSegmentStart = function (dataView, offset) { - return ( - dataView.getUint8(offset) === 0x38 && - dataView.getUint8(offset + 1) === 0x42 && - dataView.getUint8(offset + 2) === 0x49 && - dataView.getUint8(offset + 3) === 0x4D && - dataView.getUint8(offset + 4) === 0x04 && - dataView.getUint8(offset + 5) === 0x04 - ); - }; - - while (offset < length) { - - if (isFieldSegmentStart(dataView, offset)) { - - // Get the length of the name header (which is padded to an even number of bytes) - var nameHeaderLength = dataView.getUint8(offset + 7); - if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1; - // Check for pre photoshop 6 format - if (nameHeaderLength === 0) { - // Always 4 - nameHeaderLength = 4; - } - - var startOffset = offset + 8 + nameHeaderLength; - var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); - - return readIPTCData(file, startOffset, sectionLength); - - break; - - } - - - // Not the marker, continue searching - offset++; - - } - - } - - var IptcFieldMap = { - 0x78: 'caption', - 0x6E: 'credit', - 0x19: 'keywords', - 0x37: 'dateCreated', - 0x50: 'byline', - 0x55: 'bylineTitle', - 0x7A: 'captionWriter', - 0x69: 'headline', - 0x74: 'copyright', - 0x0F: 'category' - }; - - function readIPTCData (file, startOffset, sectionLength) { - var dataView = new DataView(file); - var data = {}; - var fieldValue, fieldName, dataSize, segmentType, segmentSize; - var segmentStartPos = startOffset; - while (segmentStartPos < startOffset + sectionLength) { - if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) { - segmentType = dataView.getUint8(segmentStartPos + 2); - if (segmentType in IptcFieldMap) { - dataSize = dataView.getInt16(segmentStartPos + 3); - segmentSize = dataSize + 5; - fieldName = IptcFieldMap[segmentType]; - fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize); - // Check if we already stored a value with this name - if (data.hasOwnProperty(fieldName)) { - // Value already stored with this name, create multivalue field - if (data[fieldName] instanceof Array) { - data[fieldName].push(fieldValue); - } - else { - data[fieldName] = [data[fieldName], fieldValue]; - } - } - else { - data[fieldName] = fieldValue; - } - } - - } - segmentStartPos++; - } - return data; - } - - - function readTags (file, tiffStart, dirStart, strings, bigEnd) { - var entries = file.getUint16(dirStart, !bigEnd), - tags = {}, - entryOffset, tag, - i; - - for (i = 0; i < entries; i++) { - entryOffset = dirStart + i * 12 + 2; - tag = strings[file.getUint16(entryOffset, !bigEnd)]; - if (!tag && debug) console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd)); - tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); - } - return tags; - } - - - function readTagValue (file, entryOffset, tiffStart, dirStart, bigEnd) { - var type = file.getUint16(entryOffset + 2, !bigEnd), - numValues = file.getUint32(entryOffset + 4, !bigEnd), - valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart, - offset, - vals, val, n, - numerator, denominator; - - switch (type) { - case 1: // byte, 8-bit unsigned int - case 7: // undefined, 8-bit byte, value depending on field - if (numValues == 1) { - return file.getUint8(entryOffset + 8, !bigEnd); - } else { - offset = numValues > 4 ? valueOffset : (entryOffset + 8); - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint8(offset + n); - } - return vals; - } - - case 2: // ascii, 8-bit byte - offset = numValues > 4 ? valueOffset : (entryOffset + 8); - return getStringFromDB(file, offset, numValues - 1); - - case 3: // short, 16 bit int - if (numValues == 1) { - return file.getUint16(entryOffset + 8, !bigEnd); - } else { - offset = numValues > 2 ? valueOffset : (entryOffset + 8); - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint16(offset + 2 * n, !bigEnd); - } - return vals; - } - - case 4: // long, 32 bit int - if (numValues == 1) { - return file.getUint32(entryOffset + 8, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd); - } - return vals; - } - - case 5: // rational = two long values, first is numerator, second is denominator - if (numValues == 1) { - numerator = file.getUint32(valueOffset, !bigEnd); - denominator = file.getUint32(valueOffset + 4, !bigEnd); - val = new Number(numerator / denominator); - val.numerator = numerator; - val.denominator = denominator; - return val; - } else { - vals = []; - for (n = 0; n < numValues; n++) { - numerator = file.getUint32(valueOffset + 8 * n, !bigEnd); - denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd); - vals[n] = new Number(numerator / denominator); - vals[n].numerator = numerator; - vals[n].denominator = denominator; - } - return vals; - } - - case 9: // slong, 32 bit signed int - if (numValues == 1) { - return file.getInt32(entryOffset + 8, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd); - } - return vals; - } - - case 10: // signed rational, two slongs, first is numerator, second is denominator - if (numValues == 1) { - return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd); - } else { - vals = []; - for (n = 0; n < numValues; n++) { - vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd); - } - return vals; - } - } - } - - function getStringFromDB (buffer, start, length) { - var outstr = "", n; - for (n = start; n < start + length; n++) { - outstr += String.fromCharCode(buffer.getUint8(n)); - } - return outstr; - } - - function readEXIFData (file, start) { - if (getStringFromDB(file, start, 4) != "Exif") { - if (debug) console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4)); - return false; - } - - var bigEnd, - tags, tag, - exifData, gpsData, - tiffOffset = start + 6; - - // test for TIFF validity and endianness - if (file.getUint16(tiffOffset) == 0x4949) { - bigEnd = false; - } else if (file.getUint16(tiffOffset) == 0x4D4D) { - bigEnd = true; - } else { - if (debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"); - return false; - } - - if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002A) { - if (debug) console.log("Not valid TIFF data! (no 0x002A)"); - return false; - } - - var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); - - if (firstIFDOffset < 0x00000008) { - if (debug) console.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset + 4, !bigEnd)); - return false; - } - - tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd); - - if (tags.ExifIFDPointer) { - exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd); - for (tag in exifData) { - switch (tag) { - case "LightSource" : - case "Flash" : - case "MeteringMode" : - case "ExposureProgram" : - case "SensingMethod" : - case "SceneCaptureType" : - case "SceneType" : - case "CustomRendered" : - case "WhiteBalance" : - case "GainControl" : - case "Contrast" : - case "Saturation" : - case "Sharpness" : - case "SubjectDistanceRange" : - case "FileSource" : - exifData[tag] = StringValues[tag][exifData[tag]]; - break; - - case "ExifVersion" : - case "FlashpixVersion" : - exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]); - break; - - case "ComponentsConfiguration" : - exifData[tag] = - StringValues.Components[exifData[tag][0]] + - StringValues.Components[exifData[tag][1]] + - StringValues.Components[exifData[tag][2]] + - StringValues.Components[exifData[tag][3]]; - break; - } - tags[tag] = exifData[tag]; - } - } - - if (tags.GPSInfoIFDPointer) { - gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd); - for (tag in gpsData) { - switch (tag) { - case "GPSVersionID" : - gpsData[tag] = gpsData[tag][0] + - "." + gpsData[tag][1] + - "." + gpsData[tag][2] + - "." + gpsData[tag][3]; - break; - } - tags[tag] = gpsData[tag]; - } - } - - return tags; - } - - EXIF.getData = function (img, callback) { - if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) return false; - - if (!imageHasData(img)) { - getImageData(img, callback); - } else { - if (callback) { - callback.call(img); - } - } - return true; - } - - EXIF.getTag = function (img, tag) { - if (!imageHasData(img)) return; - return img.exifdata[tag]; - } - - EXIF.getAllTags = function (img) { - if (!imageHasData(img)) return {}; - var a, - data = img.exifdata, - tags = {}; - for (a in data) { - if (data.hasOwnProperty(a)) { - tags[a] = data[a]; - } - } - return tags; - } - - EXIF.pretty = function (img) { - if (!imageHasData(img)) return ""; - var a, - data = img.exifdata, - strPretty = ""; - for (a in data) { - if (data.hasOwnProperty(a)) { - if (typeof data[a] == "object") { - if (data[a] instanceof Number) { - strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a].denominator + "]\r\n"; - } else { - strPretty += a + " : [" + data[a].length + " values]\r\n"; - } - } else { - strPretty += a + " : " + data[a] + "\r\n"; - } - } - } - return strPretty; - } - - EXIF.readFromBinaryFile = function (file) { - return findEXIFinJPEG(file); - } - - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { - return EXIF; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } - }.call(this)); - -/***/ } -/******/ ]); +!function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n=window.webpackJsonp;window.webpackJsonp=function(r,o){for(var a,s,u=0,c=[];u-1?o.render(r,{width:r.height,height:r.width,orientation:a}):o.render(r,{width:r.width,height:r.height,orientation:a}),e(r.toDataURL("image/jpeg",i.quality))}).apply(null,o)})})},r.prototype._createBase64=function(){var e=this,t=e.resize,r=e.img,i=e.canvas,a=e.ctx,u=e.defaults,c=e.orientation;switch(c){case 3:a.rotate(180*Math.PI/180),a.drawImage(r,-t.width,-t.height,t.width,t.height);break;case 6:a.rotate(90*Math.PI/180),a.drawImage(r,0,-t.width,t.height,t.width);break;case 8:a.rotate(270*Math.PI/180),a.drawImage(r,-t.height,0,t.height,t.width);break;case 2:a.translate(t.width,0),a.scale(-1,1),a.drawImage(r,0,0,t.width,t.height);break;case 4:a.translate(t.width,0),a.scale(-1,1),a.rotate(180*Math.PI/180),a.drawImage(r,-t.width,-t.height,t.width,t.height);break;case 5:a.translate(t.width,0),a.scale(-1,1),a.rotate(90*Math.PI/180),a.drawImage(r,0,-t.width,t.height,t.width);break;case 7:a.translate(t.width,0),a.scale(-1,1),a.rotate(270*Math.PI/180),a.drawImage(r,-t.height,0,t.height,t.width);break;default:a.drawImage(r,0,0,t.width,t.height)}return new o(function(e){s.oldAndroid||s.mQQBrowser||!navigator.userAgent?n.e(2,function(t){var n=[t(6)];(function(t){var n=new t,r=a.getImageData(0,0,i.width,i.height);e(n.encode(r,100*u.quality))}).apply(null,n)}):e(i.toDataURL("image/jpeg",u.quality))})},r.prototype._getResize=function(){var e=this,t=e.img,n=e.defaults,r=n.width,i=n.height,o=e.orientation,a={width:t.width,height:t.height};o&&"5678".indexOf(o)>-1&&(a.width=t.height,a.height=t.width);var s=a.width/a.height;for(r&&i?s>=r/i?a.width>r&&(a.width=r,a.height=Math.ceil(r/s)):a.height>i&&(a.height=i,a.width=Math.ceil(i*s)):r?r=3264||a.height>=2448;)a.width*=.8,a.height*=.8;return a},window.lrz=function(e,t){return new r(e,t)},window.lrz.version="4.2.1",e.exports=window.lrz},function(e,t,n){(function(t){!function(n){function r(e,t){return function(){e.apply(t,arguments)}}function i(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],l(e,r(a,this),r(s,this))}function o(e){var t=this;return null===this._state?void this._deferreds.push(e):void d(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function a(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void l(r(t,e),r(a,this),r(s,this))}this._state=!0,this._value=e,u.call(this)}catch(n){s.call(this,n)}}function s(e){this._state=!1,this._value=e,u.call(this)}function u(){for(var e=0,t=this._deferreds.length;t>e;e++)o.call(this,this._deferreds[e]);this._deferreds=null}function c(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function l(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(i){if(r)return;r=!0,n(i)}}var d="function"==typeof t&&t||function(e){setTimeout(e,1)},h=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=this;return new i(function(r,i){o.call(n,new c(e,t,r,i))})},i.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&h(arguments[0])?arguments[0]:arguments);return new i(function(t,n){function r(o,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(o,e)},n)}e[o]=a,0===--i&&t(e)}catch(u){n(u)}}if(0===e.length)return t([]);for(var i=e.length,o=0;or;r++)e[r].then(t,n)})},i._setImmediateFn=function(e){d=e},i.prototype.always=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})},"undefined"!=typeof e&&e.exports?e.exports=i:n.Promise||(n.Promise=i)}(this)}).call(t,n(2).setImmediate)},function(e,t,n){(function(e,r){function i(e,t){this._id=e,this._clearFn=t}var o=n(3).nextTick,a=Function.prototype.apply,s=Array.prototype.slice,u={},c=0;t.setTimeout=function(){return new i(a.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new i(a.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},t.setImmediate="function"==typeof e?e:function(e){var n=c++,r=arguments.length<2?!1:s.call(arguments,1);return u[n]=!0,o(function(){u[n]&&(r?e.apply(null,r):e.call(null),t.clearImmediate(n))}),n},t.clearImmediate="function"==typeof r?r:function(e){delete u[e]}}).call(t,n(2).setImmediate,n(2).clearImmediate)},function(e,t){function n(){c=!1,a.length?u=a.concat(u):l=-1,u.length&&r()}function r(){if(!c){var e=setTimeout(n);c=!0;for(var t=u.length;t;){for(a=u,u=[];++l1)for(var n=1;na;a++)o[a]=n.charCodeAt(a);return i}function a(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="blob",n.onload=function(e){(200==this.status||0===this.status)&&t(this.response)},n.send()}function s(e,t){function n(n){var r=u(n),i=c(n);e.exifdata=r||{},e.iptcdata=i||{},t&&t.call(e)}if(e.src)if(/^data\:/i.test(e.src)){var r=o(e.src);n(r)}else if(/^blob\:/i.test(e.src)){var i=new FileReader;i.onload=function(e){n(e.target.result)},a(e.src,function(e){i.readAsArrayBuffer(e)})}else{var s=new XMLHttpRequest;s.onload=function(){200==this.status||0===this.status?n(s.response):t(new Error("Could not load image")),s=null},s.open("GET",e.src,!0),s.responseType="arraybuffer",s.send(null)}else if(window.FileReader&&(e instanceof window.Blob||e instanceof window.File)){var i=new FileReader;i.onload=function(e){p&&console.log("Got file of length "+e.target.result.byteLength),n(e.target.result)},i.readAsArrayBuffer(e)}}function u(e){var t=new DataView(e);if(p&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return p&&console.log("Not a valid JPEG"),!1;for(var n,r=2,i=e.byteLength;i>r;){if(255!=t.getUint8(r))return p&&console.log("Not a valid marker at offset "+r+", found: "+t.getUint8(r)),!1;if(n=t.getUint8(r+1),p&&console.log(n),225==n)return p&&console.log("Found 0xFFE1 marker"),g(t,r+4,t.getUint16(r+2)-2);r+=2+t.getUint16(r+2)}}function c(e){var t=new DataView(e);if(p&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return p&&console.log("Not a valid JPEG"),!1;for(var n=2,r=e.byteLength,i=function(e,t){return 56===e.getUint8(t)&&66===e.getUint8(t+1)&&73===e.getUint8(t+2)&&77===e.getUint8(t+3)&&4===e.getUint8(t+4)&&4===e.getUint8(t+5)};r>n;){if(i(t,n)){var o=t.getUint8(n+7);o%2!==0&&(o+=1),0===o&&(o=4);var a=n+8+o,s=t.getUint16(n+6+o);return l(e,a,s)}n++}}function l(e,t,n){for(var r,i,o,a,s,u=new DataView(e),c={},l=t;t+n>l;)28===u.getUint8(l)&&2===u.getUint8(l+1)&&(a=u.getUint8(l+2),a in P&&(o=u.getInt16(l+3),s=o+5,i=P[a],r=f(u,l+5,o),c.hasOwnProperty(i)?c[i]instanceof Array?c[i].push(r):c[i]=[c[i],r]:c[i]=r)),l++;return c}function d(e,t,n,r,i){var o,a,s,u=e.getUint16(n,!i),c={};for(s=0;u>s;s++)o=n+12*s+2,a=r[e.getUint16(o,!i)],!a&&p&&console.log("Unknown tag: "+e.getUint16(o,!i)),c[a]=h(e,o,t,n,i);return c}function h(e,t,n,r,i){var o,a,s,u,c,l,d=e.getUint16(t+2,!i),h=e.getUint32(t+4,!i),g=e.getUint32(t+8,!i)+n;switch(d){case 1:case 7:if(1==h)return e.getUint8(t+8,!i);for(o=h>4?g:t+8,a=[],u=0;h>u;u++)a[u]=e.getUint8(o+u);return a;case 2:return o=h>4?g:t+8,f(e,o,h-1);case 3:if(1==h)return e.getUint16(t+8,!i);for(o=h>2?g:t+8,a=[],u=0;h>u;u++)a[u]=e.getUint16(o+2*u,!i);return a;case 4:if(1==h)return e.getUint32(t+8,!i);for(a=[],u=0;h>u;u++)a[u]=e.getUint32(g+4*u,!i);return a;case 5:if(1==h)return c=e.getUint32(g,!i),l=e.getUint32(g+4,!i),s=new Number(c/l),s.numerator=c,s.denominator=l,s;for(a=[],u=0;h>u;u++)c=e.getUint32(g+8*u,!i),l=e.getUint32(g+4+8*u,!i),a[u]=new Number(c/l),a[u].numerator=c,a[u].denominator=l;return a;case 9:if(1==h)return e.getInt32(t+8,!i);for(a=[],u=0;h>u;u++)a[u]=e.getInt32(g+4*u,!i);return a;case 10:if(1==h)return e.getInt32(g,!i)/e.getInt32(g+4,!i);for(a=[],u=0;h>u;u++)a[u]=e.getInt32(g+8*u,!i)/e.getInt32(g+4+8*u,!i);return a}}function f(e,t,n){var r,i="";for(r=t;t+n>r;r++)i+=String.fromCharCode(e.getUint8(r));return i}function g(e,t){if("Exif"!=f(e,t,4))return p&&console.log("Not valid EXIF data! "+f(e,t,4)),!1;var n,r,i,o,a,s=t+6;if(18761==e.getUint16(s))n=!1;else{if(19789!=e.getUint16(s))return p&&console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"),!1;n=!0}if(42!=e.getUint16(s+2,!n))return p&&console.log("Not valid TIFF data! (no 0x002A)"),!1;var u=e.getUint32(s+4,!n);if(8>u)return p&&console.log("Not valid TIFF data! (First offset less than 8)",e.getUint32(s+4,!n)),!1;if(r=d(e,s,s+u,v,n),r.ExifIFDPointer){o=d(e,s,s+r.ExifIFDPointer,w,n);for(i in o){switch(i){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":o[i]=S[i][o[i]];break;case"ExifVersion":case"FlashpixVersion":o[i]=String.fromCharCode(o[i][0],o[i][1],o[i][2],o[i][3]);break;case"ComponentsConfiguration":o[i]=S.Components[o[i][0]]+S.Components[o[i][1]]+S.Components[o[i][2]]+S.Components[o[i][3]]}r[i]=o[i]}}if(r.GPSInfoIFDPointer){a=d(e,s,s+r.GPSInfoIFDPointer,y,n);for(i in a){switch(i){case"GPSVersionID":a[i]=a[i][0]+"."+a[i][1]+"."+a[i][2]+"."+a[i][3]}r[i]=a[i]}}return r}var p=!1,m=function(e){return e instanceof m?e:this instanceof m?void(this.EXIFwrapped=e):new m(e)};"undefined"!=typeof e&&e.exports&&(t=e.exports=m),t.EXIF=m;var w=m.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"},v=m.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},y=m.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},S=m.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}},P={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};m.getData=function(e,t){return(e instanceof Image||e instanceof HTMLImageElement)&&!e.complete?!1:(n(e)?t&&t.call(e):s(e,t),!0)},m.getTag=function(e,t){return n(e)?e.exifdata[t]:void 0},m.getAllTags=function(e){if(!n(e))return{};var t,r=e.exifdata,i={};for(t in r)r.hasOwnProperty(t)&&(i[t]=r[t]);return i},m.pretty=function(e){if(!n(e))return"";var t,r=e.exifdata,i="";for(t in r)r.hasOwnProperty(t)&&(i+="object"==typeof r[t]?r[t]instanceof Number?t+" : "+r[t]+" ["+r[t].numerator+"/"+r[t].denominator+"]\r\n":t+" : ["+r[t].length+" values]\r\n":t+" : "+r[t]+"\r\n");return i},m.readFromBinaryFile=function(e){return u(e)},r=[],i=function(){return m}.apply(t,r),!(void 0!==i&&(e.exports=i))}).call(this)}]); //# sourceMappingURL=lrz.bundle.js.map \ No newline at end of file diff --git a/dist/lrz.bundle.js.map b/dist/lrz.bundle.js.map new file mode 100644 index 0000000..bea3287 --- /dev/null +++ b/dist/lrz.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///lrz.bundle.js","webpack:///webpack/bootstrap d11662f66af4feed7794","webpack:///./src/lrz.js","webpack:///src/lib/Promise.js","webpack:///(webpack)/~/node-libs-browser/~/timers-browserify/main.js","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js","webpack:///src/lib/exif.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","parentJsonpFunction","window","chunkIds","moreModules","chunkId","i","callbacks","length","installedChunks","push","apply","shift","e","callback","undefined","head","document","getElementsByTagName","script","createElement","type","charset","async","src","p","appendChild","m","c","Lrz","file","opts","that","this","Error","defaults","width","height","quality","hasOwnProperty","init","getCurrentJsDir","scripts","substr","lastIndexOf","URL","webkitURL","Promise","exif","UA","userAgent","ISOldIOS","exec","isOldAndroid","oldIOS","pop","oldAndroid","iOS","test","android","mQQBrowser","navigator","prototype","img","Image","canvas","blob","createObjectURL","getContext","resolve","reject","onerror","onload","_getBase64","then","base64","origin","base64Len","revokeObjectURL","crossOrigin","getData","orientation","getTag","resize","_getResize","ctx","fillStyle","fillRect","_createBase64ForOldIOS","_createBase64","__WEBPACK_AMD_REQUIRE_ARRAY__","MegaPixImage","mpImg","indexOf","render","toDataURL","rotate","Math","PI","drawImage","translate","scale","JPEGEncoder","encoder","getImageData","encode","ret","ceil","lrz","version","setImmediate","root","bind","fn","thisArg","arguments","TypeError","_state","_value","_deferreds","doResolve","handle","deferred","me","asap","cb","onFulfilled","onRejected","newValue","finale","len","Handler","done","value","reason","ex","setTimeout","isArray","Array","Object","toString","all","args","slice","res","val","remaining","constructor","race","values","_setImmediateFn","always","clearImmediate","Timeout","clearFn","_id","_clearFn","nextTick","Function","immediateIds","nextImmediateId","clearTimeout","setInterval","clearInterval","timeout","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","run","Item","fun","array","noop","process","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","imageHasData","base64ToArrayBuffer","contentType","match","replace","binary","atob","buffer","ArrayBuffer","view","Uint8Array","charCodeAt","objectURLToBlob","url","http","XMLHttpRequest","open","responseType","status","response","send","handleBinaryFile","binFile","data","findEXIFinJPEG","iptcdata","findIPTCinJPEG","exifdata","arrayBuffer","fileReader","FileReader","target","result","readAsArrayBuffer","Blob","File","debug","console","log","byteLength","dataView","DataView","getUint8","marker","offset","readEXIFData","getUint16","isFieldSegmentStart","nameHeaderLength","startOffset","sectionLength","readIPTCData","fieldValue","fieldName","dataSize","segmentType","segmentSize","segmentStartPos","IptcFieldMap","getInt16","getStringFromDB","readTags","tiffStart","dirStart","strings","bigEnd","entryOffset","tag","entries","tags","readTagValue","vals","n","numerator","denominator","numValues","getUint32","valueOffset","Number","getInt32","start","outstr","String","fromCharCode","exifData","gpsData","tiffOffset","firstIFDOffset","TiffTags","ExifIFDPointer","ExifTags","StringValues","Components","GPSInfoIFDPointer","GPSTags","EXIF","obj","EXIFwrapped","Tags",36864,40960,40961,40962,40963,37121,37122,37500,37510,40964,36867,36868,37520,37521,37522,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37396,37386,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,40965,42016,256,257,34665,34853,258,259,262,274,277,284,530,531,282,283,296,273,278,279,513,514,301,318,319,529,532,306,270,271,272,305,315,33432,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,"ExposureProgram","MeteringMode",255,"LightSource","Flash",31,32,65,69,71,73,77,79,89,93,95,"SensingMethod","SceneCaptureType","SceneType","CustomRendered","WhiteBalance","GainControl","Contrast","Saturation","Sharpness","SubjectDistanceRange","FileSource",120,110,55,80,85,122,105,116,"HTMLImageElement","complete","getAllTags","a","pretty","strPretty","readFromBinaryFile"],"mappings":"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","file":"lrz.bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t0:0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n/******/\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n/******/\n/******/ \t\t\tscript.src = __webpack_require__.p + \"\" + ({}[chunkId]||chunkId) + \".chunk.js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"./dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 保证按需加载的文件路径正确\n\t__webpack_require__.p = getCurrentJsDir() + '/';\n\twindow.URL = window.URL || window.webkitURL;\n\t\n\tvar Promise = __webpack_require__(1),\n\t exif = __webpack_require__(4);\n\t\n\tvar UA = (function (userAgent) {\n\t var ISOldIOS = /OS (\\d)_.* like Mac OS X/g.exec(userAgent),\n\t isOldAndroid = /Android (\\d.*?);/g.exec(userAgent);\n\t\n\t // 判断设备是否是IOS7以下\n\t // 判断设备是否是android4.5以下\n\t // 判断是否iOS\n\t // 判断是否android\n\t // 判断是否QQ浏览器\n\t return {\n\t oldIOS : ISOldIOS ? +ISOldIOS.pop() < 8 : false,\n\t oldAndroid: isOldAndroid ? +isOldAndroid.pop().substr(0, 3) < 4.5 : false,\n\t iOS : /\\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent),\n\t android : /Android/g.test(userAgent),\n\t mQQBrowser: /MQQBrowser/g.test(userAgent)\n\t }\n\t})(navigator.userAgent);\n\t\n\tfunction Lrz (file, opts) {\n\t var that = this;\n\t\n\t if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7');\n\t\n\t opts = opts || {};\n\t\n\t that.defaults = {\n\t width : null,\n\t height : null,\n\t quality: 0.7\n\t };\n\t\n\t that.file = file;\n\t\n\t for (var p in opts) {\n\t if (!opts.hasOwnProperty(p)) continue;\n\t that.defaults[p] = opts[p];\n\t }\n\t\n\t return this.init();\n\t}\n\t\n\tLrz.prototype.init = function () {\n\t var that = this,\n\t file = that.file,\n\t img = new Image(),\n\t canvas = document.createElement('canvas'),\n\t blob = (typeof file === 'string') ? file : URL.createObjectURL(file);\n\t\n\t that.img = img;\n\t that.blob = blob;\n\t that.canvas = canvas;\n\t\n\t if (!document.createElement('canvas').getContext) {\n\t throw new Error('浏览器不支持canvas');\n\t }\n\t return new Promise(function (resolve, reject) {\n\t img.onerror = function () {\n\t throw new Error('加载图片文件失败');\n\t };\n\t\n\t img.onload = function () {\n\t that._getBase64()\n\t .then(function (base64) {\n\t if (base64.length < 10) reject('生成base64失败');\n\t\n\t return base64;\n\t })\n\t .then(function (base64) {\n\t resolve({\n\t origin : that.file,\n\t base64 : base64,\n\t base64Len: base64.length\n\t });\n\t\n\t // 释放内存\n\t for (var p in that) {\n\t if (!that.hasOwnProperty(p)) continue;\n\t\n\t that[p] = null;\n\t }\n\t URL.revokeObjectURL(that.blob);\n\t });\n\t };\n\t\n\t img.crossOrigin = \"*\";\n\t\n\t img.src = blob;\n\t });\n\t};\n\t\n\tLrz.prototype._getBase64 = function () {\n\t var that = this,\n\t img = that.img,\n\t file = that.file,\n\t canvas = that.canvas;\n\t\n\t var setCanvas = function () {\n\t };\n\t\n\t return new Promise(function (resolve) {\n\t // 传入blob在android4.3以下有bug\n\t exif.getData(typeof file === 'object' ? file : img, function () {\n\t that.orientation = exif.getTag(this, \"Orientation\");\n\t\n\t that.resize = that._getResize();\n\t that.ctx = canvas.getContext('2d');\n\t\n\t canvas.width = that.resize.width;\n\t canvas.height = that.resize.height;\n\t\n\t // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。\n\t that.ctx.fillStyle = '#fff';\n\t that.ctx.fillRect(0, 0, canvas.width, canvas.height);\n\t\n\t // 根据设备对应处理方式\n\t if (UA.oldIOS) {\n\t that._createBase64ForOldIOS().then(resolve);\n\t }\n\t else {\n\t that._createBase64().then(resolve);\n\t }\n\t });\n\t });\n\t};\n\t\n\t\n\tLrz.prototype._createBase64ForOldIOS = function () {\n\t var that = this,\n\t img = that.img,\n\t canvas = that.canvas,\n\t defaults = that.defaults,\n\t orientation = that.orientation;\n\t\n\t return new Promise(function (resolve) {\n\t __webpack_require__.e/* require */(1, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(5)]; (function (MegaPixImage) {\n\t var mpImg = new MegaPixImage(img);\n\t\n\t if (\"5678\".indexOf(orientation) > -1) {\n\t mpImg.render(canvas, {\n\t width : canvas.height,\n\t height : canvas.width,\n\t orientation: orientation\n\t });\n\t } else {\n\t mpImg.render(canvas, {\n\t width : canvas.width,\n\t height : canvas.height,\n\t orientation: orientation\n\t });\n\t }\n\t\n\t resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n\t }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));});\n\t });\n\t};\n\t\n\tLrz.prototype._createBase64 = function () {\n\t var that = this,\n\t resize = that.resize,\n\t img = that.img,\n\t canvas = that.canvas,\n\t ctx = that.ctx,\n\t defaults = that.defaults,\n\t orientation = that.orientation;\n\t\n\t // 调整为正确方向\n\t switch (orientation) {\n\t case 3:\n\t ctx.rotate(180 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n\t break;\n\t case 6:\n\t ctx.rotate(90 * Math.PI / 180);\n\t ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n\t break;\n\t case 8:\n\t ctx.rotate(270 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n\t break;\n\t\n\t case 2:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.drawImage(img, 0, 0, resize.width, resize.height);\n\t break;\n\t case 4:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(180 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n\t break;\n\t case 5:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(90 * Math.PI / 180);\n\t ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n\t break;\n\t case 7:\n\t ctx.translate(resize.width, 0);\n\t ctx.scale(-1, 1);\n\t ctx.rotate(270 * Math.PI / 180);\n\t ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n\t break;\n\t\n\t default:\n\t ctx.drawImage(img, 0, 0, resize.width, resize.height);\n\t }\n\t\n\t return new Promise(function (resolve) {\n\t if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) {\n\t __webpack_require__.e/* require */(2, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(6)]; (function (JPEGEncoder) {\n\t var encoder = new JPEGEncoder(),\n\t img = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\t\n\t resolve(encoder.encode(img, defaults.quality * 100));\n\t }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));})\n\t }\n\t else {\n\t resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n\t }\n\t });\n\t};\n\t\n\tLrz.prototype._getResize = function () {\n\t var that = this,\n\t img = that.img,\n\t defaults = that.defaults,\n\t width = defaults.width,\n\t height = defaults.height,\n\t orientation = that.orientation;\n\t\n\t var ret = {\n\t width : img.width,\n\t height: img.height\n\t };\n\t\n\t if (orientation && (\"5678\".indexOf(orientation) > -1)) {\n\t ret.width = img.height;\n\t ret.height = img.width;\n\t }\n\t\n\t var scale = ret.width / ret.height;\n\t\n\t if (width && height) {\n\t if (scale >= width / height) {\n\t if (ret.width > width) {\n\t ret.width = width;\n\t ret.height = Math.ceil(width / scale);\n\t }\n\t } else {\n\t if (ret.height > height) {\n\t ret.height = height;\n\t ret.width = Math.ceil(height * scale);\n\t }\n\t }\n\t }\n\t else if (width) {\n\t if (width < ret.width) {\n\t ret.width = width;\n\t ret.height = Math.ceil(width / scale);\n\t }\n\t }\n\t else if (height) {\n\t if (height < ret.height) {\n\t ret.width = Math.ceil(height * scale);\n\t ret.height = height;\n\t }\n\t }\n\t\n\t // 超过这个值base64无法生成,在IOS上\n\t while (ret.width >= 3264 || ret.height >= 2448) {\n\t ret.width *= 0.8;\n\t ret.height *= 0.8;\n\t }\n\t\n\t return ret;\n\t};\n\t\n\t/**\n\t * 获取当前js文件所在路径,必须得在代码顶部执行此函数\n\t * @returns {string}\n\t */\n\tfunction getCurrentJsDir () {\n\t var src = document.scripts[document.scripts.length - 1].src;\n\t\n\t return src.substr(0, src.lastIndexOf('/'));\n\t}\n\t\n\twindow.lrz = function (file, opts) {\n\t return new Lrz(file, opts);\n\t};\n\t\n\t// 版本号来自package.json,构建时自动填充\n\twindow.lrz.version = '4.2.1';\n\t\n\tmodule.exports = window.lrz;\n\t\n\t/**\n\t *\n\t *    ┏┓   ┏┓\n\t *   ┏┛┻━━━┛┻┓\n\t *   ┃       ┃\n\t *   ┃   ━   ┃\n\t *   ┃ ┳┛ ┗┳ ┃\n\t *   ┃       ┃\n\t *   ┃   ┻   ┃\n\t *   ┃       ┃\n\t *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n\t *     ┃   ┃ 神兽保佑,代码无bug\n\t *     ┃   ┃\n\t *     ┃   ┗━━━┓\n\t *     ┃      ┣┓\n\t *     ┃     ┏┛\n\t *     ┗┓┓┏━┳┓┏┛\n\t *      ┃┫┫ ┃┫┫\n\t *      ┗┻┛ ┗┻┛\n\t *\n\t */\n\t\n\t\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate) {(function (root) {\n\t\n\t // Use polyfill for setImmediate for performance gains\n\t var asap = (typeof setImmediate === 'function' && setImmediate) ||\n\t function (fn) {\n\t setTimeout(fn, 1);\n\t };\n\t\n\t // Polyfill for Function.prototype.bind\n\t function bind (fn, thisArg) {\n\t return function () {\n\t fn.apply(thisArg, arguments);\n\t }\n\t }\n\t\n\t var isArray = Array.isArray || function (value) {\n\t return Object.prototype.toString.call(value) === \"[object Array]\"\n\t };\n\t\n\t function Promise (fn) {\n\t if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n\t if (typeof fn !== 'function') throw new TypeError('not a function');\n\t this._state = null;\n\t this._value = null;\n\t this._deferreds = []\n\t\n\t doResolve(fn, bind(resolve, this), bind(reject, this))\n\t }\n\t\n\t function handle (deferred) {\n\t var me = this;\n\t if (this._state === null) {\n\t this._deferreds.push(deferred);\n\t return\n\t }\n\t asap(function () {\n\t var cb = me._state ? deferred.onFulfilled : deferred.onRejected\n\t if (cb === null) {\n\t (me._state ? deferred.resolve : deferred.reject)(me._value);\n\t return;\n\t }\n\t var ret;\n\t try {\n\t ret = cb(me._value);\n\t }\n\t catch (e) {\n\t deferred.reject(e);\n\t return;\n\t }\n\t deferred.resolve(ret);\n\t })\n\t }\n\t\n\t function resolve (newValue) {\n\t try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n\t if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.');\n\t if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n\t var then = newValue.then;\n\t if (typeof then === 'function') {\n\t doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n\t return;\n\t }\n\t }\n\t this._state = true;\n\t this._value = newValue;\n\t finale.call(this);\n\t } catch (e) {\n\t reject.call(this, e);\n\t }\n\t }\n\t\n\t function reject (newValue) {\n\t this._state = false;\n\t this._value = newValue;\n\t finale.call(this);\n\t }\n\t\n\t function finale () {\n\t for (var i = 0, len = this._deferreds.length; i < len; i++) {\n\t handle.call(this, this._deferreds[i]);\n\t }\n\t this._deferreds = null;\n\t }\n\t\n\t function Handler (onFulfilled, onRejected, resolve, reject) {\n\t this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n\t this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n\t this.resolve = resolve;\n\t this.reject = reject;\n\t }\n\t\n\t /**\n\t * Take a potentially misbehaving resolver function and make sure\n\t * onFulfilled and onRejected are only called once.\n\t *\n\t * Makes no guarantees about asynchrony.\n\t */\n\t function doResolve (fn, onFulfilled, onRejected) {\n\t var done = false;\n\t try {\n\t fn(function (value) {\n\t if (done) return;\n\t done = true;\n\t onFulfilled(value);\n\t }, function (reason) {\n\t if (done) return;\n\t done = true;\n\t onRejected(reason);\n\t })\n\t } catch (ex) {\n\t if (done) return;\n\t done = true;\n\t onRejected(ex);\n\t }\n\t }\n\t\n\t Promise.prototype['catch'] = function (onRejected) {\n\t return this.then(null, onRejected);\n\t };\n\t\n\t Promise.prototype.then = function (onFulfilled, onRejected) {\n\t var me = this;\n\t return new Promise(function (resolve, reject) {\n\t handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n\t })\n\t };\n\t\n\t Promise.all = function () {\n\t var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n\t\n\t return new Promise(function (resolve, reject) {\n\t if (args.length === 0) return resolve([]);\n\t var remaining = args.length;\n\t\n\t function res (i, val) {\n\t try {\n\t if (val && (typeof val === 'object' || typeof val === 'function')) {\n\t var then = val.then;\n\t if (typeof then === 'function') {\n\t then.call(val, function (val) {\n\t res(i, val)\n\t }, reject);\n\t return;\n\t }\n\t }\n\t args[i] = val;\n\t if (--remaining === 0) {\n\t resolve(args);\n\t }\n\t } catch (ex) {\n\t reject(ex);\n\t }\n\t }\n\t\n\t for (var i = 0; i < args.length; i++) {\n\t res(i, args[i]);\n\t }\n\t });\n\t };\n\t\n\t Promise.resolve = function (value) {\n\t if (value && typeof value === 'object' && value.constructor === Promise) {\n\t return value;\n\t }\n\t\n\t return new Promise(function (resolve) {\n\t resolve(value);\n\t });\n\t };\n\t\n\t Promise.reject = function (value) {\n\t return new Promise(function (resolve, reject) {\n\t reject(value);\n\t });\n\t };\n\t\n\t Promise.race = function (values) {\n\t return new Promise(function (resolve, reject) {\n\t for (var i = 0, len = values.length; i < len; i++) {\n\t values[i].then(resolve, reject);\n\t }\n\t });\n\t };\n\t\n\t /**\n\t * Set the immediate function to execute callbacks\n\t * @param fn {function} Function to execute\n\t * @private\n\t */\n\t Promise._setImmediateFn = function _setImmediateFn (fn) {\n\t asap = fn;\n\t };\n\t\n\t\n\t Promise.prototype.always = function (callback) {\n\t var constructor = this.constructor;\n\t\n\t return this.then(function (value) {\n\t return constructor.resolve(callback()).then(function () {\n\t return value;\n\t });\n\t }, function (reason) {\n\t return constructor.resolve(callback()).then(function () {\n\t throw reason;\n\t });\n\t });\n\t };\n\t\n\t if (typeof module !== 'undefined' && module.exports) {\n\t module.exports = Promise;\n\t } else if (!root.Promise) {\n\t root.Promise = Promise;\n\t }\n\t\n\t})(this);\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(3).nextTick;\n\tvar apply = Function.prototype.apply;\n\tvar slice = Array.prototype.slice;\n\tvar immediateIds = {};\n\tvar nextImmediateId = 0;\n\t\n\t// DOM APIs, for completeness\n\t\n\texports.setTimeout = function() {\n\t return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n\t};\n\texports.setInterval = function() {\n\t return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n\t};\n\texports.clearTimeout =\n\texports.clearInterval = function(timeout) { timeout.close(); };\n\t\n\tfunction Timeout(id, clearFn) {\n\t this._id = id;\n\t this._clearFn = clearFn;\n\t}\n\tTimeout.prototype.unref = Timeout.prototype.ref = function() {};\n\tTimeout.prototype.close = function() {\n\t this._clearFn.call(window, this._id);\n\t};\n\t\n\t// Does not start the time, just sets up the members needed.\n\texports.enroll = function(item, msecs) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = msecs;\n\t};\n\t\n\texports.unenroll = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = -1;\n\t};\n\t\n\texports._unrefActive = exports.active = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t\n\t var msecs = item._idleTimeout;\n\t if (msecs >= 0) {\n\t item._idleTimeoutId = setTimeout(function onTimeout() {\n\t if (item._onTimeout)\n\t item._onTimeout();\n\t }, msecs);\n\t }\n\t};\n\t\n\t// That's not how node.js implements it but the exposed api is the same.\n\texports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n\t var id = nextImmediateId++;\n\t var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\t\n\t immediateIds[id] = true;\n\t\n\t nextTick(function onNextTick() {\n\t if (immediateIds[id]) {\n\t // fn.call() is faster so we optimize for the common use-case\n\t // @see http://jsperf.com/call-apply-segu\n\t if (args) {\n\t fn.apply(null, args);\n\t } else {\n\t fn.call(null);\n\t }\n\t // Prevent ids from leaking\n\t exports.clearImmediate(id);\n\t }\n\t });\n\t\n\t return id;\n\t};\n\t\n\texports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n\t delete immediateIds[id];\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).setImmediate, __webpack_require__(2).clearImmediate))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\t\n\tvar process = module.exports = {};\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = setTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t clearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t setTimeout(drainQueue, 0);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* exif */\n\t(function () {\n\t\n\t var debug = false;\n\t\n\t var root = this;\n\t\n\t var EXIF = function (obj) {\n\t if (obj instanceof EXIF) return obj;\n\t if (!(this instanceof EXIF)) return new EXIF(obj);\n\t this.EXIFwrapped = obj;\n\t };\n\t\n\t if (true) {\n\t if (typeof module !== 'undefined' && module.exports) {\n\t exports = module.exports = EXIF;\n\t }\n\t exports.EXIF = EXIF;\n\t } else {\n\t root.EXIF = EXIF;\n\t }\n\t\n\t var ExifTags = EXIF.Tags = {\n\t\n\t // version tags\n\t 0x9000: \"ExifVersion\", // EXIF version\n\t 0xA000: \"FlashpixVersion\", // Flashpix format version\n\t\n\t // colorspace tags\n\t 0xA001: \"ColorSpace\", // Color space information tag\n\t\n\t // image configuration\n\t 0xA002: \"PixelXDimension\", // Valid width of meaningful image\n\t 0xA003: \"PixelYDimension\", // Valid height of meaningful image\n\t 0x9101: \"ComponentsConfiguration\", // Information about channels\n\t 0x9102: \"CompressedBitsPerPixel\", // Compressed bits per pixel\n\t\n\t // user information\n\t 0x927C: \"MakerNote\", // Any desired information written by the manufacturer\n\t 0x9286: \"UserComment\", // Comments by user\n\t\n\t // related file\n\t 0xA004: \"RelatedSoundFile\", // Name of related sound file\n\t\n\t // date and time\n\t 0x9003: \"DateTimeOriginal\", // Date and time when the original image was generated\n\t 0x9004: \"DateTimeDigitized\", // Date and time when the image was stored digitally\n\t 0x9290: \"SubsecTime\", // Fractions of seconds for DateTime\n\t 0x9291: \"SubsecTimeOriginal\", // Fractions of seconds for DateTimeOriginal\n\t 0x9292: \"SubsecTimeDigitized\", // Fractions of seconds for DateTimeDigitized\n\t\n\t // picture-taking conditions\n\t 0x829A: \"ExposureTime\", // Exposure time (in seconds)\n\t 0x829D: \"FNumber\", // F number\n\t 0x8822: \"ExposureProgram\", // Exposure program\n\t 0x8824: \"SpectralSensitivity\", // Spectral sensitivity\n\t 0x8827: \"ISOSpeedRatings\", // ISO speed rating\n\t 0x8828: \"OECF\", // Optoelectric conversion factor\n\t 0x9201: \"ShutterSpeedValue\", // Shutter speed\n\t 0x9202: \"ApertureValue\", // Lens aperture\n\t 0x9203: \"BrightnessValue\", // Value of brightness\n\t 0x9204: \"ExposureBias\", // Exposure bias\n\t 0x9205: \"MaxApertureValue\", // Smallest F number of lens\n\t 0x9206: \"SubjectDistance\", // Distance to subject in meters\n\t 0x9207: \"MeteringMode\", // Metering mode\n\t 0x9208: \"LightSource\", // Kind of light source\n\t 0x9209: \"Flash\", // Flash status\n\t 0x9214: \"SubjectArea\", // Location and area of main subject\n\t 0x920A: \"FocalLength\", // Focal length of the lens in mm\n\t 0xA20B: \"FlashEnergy\", // Strobe energy in BCPS\n\t 0xA20C: \"SpatialFrequencyResponse\", //\n\t 0xA20E: \"FocalPlaneXResolution\", // Number of pixels in width direction per FocalPlaneResolutionUnit\n\t 0xA20F: \"FocalPlaneYResolution\", // Number of pixels in height direction per FocalPlaneResolutionUnit\n\t 0xA210: \"FocalPlaneResolutionUnit\", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution\n\t 0xA214: \"SubjectLocation\", // Location of subject in image\n\t 0xA215: \"ExposureIndex\", // Exposure index selected on camera\n\t 0xA217: \"SensingMethod\", // Image sensor type\n\t 0xA300: \"FileSource\", // Image source (3 == DSC)\n\t 0xA301: \"SceneType\", // Scene type (1 == directly photographed)\n\t 0xA302: \"CFAPattern\", // Color filter array geometric pattern\n\t 0xA401: \"CustomRendered\", // Special processing\n\t 0xA402: \"ExposureMode\", // Exposure mode\n\t 0xA403: \"WhiteBalance\", // 1 = auto white balance, 2 = manual\n\t 0xA404: \"DigitalZoomRation\", // Digital zoom ratio\n\t 0xA405: \"FocalLengthIn35mmFilm\", // Equivalent foacl length assuming 35mm film camera (in mm)\n\t 0xA406: \"SceneCaptureType\", // Type of scene\n\t 0xA407: \"GainControl\", // Degree of overall image gain adjustment\n\t 0xA408: \"Contrast\", // Direction of contrast processing applied by camera\n\t 0xA409: \"Saturation\", // Direction of saturation processing applied by camera\n\t 0xA40A: \"Sharpness\", // Direction of sharpness processing applied by camera\n\t 0xA40B: \"DeviceSettingDescription\", //\n\t 0xA40C: \"SubjectDistanceRange\", // Distance to subject\n\t\n\t // other tags\n\t 0xA005: \"InteroperabilityIFDPointer\",\n\t 0xA420: \"ImageUniqueID\" // Identifier assigned uniquely to each image\n\t };\n\t\n\t var TiffTags = EXIF.TiffTags = {\n\t 0x0100: \"ImageWidth\",\n\t 0x0101: \"ImageHeight\",\n\t 0x8769: \"ExifIFDPointer\",\n\t 0x8825: \"GPSInfoIFDPointer\",\n\t 0xA005: \"InteroperabilityIFDPointer\",\n\t 0x0102: \"BitsPerSample\",\n\t 0x0103: \"Compression\",\n\t 0x0106: \"PhotometricInterpretation\",\n\t 0x0112: \"Orientation\",\n\t 0x0115: \"SamplesPerPixel\",\n\t 0x011C: \"PlanarConfiguration\",\n\t 0x0212: \"YCbCrSubSampling\",\n\t 0x0213: \"YCbCrPositioning\",\n\t 0x011A: \"XResolution\",\n\t 0x011B: \"YResolution\",\n\t 0x0128: \"ResolutionUnit\",\n\t 0x0111: \"StripOffsets\",\n\t 0x0116: \"RowsPerStrip\",\n\t 0x0117: \"StripByteCounts\",\n\t 0x0201: \"JPEGInterchangeFormat\",\n\t 0x0202: \"JPEGInterchangeFormatLength\",\n\t 0x012D: \"TransferFunction\",\n\t 0x013E: \"WhitePoint\",\n\t 0x013F: \"PrimaryChromaticities\",\n\t 0x0211: \"YCbCrCoefficients\",\n\t 0x0214: \"ReferenceBlackWhite\",\n\t 0x0132: \"DateTime\",\n\t 0x010E: \"ImageDescription\",\n\t 0x010F: \"Make\",\n\t 0x0110: \"Model\",\n\t 0x0131: \"Software\",\n\t 0x013B: \"Artist\",\n\t 0x8298: \"Copyright\"\n\t };\n\t\n\t var GPSTags = EXIF.GPSTags = {\n\t 0x0000: \"GPSVersionID\",\n\t 0x0001: \"GPSLatitudeRef\",\n\t 0x0002: \"GPSLatitude\",\n\t 0x0003: \"GPSLongitudeRef\",\n\t 0x0004: \"GPSLongitude\",\n\t 0x0005: \"GPSAltitudeRef\",\n\t 0x0006: \"GPSAltitude\",\n\t 0x0007: \"GPSTimeStamp\",\n\t 0x0008: \"GPSSatellites\",\n\t 0x0009: \"GPSStatus\",\n\t 0x000A: \"GPSMeasureMode\",\n\t 0x000B: \"GPSDOP\",\n\t 0x000C: \"GPSSpeedRef\",\n\t 0x000D: \"GPSSpeed\",\n\t 0x000E: \"GPSTrackRef\",\n\t 0x000F: \"GPSTrack\",\n\t 0x0010: \"GPSImgDirectionRef\",\n\t 0x0011: \"GPSImgDirection\",\n\t 0x0012: \"GPSMapDatum\",\n\t 0x0013: \"GPSDestLatitudeRef\",\n\t 0x0014: \"GPSDestLatitude\",\n\t 0x0015: \"GPSDestLongitudeRef\",\n\t 0x0016: \"GPSDestLongitude\",\n\t 0x0017: \"GPSDestBearingRef\",\n\t 0x0018: \"GPSDestBearing\",\n\t 0x0019: \"GPSDestDistanceRef\",\n\t 0x001A: \"GPSDestDistance\",\n\t 0x001B: \"GPSProcessingMethod\",\n\t 0x001C: \"GPSAreaInformation\",\n\t 0x001D: \"GPSDateStamp\",\n\t 0x001E: \"GPSDifferential\"\n\t };\n\t\n\t var StringValues = EXIF.StringValues = {\n\t ExposureProgram : {\n\t 0: \"Not defined\",\n\t 1: \"Manual\",\n\t 2: \"Normal program\",\n\t 3: \"Aperture priority\",\n\t 4: \"Shutter priority\",\n\t 5: \"Creative program\",\n\t 6: \"Action program\",\n\t 7: \"Portrait mode\",\n\t 8: \"Landscape mode\"\n\t },\n\t MeteringMode : {\n\t 0 : \"Unknown\",\n\t 1 : \"Average\",\n\t 2 : \"CenterWeightedAverage\",\n\t 3 : \"Spot\",\n\t 4 : \"MultiSpot\",\n\t 5 : \"Pattern\",\n\t 6 : \"Partial\",\n\t 255: \"Other\"\n\t },\n\t LightSource : {\n\t 0 : \"Unknown\",\n\t 1 : \"Daylight\",\n\t 2 : \"Fluorescent\",\n\t 3 : \"Tungsten (incandescent light)\",\n\t 4 : \"Flash\",\n\t 9 : \"Fine weather\",\n\t 10 : \"Cloudy weather\",\n\t 11 : \"Shade\",\n\t 12 : \"Daylight fluorescent (D 5700 - 7100K)\",\n\t 13 : \"Day white fluorescent (N 4600 - 5400K)\",\n\t 14 : \"Cool white fluorescent (W 3900 - 4500K)\",\n\t 15 : \"White fluorescent (WW 3200 - 3700K)\",\n\t 17 : \"Standard light A\",\n\t 18 : \"Standard light B\",\n\t 19 : \"Standard light C\",\n\t 20 : \"D55\",\n\t 21 : \"D65\",\n\t 22 : \"D75\",\n\t 23 : \"D50\",\n\t 24 : \"ISO studio tungsten\",\n\t 255: \"Other\"\n\t },\n\t Flash : {\n\t 0x0000: \"Flash did not fire\",\n\t 0x0001: \"Flash fired\",\n\t 0x0005: \"Strobe return light not detected\",\n\t 0x0007: \"Strobe return light detected\",\n\t 0x0009: \"Flash fired, compulsory flash mode\",\n\t 0x000D: \"Flash fired, compulsory flash mode, return light not detected\",\n\t 0x000F: \"Flash fired, compulsory flash mode, return light detected\",\n\t 0x0010: \"Flash did not fire, compulsory flash mode\",\n\t 0x0018: \"Flash did not fire, auto mode\",\n\t 0x0019: \"Flash fired, auto mode\",\n\t 0x001D: \"Flash fired, auto mode, return light not detected\",\n\t 0x001F: \"Flash fired, auto mode, return light detected\",\n\t 0x0020: \"No flash function\",\n\t 0x0041: \"Flash fired, red-eye reduction mode\",\n\t 0x0045: \"Flash fired, red-eye reduction mode, return light not detected\",\n\t 0x0047: \"Flash fired, red-eye reduction mode, return light detected\",\n\t 0x0049: \"Flash fired, compulsory flash mode, red-eye reduction mode\",\n\t 0x004D: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",\n\t 0x004F: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",\n\t 0x0059: \"Flash fired, auto mode, red-eye reduction mode\",\n\t 0x005D: \"Flash fired, auto mode, return light not detected, red-eye reduction mode\",\n\t 0x005F: \"Flash fired, auto mode, return light detected, red-eye reduction mode\"\n\t },\n\t SensingMethod : {\n\t 1: \"Not defined\",\n\t 2: \"One-chip color area sensor\",\n\t 3: \"Two-chip color area sensor\",\n\t 4: \"Three-chip color area sensor\",\n\t 5: \"Color sequential area sensor\",\n\t 7: \"Trilinear sensor\",\n\t 8: \"Color sequential linear sensor\"\n\t },\n\t SceneCaptureType : {\n\t 0: \"Standard\",\n\t 1: \"Landscape\",\n\t 2: \"Portrait\",\n\t 3: \"Night scene\"\n\t },\n\t SceneType : {\n\t 1: \"Directly photographed\"\n\t },\n\t CustomRendered : {\n\t 0: \"Normal process\",\n\t 1: \"Custom process\"\n\t },\n\t WhiteBalance : {\n\t 0: \"Auto white balance\",\n\t 1: \"Manual white balance\"\n\t },\n\t GainControl : {\n\t 0: \"None\",\n\t 1: \"Low gain up\",\n\t 2: \"High gain up\",\n\t 3: \"Low gain down\",\n\t 4: \"High gain down\"\n\t },\n\t Contrast : {\n\t 0: \"Normal\",\n\t 1: \"Soft\",\n\t 2: \"Hard\"\n\t },\n\t Saturation : {\n\t 0: \"Normal\",\n\t 1: \"Low saturation\",\n\t 2: \"High saturation\"\n\t },\n\t Sharpness : {\n\t 0: \"Normal\",\n\t 1: \"Soft\",\n\t 2: \"Hard\"\n\t },\n\t SubjectDistanceRange: {\n\t 0: \"Unknown\",\n\t 1: \"Macro\",\n\t 2: \"Close view\",\n\t 3: \"Distant view\"\n\t },\n\t FileSource : {\n\t 3: \"DSC\"\n\t },\n\t\n\t Components: {\n\t 0: \"\",\n\t 1: \"Y\",\n\t 2: \"Cb\",\n\t 3: \"Cr\",\n\t 4: \"R\",\n\t 5: \"G\",\n\t 6: \"B\"\n\t }\n\t };\n\t\n\t function addEvent (element, event, handler) {\n\t if (element.addEventListener) {\n\t element.addEventListener(event, handler, false);\n\t } else if (element.attachEvent) {\n\t element.attachEvent(\"on\" + event, handler);\n\t }\n\t }\n\t\n\t function imageHasData (img) {\n\t return !!(img.exifdata);\n\t }\n\t\n\t\n\t function base64ToArrayBuffer (base64, contentType) {\n\t contentType = contentType || base64.match(/^data\\:([^\\;]+)\\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'\n\t base64 = base64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n\t var binary = atob(base64);\n\t var len = binary.length;\n\t var buffer = new ArrayBuffer(len);\n\t var view = new Uint8Array(buffer);\n\t for (var i = 0; i < len; i++) {\n\t view[i] = binary.charCodeAt(i);\n\t }\n\t return buffer;\n\t }\n\t\n\t function objectURLToBlob (url, callback) {\n\t var http = new XMLHttpRequest();\n\t http.open(\"GET\", url, true);\n\t http.responseType = \"blob\";\n\t http.onload = function (e) {\n\t if (this.status == 200 || this.status === 0) {\n\t callback(this.response);\n\t }\n\t };\n\t http.send();\n\t }\n\t\n\t function getImageData (img, callback) {\n\t function handleBinaryFile (binFile) {\n\t var data = findEXIFinJPEG(binFile);\n\t var iptcdata = findIPTCinJPEG(binFile);\n\t img.exifdata = data || {};\n\t img.iptcdata = iptcdata || {};\n\t if (callback) {\n\t callback.call(img);\n\t }\n\t }\n\t\n\t if (img.src) {\n\t if (/^data\\:/i.test(img.src)) { // Data URI\n\t var arrayBuffer = base64ToArrayBuffer(img.src);\n\t handleBinaryFile(arrayBuffer);\n\t\n\t } else if (/^blob\\:/i.test(img.src)) { // Object URL\n\t var fileReader = new FileReader();\n\t fileReader.onload = function (e) {\n\t handleBinaryFile(e.target.result);\n\t };\n\t objectURLToBlob(img.src, function (blob) {\n\t fileReader.readAsArrayBuffer(blob);\n\t });\n\t } else {\n\t var http = new XMLHttpRequest();\n\t http.onload = function () {\n\t if (this.status == 200 || this.status === 0) {\n\t handleBinaryFile(http.response);\n\t } else {\n\t callback(new Error(\"Could not load image\"));\n\t }\n\t http = null;\n\t };\n\t http.open(\"GET\", img.src, true);\n\t http.responseType = \"arraybuffer\";\n\t http.send(null);\n\t }\n\t } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) {\n\t var fileReader = new FileReader();\n\t fileReader.onload = function (e) {\n\t if (debug) console.log(\"Got file of length \" + e.target.result.byteLength);\n\t handleBinaryFile(e.target.result);\n\t };\n\t\n\t fileReader.readAsArrayBuffer(img);\n\t }\n\t }\n\t\n\t function findEXIFinJPEG (file) {\n\t var dataView = new DataView(file);\n\t\n\t if (debug) console.log(\"Got file of length \" + file.byteLength);\n\t if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {\n\t if (debug) console.log(\"Not a valid JPEG\");\n\t return false; // not a valid jpeg\n\t }\n\t\n\t var offset = 2,\n\t length = file.byteLength,\n\t marker;\n\t\n\t while (offset < length) {\n\t if (dataView.getUint8(offset) != 0xFF) {\n\t if (debug) console.log(\"Not a valid marker at offset \" + offset + \", found: \" + dataView.getUint8(offset));\n\t return false; // not a valid marker, something is wrong\n\t }\n\t\n\t marker = dataView.getUint8(offset + 1);\n\t if (debug) console.log(marker);\n\t\n\t // we could implement handling for other markers here,\n\t // but we're only looking for 0xFFE1 for EXIF data\n\t\n\t if (marker == 225) {\n\t if (debug) console.log(\"Found 0xFFE1 marker\");\n\t\n\t return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2);\n\t\n\t // offset += 2 + file.getShortAt(offset+2, true);\n\t\n\t } else {\n\t offset += 2 + dataView.getUint16(offset + 2);\n\t }\n\t\n\t }\n\t\n\t }\n\t\n\t function findIPTCinJPEG (file) {\n\t var dataView = new DataView(file);\n\t\n\t if (debug) console.log(\"Got file of length \" + file.byteLength);\n\t if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {\n\t if (debug) console.log(\"Not a valid JPEG\");\n\t return false; // not a valid jpeg\n\t }\n\t\n\t var offset = 2,\n\t length = file.byteLength;\n\t\n\t\n\t var isFieldSegmentStart = function (dataView, offset) {\n\t return (\n\t dataView.getUint8(offset) === 0x38 &&\n\t dataView.getUint8(offset + 1) === 0x42 &&\n\t dataView.getUint8(offset + 2) === 0x49 &&\n\t dataView.getUint8(offset + 3) === 0x4D &&\n\t dataView.getUint8(offset + 4) === 0x04 &&\n\t dataView.getUint8(offset + 5) === 0x04\n\t );\n\t };\n\t\n\t while (offset < length) {\n\t\n\t if (isFieldSegmentStart(dataView, offset)) {\n\t\n\t // Get the length of the name header (which is padded to an even number of bytes)\n\t var nameHeaderLength = dataView.getUint8(offset + 7);\n\t if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1;\n\t // Check for pre photoshop 6 format\n\t if (nameHeaderLength === 0) {\n\t // Always 4\n\t nameHeaderLength = 4;\n\t }\n\t\n\t var startOffset = offset + 8 + nameHeaderLength;\n\t var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength);\n\t\n\t return readIPTCData(file, startOffset, sectionLength);\n\t\n\t break;\n\t\n\t }\n\t\n\t\n\t // Not the marker, continue searching\n\t offset++;\n\t\n\t }\n\t\n\t }\n\t\n\t var IptcFieldMap = {\n\t 0x78: 'caption',\n\t 0x6E: 'credit',\n\t 0x19: 'keywords',\n\t 0x37: 'dateCreated',\n\t 0x50: 'byline',\n\t 0x55: 'bylineTitle',\n\t 0x7A: 'captionWriter',\n\t 0x69: 'headline',\n\t 0x74: 'copyright',\n\t 0x0F: 'category'\n\t };\n\t\n\t function readIPTCData (file, startOffset, sectionLength) {\n\t var dataView = new DataView(file);\n\t var data = {};\n\t var fieldValue, fieldName, dataSize, segmentType, segmentSize;\n\t var segmentStartPos = startOffset;\n\t while (segmentStartPos < startOffset + sectionLength) {\n\t if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) {\n\t segmentType = dataView.getUint8(segmentStartPos + 2);\n\t if (segmentType in IptcFieldMap) {\n\t dataSize = dataView.getInt16(segmentStartPos + 3);\n\t segmentSize = dataSize + 5;\n\t fieldName = IptcFieldMap[segmentType];\n\t fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize);\n\t // Check if we already stored a value with this name\n\t if (data.hasOwnProperty(fieldName)) {\n\t // Value already stored with this name, create multivalue field\n\t if (data[fieldName] instanceof Array) {\n\t data[fieldName].push(fieldValue);\n\t }\n\t else {\n\t data[fieldName] = [data[fieldName], fieldValue];\n\t }\n\t }\n\t else {\n\t data[fieldName] = fieldValue;\n\t }\n\t }\n\t\n\t }\n\t segmentStartPos++;\n\t }\n\t return data;\n\t }\n\t\n\t\n\t function readTags (file, tiffStart, dirStart, strings, bigEnd) {\n\t var entries = file.getUint16(dirStart, !bigEnd),\n\t tags = {},\n\t entryOffset, tag,\n\t i;\n\t\n\t for (i = 0; i < entries; i++) {\n\t entryOffset = dirStart + i * 12 + 2;\n\t tag = strings[file.getUint16(entryOffset, !bigEnd)];\n\t if (!tag && debug) console.log(\"Unknown tag: \" + file.getUint16(entryOffset, !bigEnd));\n\t tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);\n\t }\n\t return tags;\n\t }\n\t\n\t\n\t function readTagValue (file, entryOffset, tiffStart, dirStart, bigEnd) {\n\t var type = file.getUint16(entryOffset + 2, !bigEnd),\n\t numValues = file.getUint32(entryOffset + 4, !bigEnd),\n\t valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart,\n\t offset,\n\t vals, val, n,\n\t numerator, denominator;\n\t\n\t switch (type) {\n\t case 1: // byte, 8-bit unsigned int\n\t case 7: // undefined, 8-bit byte, value depending on field\n\t if (numValues == 1) {\n\t return file.getUint8(entryOffset + 8, !bigEnd);\n\t } else {\n\t offset = numValues > 4 ? valueOffset : (entryOffset + 8);\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint8(offset + n);\n\t }\n\t return vals;\n\t }\n\t\n\t case 2: // ascii, 8-bit byte\n\t offset = numValues > 4 ? valueOffset : (entryOffset + 8);\n\t return getStringFromDB(file, offset, numValues - 1);\n\t\n\t case 3: // short, 16 bit int\n\t if (numValues == 1) {\n\t return file.getUint16(entryOffset + 8, !bigEnd);\n\t } else {\n\t offset = numValues > 2 ? valueOffset : (entryOffset + 8);\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint16(offset + 2 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 4: // long, 32 bit int\n\t if (numValues == 1) {\n\t return file.getUint32(entryOffset + 8, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 5: // rational = two long values, first is numerator, second is denominator\n\t if (numValues == 1) {\n\t numerator = file.getUint32(valueOffset, !bigEnd);\n\t denominator = file.getUint32(valueOffset + 4, !bigEnd);\n\t val = new Number(numerator / denominator);\n\t val.numerator = numerator;\n\t val.denominator = denominator;\n\t return val;\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t numerator = file.getUint32(valueOffset + 8 * n, !bigEnd);\n\t denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd);\n\t vals[n] = new Number(numerator / denominator);\n\t vals[n].numerator = numerator;\n\t vals[n].denominator = denominator;\n\t }\n\t return vals;\n\t }\n\t\n\t case 9: // slong, 32 bit signed int\n\t if (numValues == 1) {\n\t return file.getInt32(entryOffset + 8, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t\n\t case 10: // signed rational, two slongs, first is numerator, second is denominator\n\t if (numValues == 1) {\n\t return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd);\n\t } else {\n\t vals = [];\n\t for (n = 0; n < numValues; n++) {\n\t vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd);\n\t }\n\t return vals;\n\t }\n\t }\n\t }\n\t\n\t function getStringFromDB (buffer, start, length) {\n\t var outstr = \"\", n;\n\t for (n = start; n < start + length; n++) {\n\t outstr += String.fromCharCode(buffer.getUint8(n));\n\t }\n\t return outstr;\n\t }\n\t\n\t function readEXIFData (file, start) {\n\t if (getStringFromDB(file, start, 4) != \"Exif\") {\n\t if (debug) console.log(\"Not valid EXIF data! \" + getStringFromDB(file, start, 4));\n\t return false;\n\t }\n\t\n\t var bigEnd,\n\t tags, tag,\n\t exifData, gpsData,\n\t tiffOffset = start + 6;\n\t\n\t // test for TIFF validity and endianness\n\t if (file.getUint16(tiffOffset) == 0x4949) {\n\t bigEnd = false;\n\t } else if (file.getUint16(tiffOffset) == 0x4D4D) {\n\t bigEnd = true;\n\t } else {\n\t if (debug) console.log(\"Not valid TIFF data! (no 0x4949 or 0x4D4D)\");\n\t return false;\n\t }\n\t\n\t if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002A) {\n\t if (debug) console.log(\"Not valid TIFF data! (no 0x002A)\");\n\t return false;\n\t }\n\t\n\t var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);\n\t\n\t if (firstIFDOffset < 0x00000008) {\n\t if (debug) console.log(\"Not valid TIFF data! (First offset less than 8)\", file.getUint32(tiffOffset + 4, !bigEnd));\n\t return false;\n\t }\n\t\n\t tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd);\n\t\n\t if (tags.ExifIFDPointer) {\n\t exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);\n\t for (tag in exifData) {\n\t switch (tag) {\n\t case \"LightSource\" :\n\t case \"Flash\" :\n\t case \"MeteringMode\" :\n\t case \"ExposureProgram\" :\n\t case \"SensingMethod\" :\n\t case \"SceneCaptureType\" :\n\t case \"SceneType\" :\n\t case \"CustomRendered\" :\n\t case \"WhiteBalance\" :\n\t case \"GainControl\" :\n\t case \"Contrast\" :\n\t case \"Saturation\" :\n\t case \"Sharpness\" :\n\t case \"SubjectDistanceRange\" :\n\t case \"FileSource\" :\n\t exifData[tag] = StringValues[tag][exifData[tag]];\n\t break;\n\t\n\t case \"ExifVersion\" :\n\t case \"FlashpixVersion\" :\n\t exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);\n\t break;\n\t\n\t case \"ComponentsConfiguration\" :\n\t exifData[tag] =\n\t StringValues.Components[exifData[tag][0]] +\n\t StringValues.Components[exifData[tag][1]] +\n\t StringValues.Components[exifData[tag][2]] +\n\t StringValues.Components[exifData[tag][3]];\n\t break;\n\t }\n\t tags[tag] = exifData[tag];\n\t }\n\t }\n\t\n\t if (tags.GPSInfoIFDPointer) {\n\t gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);\n\t for (tag in gpsData) {\n\t switch (tag) {\n\t case \"GPSVersionID\" :\n\t gpsData[tag] = gpsData[tag][0] +\n\t \".\" + gpsData[tag][1] +\n\t \".\" + gpsData[tag][2] +\n\t \".\" + gpsData[tag][3];\n\t break;\n\t }\n\t tags[tag] = gpsData[tag];\n\t }\n\t }\n\t\n\t return tags;\n\t }\n\t\n\t EXIF.getData = function (img, callback) {\n\t if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) return false;\n\t\n\t if (!imageHasData(img)) {\n\t getImageData(img, callback);\n\t } else {\n\t if (callback) {\n\t callback.call(img);\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t EXIF.getTag = function (img, tag) {\n\t if (!imageHasData(img)) return;\n\t return img.exifdata[tag];\n\t }\n\t\n\t EXIF.getAllTags = function (img) {\n\t if (!imageHasData(img)) return {};\n\t var a,\n\t data = img.exifdata,\n\t tags = {};\n\t for (a in data) {\n\t if (data.hasOwnProperty(a)) {\n\t tags[a] = data[a];\n\t }\n\t }\n\t return tags;\n\t }\n\t\n\t EXIF.pretty = function (img) {\n\t if (!imageHasData(img)) return \"\";\n\t var a,\n\t data = img.exifdata,\n\t strPretty = \"\";\n\t for (a in data) {\n\t if (data.hasOwnProperty(a)) {\n\t if (typeof data[a] == \"object\") {\n\t if (data[a] instanceof Number) {\n\t strPretty += a + \" : \" + data[a] + \" [\" + data[a].numerator + \"/\" + data[a].denominator + \"]\\r\\n\";\n\t } else {\n\t strPretty += a + \" : [\" + data[a].length + \" values]\\r\\n\";\n\t }\n\t } else {\n\t strPretty += a + \" : \" + data[a] + \"\\r\\n\";\n\t }\n\t }\n\t }\n\t return strPretty;\n\t }\n\t\n\t EXIF.readFromBinaryFile = function (file) {\n\t return findEXIFinJPEG(file);\n\t }\n\t\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return EXIF;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t }\n\t}.call(this));\n\n/***/ }\n/******/ ]);\n\n\n/** WEBPACK FOOTER **\n ** lrz.bundle.js\n **/"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t0:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"\" + ({}[chunkId]||chunkId) + \".chunk.js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap d11662f66af4feed7794\n **/","// 保证按需加载的文件路径正确\n__webpack_public_path__ = getCurrentJsDir() + '/';\nwindow.URL = window.URL || window.webkitURL;\n\nvar Promise = require('Promise'),\n exif = require('exif');\n\nvar UA = (function (userAgent) {\n var ISOldIOS = /OS (\\d)_.* like Mac OS X/g.exec(userAgent),\n isOldAndroid = /Android (\\d.*?);/g.exec(userAgent);\n\n // 判断设备是否是IOS7以下\n // 判断设备是否是android4.5以下\n // 判断是否iOS\n // 判断是否android\n // 判断是否QQ浏览器\n return {\n oldIOS : ISOldIOS ? +ISOldIOS.pop() < 8 : false,\n oldAndroid: isOldAndroid ? +isOldAndroid.pop().substr(0, 3) < 4.5 : false,\n iOS : /\\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent),\n android : /Android/g.test(userAgent),\n mQQBrowser: /MQQBrowser/g.test(userAgent)\n }\n})(navigator.userAgent);\n\nfunction Lrz (file, opts) {\n var that = this;\n\n if (!file) throw new Error('没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG4/issues/7');\n\n opts = opts || {};\n\n that.defaults = {\n width : null,\n height : null,\n quality: 0.7\n };\n\n that.file = file;\n\n for (var p in opts) {\n if (!opts.hasOwnProperty(p)) continue;\n that.defaults[p] = opts[p];\n }\n\n return this.init();\n}\n\nLrz.prototype.init = function () {\n var that = this,\n file = that.file,\n img = new Image(),\n canvas = document.createElement('canvas'),\n blob = (typeof file === 'string') ? file : URL.createObjectURL(file);\n\n that.img = img;\n that.blob = blob;\n that.canvas = canvas;\n\n if (!document.createElement('canvas').getContext) {\n throw new Error('浏览器不支持canvas');\n }\n return new Promise(function (resolve, reject) {\n img.onerror = function () {\n throw new Error('加载图片文件失败');\n };\n\n img.onload = function () {\n that._getBase64()\n .then(function (base64) {\n if (base64.length < 10) reject('生成base64失败');\n\n return base64;\n })\n .then(function (base64) {\n resolve({\n origin : that.file,\n base64 : base64,\n base64Len: base64.length\n });\n\n // 释放内存\n for (var p in that) {\n if (!that.hasOwnProperty(p)) continue;\n\n that[p] = null;\n }\n URL.revokeObjectURL(that.blob);\n });\n };\n\n img.crossOrigin = \"*\";\n\n img.src = blob;\n });\n};\n\nLrz.prototype._getBase64 = function () {\n var that = this,\n img = that.img,\n file = that.file,\n canvas = that.canvas;\n\n var setCanvas = function () {\n };\n\n return new Promise(function (resolve) {\n // 传入blob在android4.3以下有bug\n exif.getData(typeof file === 'object' ? file : img, function () {\n that.orientation = exif.getTag(this, \"Orientation\");\n\n that.resize = that._getResize();\n that.ctx = canvas.getContext('2d');\n\n canvas.width = that.resize.width;\n canvas.height = that.resize.height;\n\n // 设置为白色背景,jpg是不支持透明的,所以会被默认为canvas默认的黑色背景。\n that.ctx.fillStyle = '#fff';\n that.ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // 根据设备对应处理方式\n if (UA.oldIOS) {\n that._createBase64ForOldIOS().then(resolve);\n }\n else {\n that._createBase64().then(resolve);\n }\n });\n });\n};\n\n\nLrz.prototype._createBase64ForOldIOS = function () {\n var that = this,\n img = that.img,\n canvas = that.canvas,\n defaults = that.defaults,\n orientation = that.orientation;\n\n return new Promise(function (resolve) {\n require(['megapix-image'], function (MegaPixImage) {\n var mpImg = new MegaPixImage(img);\n\n if (\"5678\".indexOf(orientation) > -1) {\n mpImg.render(canvas, {\n width : canvas.height,\n height : canvas.width,\n orientation: orientation\n });\n } else {\n mpImg.render(canvas, {\n width : canvas.width,\n height : canvas.height,\n orientation: orientation\n });\n }\n\n resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n });\n });\n};\n\nLrz.prototype._createBase64 = function () {\n var that = this,\n resize = that.resize,\n img = that.img,\n canvas = that.canvas,\n ctx = that.ctx,\n defaults = that.defaults,\n orientation = that.orientation;\n\n // 调整为正确方向\n switch (orientation) {\n case 3:\n ctx.rotate(180 * Math.PI / 180);\n ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n break;\n case 6:\n ctx.rotate(90 * Math.PI / 180);\n ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n break;\n case 8:\n ctx.rotate(270 * Math.PI / 180);\n ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n break;\n\n case 2:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.drawImage(img, 0, 0, resize.width, resize.height);\n break;\n case 4:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(180 * Math.PI / 180);\n ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);\n break;\n case 5:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(90 * Math.PI / 180);\n ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);\n break;\n case 7:\n ctx.translate(resize.width, 0);\n ctx.scale(-1, 1);\n ctx.rotate(270 * Math.PI / 180);\n ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);\n break;\n\n default:\n ctx.drawImage(img, 0, 0, resize.width, resize.height);\n }\n\n return new Promise(function (resolve) {\n if (UA.oldAndroid || UA.mQQBrowser || !navigator.userAgent) {\n require(['jpeg_encoder_basic'], function (JPEGEncoder) {\n var encoder = new JPEGEncoder(),\n img = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n resolve(encoder.encode(img, defaults.quality * 100));\n })\n }\n else {\n resolve(canvas.toDataURL('image/jpeg', defaults.quality));\n }\n });\n};\n\nLrz.prototype._getResize = function () {\n var that = this,\n img = that.img,\n defaults = that.defaults,\n width = defaults.width,\n height = defaults.height,\n orientation = that.orientation;\n\n var ret = {\n width : img.width,\n height: img.height\n };\n\n if (orientation && (\"5678\".indexOf(orientation) > -1)) {\n ret.width = img.height;\n ret.height = img.width;\n }\n\n var scale = ret.width / ret.height;\n\n if (width && height) {\n if (scale >= width / height) {\n if (ret.width > width) {\n ret.width = width;\n ret.height = Math.ceil(width / scale);\n }\n } else {\n if (ret.height > height) {\n ret.height = height;\n ret.width = Math.ceil(height * scale);\n }\n }\n }\n else if (width) {\n if (width < ret.width) {\n ret.width = width;\n ret.height = Math.ceil(width / scale);\n }\n }\n else if (height) {\n if (height < ret.height) {\n ret.width = Math.ceil(height * scale);\n ret.height = height;\n }\n }\n\n // 超过这个值base64无法生成,在IOS上\n while (ret.width >= 3264 || ret.height >= 2448) {\n ret.width *= 0.8;\n ret.height *= 0.8;\n }\n\n return ret;\n};\n\n/**\n * 获取当前js文件所在路径,必须得在代码顶部执行此函数\n * @returns {string}\n */\nfunction getCurrentJsDir () {\n var src = document.scripts[document.scripts.length - 1].src;\n\n return src.substr(0, src.lastIndexOf('/'));\n}\n\nwindow.lrz = function (file, opts) {\n return new Lrz(file, opts);\n};\n\n// 版本号来自package.json,构建时自动填充\nwindow.lrz.version = '4.2.1';\n\nmodule.exports = window.lrz;\n\n/**\n *\n *    ┏┓   ┏┓\n *   ┏┛┻━━━┛┻┓\n *   ┃       ┃\n *   ┃   ━   ┃\n *   ┃ ┳┛ ┗┳ ┃\n *   ┃       ┃\n *   ┃   ┻   ┃\n *   ┃       ┃\n *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting\n *     ┃   ┃ 神兽保佑,代码无bug\n *     ┃   ┃\n *     ┃   ┗━━━┓\n *     ┃      ┣┓\n *     ┃     ┏┛\n *     ┗┓┓┏━┳┓┏┛\n *      ┃┫┫ ┃┫┫\n *      ┗┻┛ ┗┻┛\n *\n */\n\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/lrz.js\n ** module id = 0\n ** module chunks = 0\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/Promise.js\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/timers-browserify/main.js\n ** module id = 2\n ** module chunks = 0 3\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 3\n ** module chunks = 0 3\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** src/lib/exif.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git "a/dist/\351\202\243\344\271\210\345\244\232\346\226\207\344\273\266\357\274\214\345\272\224\350\257\245\345\274\225\347\224\250\345\223\252\344\270\252\357\274\237.txt" "b/dist/\351\202\243\344\271\210\345\244\232\346\226\207\344\273\266\357\274\214\345\272\224\350\257\245\345\274\225\347\224\250\345\223\252\344\270\252\357\274\237.txt" new file mode 100644 index 0000000..4947e97 --- /dev/null +++ "b/dist/\351\202\243\344\271\210\345\244\232\346\226\207\344\273\266\357\274\214\345\272\224\350\257\245\345\274\225\347\224\250\345\223\252\344\270\252\357\274\237.txt" @@ -0,0 +1,9 @@ +1. 一般情况仅需引用 【lrz.bundle.js】 即可。 +但绝对不要删除目录下的【*.chunk.js】,这2个文件分别对应了IOS和Android的兼容代码,检测到符合环境时会自动引入。 + +2. 【lrz.all.bundle.js】是包含了所有引用了,莫名其妙的问题下就引用这个吧。 +例如:https://github.com/think2011/localResizeIMG4/issues/6 + +3. 【*.map】文件是供调试用的,正式使用删不删除都没关系,因为仅在调试时才会载入。 + +4. 支持AMD引入,CMD未测试,理论上是可以的。 \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index f8d54dc..6075769 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -50,7 +50,7 @@ gulp.task('clean', function () { }); gulp.task('dev:js', function () { - webpackConfig.devtool = ['source-map']; + //webpackConfig.devtool = ['source-map']; return gulp.src(files.js) .pipe(plugins.webpack(webpackConfig)) diff --git a/package.json b/package.json index ed652e1..46fe1c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lrz", - "version": "4.1.11", + "version": "4.2.1", "description": "前端本地客户端压缩图片,兼容IOS,Android,PC、自动按需加载文件", "scripts": { "test": "node ./node_modules/karma/bin/karma start" diff --git a/src/lrz.js b/src/lrz.js index 92c40a4..94b3b23 100644 --- a/src/lrz.js +++ b/src/lrz.js @@ -6,14 +6,17 @@ var Promise = require('Promise'), exif = require('exif'); var UA = (function (userAgent) { + var ISOldIOS = /OS (\d)_.* like Mac OS X/g.exec(userAgent), + isOldAndroid = /Android (\d.*?);/g.exec(userAgent); + // 判断设备是否是IOS7以下 // 判断设备是否是android4.5以下 // 判断是否iOS // 判断是否android // 判断是否QQ浏览器 return { - oldIOS : +((/OS (\d)_.* like Mac OS X/g.exec(userAgent)).pop()) < 8, - oldAndroid: +((/Android (\d.*?);/g.exec(userAgent)).pop().substr(0, 3)) < 4.5, + oldIOS : ISOldIOS ? +ISOldIOS.pop() < 8 : false, + oldAndroid: isOldAndroid ? +isOldAndroid.pop().substr(0, 3) < 4.5 : false, iOS : /\(i[^;]+;( U;)? CPU.+Mac OS X/.test(userAgent), android : /Android/g.test(userAgent), mQQBrowser: /MQQBrowser/g.test(userAgent) @@ -95,13 +98,19 @@ Lrz.prototype.init = function () { Lrz.prototype._getBase64 = function () { var that = this, img = that.img, + file = that.file, canvas = that.canvas; + var setCanvas = function () { + }; + return new Promise(function (resolve) { - exif.getData(img, function () { + // 传入blob在android4.3以下有bug + exif.getData(typeof file === 'object' ? file : img, function () { that.orientation = exif.getTag(this, "Orientation"); - that.resize = that._getResize(); - that.ctx = canvas.getContext('2d'); + + that.resize = that._getResize(); + that.ctx = canvas.getContext('2d'); canvas.width = that.resize.width; canvas.height = that.resize.height; @@ -110,18 +119,23 @@ Lrz.prototype._getBase64 = function () { that.ctx.fillStyle = '#fff'; that.ctx.fillRect(0, 0, canvas.width, canvas.height); - // 根据设备进行不同处理 - UA.oldIOS - ? that._createBase64ForOldIOS().then(resolve) - : that._createBase64().then(resolve); + // 根据设备对应处理方式 + if (UA.oldIOS) { + that._createBase64ForOldIOS().then(resolve); + } + else { + that._createBase64().then(resolve); + } }); }); }; + Lrz.prototype._createBase64ForOldIOS = function () { var that = this, img = that.img, canvas = that.canvas, + defaults = that.defaults, orientation = that.orientation; return new Promise(function (resolve) { @@ -142,7 +156,7 @@ Lrz.prototype._createBase64ForOldIOS = function () { }); } - resolve(canvas.toDataURL('image/jpeg', that.defaults.quality)); + resolve(canvas.toDataURL('image/jpeg', defaults.quality)); }); }); }; @@ -309,3 +323,5 @@ module.exports = window.lrz; *      ┗┻┛ ┗┻┛ * */ + + diff --git a/test/index.html b/test/index.html index 7428d0d..7730ea1 100644 --- a/test/index.html +++ b/test/index.html @@ -88,7 +88,7 @@

旋转方向测试

- - + + \ No newline at end of file diff --git a/test/index.js b/test/index.js index 523c162..0b82d75 100755 --- a/test/index.js +++ b/test/index.js @@ -1,4 +1,4 @@ -window.onerror = function (errMsg, scriptURI, lineNumber, columnNumber, errorObj) { +/*window.onerror = function (errMsg, scriptURI, lineNumber, columnNumber, errorObj) { setTimeout(function () { var rst = { "错误信息:": errMsg, @@ -11,7 +11,7 @@ window.onerror = function (errMsg, scriptURI, lineNumber, columnNumber, errorObj alert('出错了,下一步将显示错误信息'); alert(JSON.stringify(rst, null, 10)); }); -}; +};*/ [].forEach.call(document.querySelectorAll('[data-src]'), function (el) {