browser-image-compression
Advanced tools
Comparing version 1.0.7 to 1.0.8
@@ -0,10 +1,14 @@ | ||
## v1.0.8 (16 Mar 2020) | ||
* added: support for Server Side Rendering (SSR) | ||
* updated: ts type file | ||
## v1.0.7 (15 Mar 2020) | ||
* add onProgress function in options for compression progress updates | ||
* allow fileType override | ||
* fix garbage clean canvas for safari | ||
* fix issue in Cordova support | ||
* fix issue in IE browser | ||
* fix other issues | ||
* useWebWorker default set to false | ||
* add ts type file | ||
* added: onProgress function in options for compression progress updates | ||
* added: allow fileType override | ||
* added: ts type file | ||
* updated: useWebWorker default set to false | ||
* fixed: garbage clean canvas for safari | ||
* fixed: issue in Cordova support | ||
* fixed: issue in IE browser | ||
* fixed: other issues | ||
@@ -11,0 +15,0 @@ ## v1.0.6 (5 July 2019) |
declare module 'browser-image-compression' { | ||
interface Options { | ||
maxSizeMB: number; | ||
maxWidthOrHeight: number; | ||
useWebWorker: boolean; | ||
maxIteration: number, | ||
exifOrientation: number, | ||
progress: Function, | ||
fileType: string | ||
/** @default Number.POSITIVE_INFINITY */ | ||
maxSizeMB?: number; | ||
/** @default undefined */ | ||
maxWidthOrHeight?: number; | ||
/** @default false */ | ||
useWebWorker?: boolean; | ||
/** @default 10 */ | ||
maxIteration?: number, | ||
/** Default to be the exif orientation from the image file */ | ||
exifOrientation?: number, | ||
/** A function takes one progress argument (progress from 0 to 100) */ | ||
onProgress?: (progress: number) => void, | ||
/** Default to be the original mime type from the image file */ | ||
fileType?: string | ||
} | ||
function imageCompression (image: Blob, options: Options): Blob; | ||
function imageCompression (image: Blob, options: Options): Promise<File | Blob>; | ||
export = imageCompression; | ||
} |
/** | ||
* Browser Image Compression | ||
* v1.0.7 | ||
* v1.0.8 | ||
* by Donald <donaldcwl@gmail.com> | ||
@@ -8,3 +8,3 @@ * https://github.com/Donaldcwl/browser-image-compression | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).imageCompression=n()}(this,(function(){"use strict";function _defineProperty(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ownKeys(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function _objectSpread2(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?ownKeys(Object(r),!0).forEach((function(n){_defineProperty(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function _slicedToArray(e,n){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],t=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(t=(a=s.next()).done)&&(r.push(a.value),!n||r.length!==n);t=!0);}catch(e){o=!0,i=e}finally{try{t||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,n)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var e="undefined"!=typeof window&&window.cordova&&window.cordova.require&&window.cordova.require("cordova/modulemapper"),CustomFile=e&&e.getOriginalSymbol(window,"File")||File,CustomFileReader=e&&e.getOriginalSymbol(window,"FileReader")||FileReader;function getDataUrlFromFile(e){return new Promise((function(n,r){var t=new CustomFileReader;t.onload=function(){return n(t.result)},t.onerror=function(e){return r(e)},t.readAsDataURL(e)}))}function getFilefromDataUrl(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return new Promise((function(t){for(var o=e.split(","),i=o[0].match(/:(.*?);/)[1],a=atob(o[1]),s=a.length,c=new Uint8Array(s);s--;)c[s]=a.charCodeAt(s);var l=new Blob([c],{type:i});l.name=n,l.lastModified=r,t(l)}))}function loadImage(e){return new Promise((function(n,r){var t=new Image;t.onload=function(){return n(t)},t.onerror=function(e){return r(e)},t.src=e}))}function drawImageInCanvas(e){var n=_slicedToArray(getNewCanvasAndCtx(e.width,e.height),2),r=n[0];return n[1].drawImage(e,0,0,r.width,r.height),r}function drawFileInCanvas(e){return new Promise((function(n,r){var t,o,i=function $Try_1_Post(){try{return o=drawImageInCanvas(t),n([t,o])}catch(e){return r(e)}},a=function $Try_1_Catch(n){try{return getDataUrlFromFile(e).then((function(e){try{return loadImage(e).then((function(e){try{return t=e,i()}catch(e){return r(e)}}),r)}catch(e){return r(e)}}),r)}catch(e){return r(e)}};try{return createImageBitmap(e).then((function(e){try{return t=e,i()}catch(e){return a()}}),a)}catch(e){a()}}))}function canvasToFile(e,n,r,t){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1;return new Promise((function(i,a){var s;return"function"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e.convertToBlob({type:n,quality:o}).then(function(e){try{return(s=e).name=r,s.lastModified=t,$If_4.call(this)}catch(e){return a(e)}}.bind(this),a):getFilefromDataUrl(e.toDataURL(n,o),r,t).then(function(e){try{return s=e,$If_4.call(this)}catch(e){return a(e)}}.bind(this),a);function $If_4(){return i(s)}}))}function getExifOrientation(e){return new Promise((function(n,r){var t=new CustomFileReader;t.onload=function(e){var r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return n(-2);for(var t=r.byteLength,o=2;o<t;){if(r.getUint16(o+2,!1)<=8)return n(-1);var i=r.getUint16(o,!1);if(o+=2,65505==i){if(1165519206!=r.getUint32(o+=2,!1))return n(-1);var a=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,a);var s=r.getUint16(o,a);o+=2;for(var c=0;c<s;c++)if(274==r.getUint16(o+12*c,a))return n(r.getUint16(o+12*c+8,a))}else{if(65280!=(65280&i))break;o+=r.getUint16(o,!1)}}return n(-1)},t.onerror=function(e){return r(e)},t.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,n){var r,t=e.width,o=e.height,i=n.maxWidthOrHeight,a=e;if(Number.isInteger(i)&&(t>i||o>i)){var s=_slicedToArray(getNewCanvasAndCtx(t,o),2);a=s[0],r=s[1],t>o?(a.width=i,a.height=o/t*i):(a.width=t/o*i,a.height=i),r.drawImage(e,0,0,a.width,a.height),cleanupCanvasMemory(e)}return a}function followExifOrientation(e,n){var r=e.width,t=e.height,o=_slicedToArray(getNewCanvasAndCtx(r,t),2),i=o[0],a=o[1];switch(4<n&&n<9?(i.width=t,i.height=r):(i.width=r,i.height=t),n){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,t);break;case 4:a.transform(1,0,0,-1,0,t);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,t,0);break;case 7:a.transform(0,-1,-1,0,t,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,t),cleanupCanvasMemory(e),i}function getNewCanvasAndCtx(e,n){var r,t;try{if(null===(t=(r=new OffscreenCanvas(e,n)).getContext("2d")))throw new Error("getContext of OffscreenCanvas returns null")}catch(e){t=(r=document.createElement("canvas")).getContext("2d")}return r.width=e,r.height=n,[r,t]}function cleanupCanvasMemory(e){e.width=0,e.height=0}function compress(e,n){return new Promise((function(r,t){var o,i,a,s,c,l,u,f,m,g,p,d,h;function incProgress(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;o+=e,"function"==typeof n.onProgress&&n.onProgress(Math.min(o,100))}function setProgress(e){o=Math.min(Math.max(e,o),100),"function"==typeof n.onProgress&&n.onProgress(o)}return o=0,i=n.maxIteration||10,a=1024*n.maxSizeMB*1024,incProgress(),drawFileInCanvas(e).then(function(o){try{var y=_slicedToArray(o,2);return y[0],s=y[1],incProgress(),c=handleMaxWidthOrHeight(s,n),incProgress(),new Promise((function(r,t){var o;if(!(o=n.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return t(e)}}.bind(this),t);function $If_2(){return r(o)}return $If_2.call(this)})).then(function(o){try{return n.exifOrientation=o,incProgress(),l=followExifOrientation(c,n.exifOrientation),incProgress(),u=1,canvasToFile(l,n.fileType||e.type,e.name,e.lastModified,u).then(function(o){try{{if(f=o,incProgress(),f.size<=a)return setProgress(100),r(f);var y;function $Loop_3(){if(i--&&g>a){var r,o,s=_slicedToArray(getNewCanvasAndCtx(r=.9*h.width,o=.9*h.height),2);return d=s[0],s[1].drawImage(h,0,0,r,o),"image/jpeg"===e.type&&(u*=.9),canvasToFile(d,n.fileType||e.type,e.name,e.lastModified,u).then((function(e){try{return p=e,cleanupCanvasMemory(h),h=d,g=p.size,setProgress(Math.min(99,Math.floor((m-g)/(m-a)*100))),$Loop_3}catch(e){return t(e)}}),t)}return[1]}return m=f.size,g=m,h=l,(y=function(e){for(;e;){if(e.then)return void e.then(y,t);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return t(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(h),cleanupCanvasMemory(d),cleanupCanvasMemory(c),cleanupCanvasMemory(l),cleanupCanvasMemory(s),setProgress(100),r(p)}}}catch(e){return t(e)}}.bind(this),t)}catch(e){return t(e)}}.bind(this),t)}catch(e){return t(e)}}.bind(this),t)}))}Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e};var n,r,t=0;function generateLib(){return function createSourceObject(e){return URL.createObjectURL(new Blob([e],{type:"application/javascript"}))}("\n function imageCompression (){return (".concat(imageCompression,").apply(null, arguments)}\n\n imageCompression.getDataUrlFromFile = ").concat(imageCompression.getDataUrlFromFile,"\n imageCompression.getFilefromDataUrl = ").concat(imageCompression.getFilefromDataUrl,"\n imageCompression.loadImage = ").concat(imageCompression.loadImage,"\n imageCompression.drawImageInCanvas = ").concat(imageCompression.drawImageInCanvas,"\n imageCompression.drawFileInCanvas = ").concat(imageCompression.drawFileInCanvas,"\n imageCompression.canvasToFile = ").concat(imageCompression.canvasToFile,"\n imageCompression.getExifOrientation = ").concat(imageCompression.getExifOrientation,"\n imageCompression.handleMaxWidthOrHeight = ").concat(imageCompression.handleMaxWidthOrHeight,"\n imageCompression.followExifOrientation = ").concat(imageCompression.followExifOrientation,"\n imageCompression.cleanupMemory = ").concat(imageCompression.cleanupMemory,"\n\n getDataUrlFromFile = imageCompression.getDataUrlFromFile\n getFilefromDataUrl = imageCompression.getFilefromDataUrl\n loadImage = imageCompression.loadImage\n drawImageInCanvas = imageCompression.drawImageInCanvas\n drawFileInCanvas = imageCompression.drawFileInCanvas\n canvasToFile = imageCompression.canvasToFile\n getExifOrientation = imageCompression.getExifOrientation\n handleMaxWidthOrHeight = imageCompression.handleMaxWidthOrHeight\n followExifOrientation = imageCompression.followExifOrientation\n cleanupMemory = imageCompression.cleanupMemory\n\n getNewCanvasAndCtx = ").concat(getNewCanvasAndCtx,"\n \n CustomFileReader = FileReader\n \n CustomFile = File\n \n function _slicedToArray(arr, n) { return arr }\n \n function _typeof(a) { return typeof a }\n\n function compress (){return (").concat(compress,").apply(null, arguments)}\n "))}function generateWorkerScript(){return function createWorker(e){return"function"==typeof e&&(e="(".concat(f,")()")),new Worker(URL.createObjectURL(new Blob([e])))}("\n let scriptImported = false\n self.addEventListener('message', async (e) => {\n const { file, id, imageCompressionLibUrl, options } = e.data\n options.onProgress = (progress) => self.postMessage({ progress, id })\n try {\n if (!scriptImported) {\n // console.log('[worker] importScripts', imageCompressionLibUrl)\n self.importScripts(imageCompressionLibUrl)\n scriptImported = true\n }\n // console.log('[worker] self', self)\n const compressedFile = await imageCompression(file, options)\n self.postMessage({ file: compressedFile, id })\n } catch (e) {\n // console.error('[worker] error', e)\n self.postMessage({ error: e.message + '\\n' + e.stack, id })\n }\n })\n ")}function imageCompression(e,o){return new Promise((function(i,a){var s,c,l;if(o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,c="boolean"==typeof o.useWebWorker&&o.useWebWorker,delete o.useWebWorker,!(e instanceof Blob||e instanceof CustomFile))return a(new Error("The file given is not an instance of Blob or File"));if(!/^image/.test(e.type))return a(new Error("The file given is not an image"));if(l="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!c||"function"!=typeof Worker||l)return compress(e,o).then(function(e){try{return s=e,$If_3.call(this)}catch(e){return a(e)}}.bind(this),a);var u=function(){try{return $If_3.call(this)}catch(e){return a(e)}}.bind(this),f=function $Try_1_Catch(n){try{return compress(e,o).then((function(e){try{return s=e,u()}catch(e){return a(e)}}),a)}catch(e){return a(e)}};try{return function compressOnWebWorker(e,o){return new Promise((function(i,a){return new Promise((function(s,c){var l=t++;return n||(n=generateLib()),r||(r=generateWorkerScript()),r.addEventListener("message",(function handler(e){if(e.data.id===l){if(void 0!==e.data.progress&&e.data.progress<100)return void o.onProgress(e.data.progress);r.removeEventListener("message",handler),e.data.error&&a(new Error(e.data.error)),i(e.data.file)}})),r.postMessage({file:e,id:l,imageCompressionLibUrl:n,options:_objectSpread2({},o,{onProgress:void 0})}),s()}))}))}(e,o).then((function(e){try{return s=e,u()}catch(e){return f()}}),f)}catch(e){f()}function $If_3(){try{s.name=e.name,s.lastModified=e.lastModified}catch(e){}return i(s)}}))}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupMemory=cleanupCanvasMemory,imageCompression.version="1.0.7",imageCompression})); | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).imageCompression=n()}(this,(function(){"use strict";function _defineProperty(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ownKeys(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function _objectSpread2(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?ownKeys(Object(r),!0).forEach((function(n){_defineProperty(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function _slicedToArray(e,n){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],t=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(t=(a=s.next()).done)&&(r.push(a.value),!n||r.length!==n);t=!0);}catch(e){o=!0,i=e}finally{try{t||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,n)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var e="undefined"!=typeof window,n=e&&window.cordova&&window.cordova.require&&window.cordova.require("cordova/modulemapper"),CustomFile=e&&(n&&n.getOriginalSymbol(window,"File")||File),CustomFileReader=e&&(n&&n.getOriginalSymbol(window,"FileReader")||FileReader);function getDataUrlFromFile(e){return new Promise((function(n,r){var t=new CustomFileReader;t.onload=function(){return n(t.result)},t.onerror=function(e){return r(e)},t.readAsDataURL(e)}))}function getFilefromDataUrl(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return new Promise((function(t){for(var o=e.split(","),i=o[0].match(/:(.*?);/)[1],a=atob(o[1]),s=a.length,c=new Uint8Array(s);s--;)c[s]=a.charCodeAt(s);var l=new Blob([c],{type:i});l.name=n,l.lastModified=r,t(l)}))}function loadImage(e){return new Promise((function(n,r){var t=new Image;t.onload=function(){return n(t)},t.onerror=function(e){return r(e)},t.src=e}))}function drawImageInCanvas(e){var n=_slicedToArray(getNewCanvasAndCtx(e.width,e.height),2),r=n[0];return n[1].drawImage(e,0,0,r.width,r.height),r}function drawFileInCanvas(e){return new Promise((function(n,r){var t,o,i=function $Try_1_Post(){try{return o=drawImageInCanvas(t),n([t,o])}catch(e){return r(e)}},a=function $Try_1_Catch(n){try{return getDataUrlFromFile(e).then((function(e){try{return loadImage(e).then((function(e){try{return t=e,i()}catch(e){return r(e)}}),r)}catch(e){return r(e)}}),r)}catch(e){return r(e)}};try{return createImageBitmap(e).then((function(e){try{return t=e,i()}catch(e){return a()}}),a)}catch(e){a()}}))}function canvasToFile(e,n,r,t){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1;return new Promise((function(i,a){var s;return"function"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e.convertToBlob({type:n,quality:o}).then(function(e){try{return(s=e).name=r,s.lastModified=t,$If_4.call(this)}catch(e){return a(e)}}.bind(this),a):getFilefromDataUrl(e.toDataURL(n,o),r,t).then(function(e){try{return s=e,$If_4.call(this)}catch(e){return a(e)}}.bind(this),a);function $If_4(){return i(s)}}))}function getExifOrientation(e){return new Promise((function(n,r){var t=new CustomFileReader;t.onload=function(e){var r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return n(-2);for(var t=r.byteLength,o=2;o<t;){if(r.getUint16(o+2,!1)<=8)return n(-1);var i=r.getUint16(o,!1);if(o+=2,65505==i){if(1165519206!=r.getUint32(o+=2,!1))return n(-1);var a=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,a);var s=r.getUint16(o,a);o+=2;for(var c=0;c<s;c++)if(274==r.getUint16(o+12*c,a))return n(r.getUint16(o+12*c+8,a))}else{if(65280!=(65280&i))break;o+=r.getUint16(o,!1)}}return n(-1)},t.onerror=function(e){return r(e)},t.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,n){var r,t=e.width,o=e.height,i=n.maxWidthOrHeight,a=e;if(Number.isInteger(i)&&(t>i||o>i)){var s=_slicedToArray(getNewCanvasAndCtx(t,o),2);a=s[0],r=s[1],t>o?(a.width=i,a.height=o/t*i):(a.width=t/o*i,a.height=i),r.drawImage(e,0,0,a.width,a.height),cleanupCanvasMemory(e)}return a}function followExifOrientation(e,n){var r=e.width,t=e.height,o=_slicedToArray(getNewCanvasAndCtx(r,t),2),i=o[0],a=o[1];switch(4<n&&n<9?(i.width=t,i.height=r):(i.width=r,i.height=t),n){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,t);break;case 4:a.transform(1,0,0,-1,0,t);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,t,0);break;case 7:a.transform(0,-1,-1,0,t,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,t),cleanupCanvasMemory(e),i}function getNewCanvasAndCtx(e,n){var r,t;try{if(null===(t=(r=new OffscreenCanvas(e,n)).getContext("2d")))throw new Error("getContext of OffscreenCanvas returns null")}catch(e){t=(r=document.createElement("canvas")).getContext("2d")}return r.width=e,r.height=n,[r,t]}function cleanupCanvasMemory(e){e.width=0,e.height=0}function compress(e,n){return new Promise((function(r,t){var o,i,a,s,c,l,u,f,m,g,p,d,h;function incProgress(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;o+=e,"function"==typeof n.onProgress&&n.onProgress(Math.min(o,100))}function setProgress(e){o=Math.min(Math.max(e,o),100),"function"==typeof n.onProgress&&n.onProgress(o)}return o=0,i=n.maxIteration||10,a=1024*n.maxSizeMB*1024,incProgress(),drawFileInCanvas(e).then(function(o){try{var y=_slicedToArray(o,2);return y[0],s=y[1],incProgress(),c=handleMaxWidthOrHeight(s,n),incProgress(),new Promise((function(r,t){var o;if(!(o=n.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return t(e)}}.bind(this),t);function $If_2(){return r(o)}return $If_2.call(this)})).then(function(o){try{return n.exifOrientation=o,incProgress(),l=followExifOrientation(c,n.exifOrientation),incProgress(),u=1,canvasToFile(l,n.fileType||e.type,e.name,e.lastModified,u).then(function(o){try{{if(f=o,incProgress(),f.size<=a)return setProgress(100),r(f);var y;function $Loop_3(){if(i--&&g>a){var r,o,s=_slicedToArray(getNewCanvasAndCtx(r=.9*h.width,o=.9*h.height),2);return d=s[0],s[1].drawImage(h,0,0,r,o),"image/jpeg"===e.type&&(u*=.9),canvasToFile(d,n.fileType||e.type,e.name,e.lastModified,u).then((function(e){try{return p=e,cleanupCanvasMemory(h),h=d,g=p.size,setProgress(Math.min(99,Math.floor((m-g)/(m-a)*100))),$Loop_3}catch(e){return t(e)}}),t)}return[1]}return m=f.size,g=m,h=l,(y=function(e){for(;e;){if(e.then)return void e.then(y,t);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return t(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(h),cleanupCanvasMemory(d),cleanupCanvasMemory(c),cleanupCanvasMemory(l),cleanupCanvasMemory(s),setProgress(100),r(p)}}}catch(e){return t(e)}}.bind(this),t)}catch(e){return t(e)}}.bind(this),t)}catch(e){return t(e)}}.bind(this),t)}))}e&&(Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e});var r,t,o=0;function generateLib(){return function createSourceObject(e){return URL.createObjectURL(new Blob([e],{type:"application/javascript"}))}("\n function imageCompression (){return (".concat(imageCompression,").apply(null, arguments)}\n\n imageCompression.getDataUrlFromFile = ").concat(imageCompression.getDataUrlFromFile,"\n imageCompression.getFilefromDataUrl = ").concat(imageCompression.getFilefromDataUrl,"\n imageCompression.loadImage = ").concat(imageCompression.loadImage,"\n imageCompression.drawImageInCanvas = ").concat(imageCompression.drawImageInCanvas,"\n imageCompression.drawFileInCanvas = ").concat(imageCompression.drawFileInCanvas,"\n imageCompression.canvasToFile = ").concat(imageCompression.canvasToFile,"\n imageCompression.getExifOrientation = ").concat(imageCompression.getExifOrientation,"\n imageCompression.handleMaxWidthOrHeight = ").concat(imageCompression.handleMaxWidthOrHeight,"\n imageCompression.followExifOrientation = ").concat(imageCompression.followExifOrientation,"\n imageCompression.cleanupMemory = ").concat(imageCompression.cleanupMemory,"\n\n getDataUrlFromFile = imageCompression.getDataUrlFromFile\n getFilefromDataUrl = imageCompression.getFilefromDataUrl\n loadImage = imageCompression.loadImage\n drawImageInCanvas = imageCompression.drawImageInCanvas\n drawFileInCanvas = imageCompression.drawFileInCanvas\n canvasToFile = imageCompression.canvasToFile\n getExifOrientation = imageCompression.getExifOrientation\n handleMaxWidthOrHeight = imageCompression.handleMaxWidthOrHeight\n followExifOrientation = imageCompression.followExifOrientation\n cleanupMemory = imageCompression.cleanupMemory\n\n getNewCanvasAndCtx = ").concat(getNewCanvasAndCtx,"\n \n CustomFileReader = FileReader\n \n CustomFile = File\n \n function _slicedToArray(arr, n) { return arr }\n \n function _typeof(a) { return typeof a }\n\n function compress (){return (").concat(compress,").apply(null, arguments)}\n "))}function generateWorkerScript(){return function createWorker(e){return"function"==typeof e&&(e="(".concat(f,")()")),new Worker(URL.createObjectURL(new Blob([e])))}("\n let scriptImported = false\n self.addEventListener('message', async (e) => {\n const { file, id, imageCompressionLibUrl, options } = e.data\n options.onProgress = (progress) => self.postMessage({ progress, id })\n try {\n if (!scriptImported) {\n // console.log('[worker] importScripts', imageCompressionLibUrl)\n self.importScripts(imageCompressionLibUrl)\n scriptImported = true\n }\n // console.log('[worker] self', self)\n const compressedFile = await imageCompression(file, options)\n self.postMessage({ file: compressedFile, id })\n } catch (e) {\n // console.error('[worker] error', e)\n self.postMessage({ error: e.message + '\\n' + e.stack, id })\n }\n })\n ")}function imageCompression(e,n){return new Promise((function(i,a){var s,c,l;if(n.maxSizeMB=n.maxSizeMB||Number.POSITIVE_INFINITY,c="boolean"==typeof n.useWebWorker&&n.useWebWorker,delete n.useWebWorker,!(e instanceof Blob||e instanceof CustomFile))return a(new Error("The file given is not an instance of Blob or File"));if(!/^image/.test(e.type))return a(new Error("The file given is not an image"));if(l="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!c||"function"!=typeof Worker||l)return compress(e,n).then(function(e){try{return s=e,$If_3.call(this)}catch(e){return a(e)}}.bind(this),a);var u=function(){try{return $If_3.call(this)}catch(e){return a(e)}}.bind(this),f=function $Try_1_Catch(r){try{return compress(e,n).then((function(e){try{return s=e,u()}catch(e){return a(e)}}),a)}catch(e){return a(e)}};try{return function compressOnWebWorker(e,n){return new Promise((function(i,a){return new Promise((function(s,c){var l=o++;return r||(r=generateLib()),t||(t=generateWorkerScript()),t.addEventListener("message",(function handler(e){if(e.data.id===l){if(void 0!==e.data.progress&&e.data.progress<100)return void n.onProgress(e.data.progress);t.removeEventListener("message",handler),e.data.error&&a(new Error(e.data.error)),i(e.data.file)}})),t.postMessage({file:e,id:l,imageCompressionLibUrl:r,options:_objectSpread2({},n,{onProgress:void 0})}),s()}))}))}(e,n).then((function(e){try{return s=e,u()}catch(e){return f()}}),f)}catch(e){f()}function $If_3(){try{s.name=e.name,s.lastModified=e.lastModified}catch(e){}return i(s)}}))}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupMemory=cleanupCanvasMemory,imageCompression.version="1.0.8",imageCompression})); | ||
//# sourceMappingURL=browser-image-compression.js.map |
declare module 'browser-image-compression' { | ||
interface Options { | ||
maxSizeMB: number; | ||
maxWidthOrHeight: number; | ||
useWebWorker: boolean; | ||
maxIteration: number, | ||
exifOrientation: number, | ||
progress: Function, | ||
fileType: string | ||
/** @default Number.POSITIVE_INFINITY */ | ||
maxSizeMB?: number; | ||
/** @default undefined */ | ||
maxWidthOrHeight?: number; | ||
/** @default false */ | ||
useWebWorker?: boolean; | ||
/** @default 10 */ | ||
maxIteration?: number, | ||
/** Default to be the exif orientation from the image file */ | ||
exifOrientation?: number, | ||
/** A function takes one progress argument (progress from 0 to 100) */ | ||
onProgress?: (progress: number) => void, | ||
/** Default to be the original mime type from the image file */ | ||
fileType?: string | ||
} | ||
function imageCompression (image: Blob, options: Options): Blob; | ||
function imageCompression (image: Blob, options: Options): Promise<File | Blob>; | ||
export = imageCompression; | ||
} |
@@ -87,4 +87,4 @@ import compress from './image-compression' | ||
imageCompression.cleanupMemory = cleanupCanvasMemory | ||
imageCompression.version = '1.0.7' | ||
imageCompression.version = '1.0.8' | ||
export default imageCompression |
@@ -0,5 +1,7 @@ | ||
const isBrowser = typeof window !== 'undefined' // change browser environment to support SSR | ||
// add support for cordova-plugin-file | ||
const moduleMapper = typeof window !== 'undefined' && window.cordova && window.cordova.require && window.cordova.require('cordova/modulemapper') | ||
export const CustomFile = (moduleMapper && moduleMapper.getOriginalSymbol(window, 'File')) || File | ||
export const CustomFileReader = (moduleMapper && moduleMapper.getOriginalSymbol(window, 'FileReader')) || FileReader | ||
const moduleMapper = isBrowser && window.cordova && window.cordova.require && window.cordova.require('cordova/modulemapper') | ||
export const CustomFile = isBrowser && ((moduleMapper && moduleMapper.getOriginalSymbol(window, 'File')) || File) | ||
export const CustomFileReader = isBrowser && ((moduleMapper && moduleMapper.getOriginalSymbol(window, 'FileReader')) || FileReader) | ||
@@ -264,3 +266,3 @@ /** | ||
if (ctx === null) { | ||
throw new Error("getContext of OffscreenCanvas returns null") | ||
throw new Error('getContext of OffscreenCanvas returns null') | ||
} | ||
@@ -286,7 +288,9 @@ } catch (e) { | ||
if (isBrowser) { | ||
// Polyfill for Number.isInteger | ||
Number.isInteger = Number.isInteger || function (value) { | ||
return typeof value === 'number' && | ||
isFinite(value) && | ||
Math.floor(value) === value | ||
Number.isInteger = Number.isInteger || function (value) { | ||
return typeof value === 'number' && | ||
isFinite(value) && | ||
Math.floor(value) === value | ||
} | ||
} |
{ | ||
"name": "browser-image-compression", | ||
"version": "1.0.7", | ||
"version": "1.0.8", | ||
"description": "Compress images in the browser", | ||
@@ -5,0 +5,0 @@ "main": "dist/browser-image-compression.js", |
@@ -57,3 +57,3 @@ # Browser Image Compression # | ||
imageCompression(file: File, options): Promise<File> | ||
imageCompression(file: File, options): Promise<File | Blob> | ||
``` | ||
@@ -60,0 +60,0 @@ ### Helper function ### |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
104766
683