UNPKG

ng-pica

Version:

Angular module to resize images files in browser

2 lines 6.09 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("exif-js"),require("pica")):"function"==typeof define&&define.amd?define("ng-pica",["exports","@angular/core","rxjs","exif-js","pica"],t):t((e=e||self)["ng-pica"]={},e.ng.core,e.rxjs,e.exifJs,e.Pica)}(this,function(e,t,r,n,i){"use strict";i=i&&i.hasOwnProperty("default")?i["default"]:i;var a="NO_FILES_RECEIVED",o="CANVAS_CONTEXT_IDENTIFIER_NOT_SUPPORTED",c="NOT_BE_ABLE_TO_COMPRESS_ENOUGH",s=function(){function e(){}return e.prototype.getExifOrientedImage=function(e){return new Promise(function(t,r){n.getData(e,function(){var r=n.getAllTags(e).Orientation;if(r){if(!/^[1-8]$/.test(r))throw new Error("orientation should be [1-8]");var i=document.createElement("canvas"),a=i.getContext("2d"),o=0,c=0,s=0,u=e.width,p=e.height;switch([5,6,7,8].indexOf(r)>-1&&(u=e.height,p=e.width),i.width=u,i.height=p,r){case 3:case 4:c=-e.width,s=-e.height,o=180;break;case 5:case 6:s=-e.height,o=90;break;case 7:case 8:c=-e.width,o=270}[2,4,5,7].indexOf(r)>-1&&(a.translate(u,0),a.scale(-1,1)),a.rotate(o/180*Math.PI),a.drawImage(e,c,s);var f=new Image;f.width=u,f.height=p,f.onload=function(){t(f)},f.src=i.toDataURL()}else t(e)})})},e.decorators=[{type:t.Injectable}],e}(),u=function(){function e(e){this._ngxPicaExifService=e,this.picaResizer=new i,this.MAX_STEPS=20,this.picaResizer&&this.picaResizer.resize||(this.picaResizer=new window.Pica)}return e.prototype.resizeImages=function(e,t,n,i){var o=this,c=new r.Subject,s=e.length;if(s>0){var u=new r.Subject,p=0,f=u.subscribe(function(r){o.resizeImage(r,t,n,i).subscribe(function(t){p++,c.next(t),p<s?u.next(e[p]):(c.complete(),f.unsubscribe())},function(e){var t={file:r,err:e};c.error(t)})});u.next(e[p])}else{var g={err:a};c.error(g),c.complete()}return c.asObservable()},e.prototype.resizeImage=function(e,t,n,i){var a=this,c=new r.Subject,s=document.createElement("canvas"),u=s.getContext("2d"),p=new Image;return u?(p.onload=function(){a._ngxPicaExifService.getExifOrientedImage(p).then(function(r){window.URL.revokeObjectURL(p.src),s.width=r.width,s.height=r.height,u.drawImage(r,0,0);var o=u.getImageData(0,0,r.width,r.height);if(i&&i.aspectRatio&&i.aspectRatio.keepAspectRatio){var f=0;f=i.aspectRatio.forceMinDimensions?Math.max(t/o.width,n/o.height):Math.min(t/o.width,n/o.height),t=Math.round(o.width*f),n=Math.round(o.height*f)}var g=document.createElement("canvas");g.width=t,g.height=n,a.picaResize(e,s,g,i)["catch"](function(e){return c.error(e)}).then(function(e){c.next(e)})})},p.src=window.URL.createObjectURL(e)):c.error(o),c.asObservable()},e.prototype.compressImages=function(e,t){var n=this,i=new r.Subject,o=e.length;if(o>0){var c=new r.Subject,s=0,u=c.subscribe(function(r){n.compressImage(r,t).subscribe(function(t){s++,i.next(t),s<o?c.next(e[s]):(i.complete(),u.unsubscribe())},function(e){var t={file:r,err:e};i.error(t)})});c.next(e[s])}else{var p={err:a};i.error(p),i.complete()}return i.asObservable()},e.prototype.compressImage=function(e,t){var n=this,i=new r.Subject,a=document.createElement("canvas"),c=a.getContext("2d"),s=new Image;return c?(s.onload=function(){n._ngxPicaExifService.getExifOrientedImage(s).then(function(r){window.URL.revokeObjectURL(s.src),a.width=r.width,a.height=r.height,c.drawImage(r,0,0),n.picaResizer.toBlob(a,e.type,1)["catch"](function(e){return i.error(e)}).then(function(r){if(n.bytesToMB(r.size)<=t){var o=n.blobToFile(r,e.name,e.type,(new Date).getTime());i.next(o)}else n.getCompressedImage(a,e.type,1,t,0)["catch"](function(e){return i.error(e)}).then(function(t){var r=n.blobToFile(t,e.name,e.type,(new Date).getTime());i.next(r)})})})},s.src=window.URL.createObjectURL(e)):i.error(o),i.asObservable()},e.prototype.getCompressedImage=function(e,t,r,n,i){var a=this;return new Promise(function(o,c){a.picaResizer.toBlob(e,t,r)["catch"](function(e){return c(e)}).then(function(t){a.checkCompressedImageSize(e,t,r,n,i)["catch"](function(e){return c(e)}).then(function(e){o(e)})})})},e.prototype.checkCompressedImageSize=function(e,t,r,n,i){var a=this;return new Promise(function(o,s){if(i>a.MAX_STEPS)s(c);else if(a.bytesToMB(t.size)<n)o(t);else{var u=r-.1*r,p=i+1;o(a.getCompressedImage(e,t.type,u,n,p))}})},e.prototype.picaResize=function(e,t,r,n){var i=this;return new Promise(function(a,o){i.picaResizer.resize(t,r,n)["catch"](function(e){return o(e)}).then(function(t){return i.picaResizer.toBlob(t,e.type)}).then(function(t){var r=i.blobToFile(t,e.name,e.type,(new Date).getTime());a(r)})})},e.prototype.blobToFile=function(e,t,r,n){var i=new Blob([e],{type:r});return i.name=t,i.lastModifiedDate=n,i},e.prototype.bytesToMB=function(e){return e/1048576},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[{type:s}]},e}(),p=function(){function e(){this.imageExtensions=["ase","art","bmp","blp","cd5","cit","cpt","cr2","cut","dds","dib","djvu","egt","exif","gif","gpl","grf","icns","ico","iff","jng","jpeg","jpg","jfif","jp2","jps","lbm","max","miff","mng","msp","nitf","ota","pbm","pc1","pc2","pc3","pcf","pcx","pdn","pgm","PI1","PI2","PI3","pict","pct","pnm","pns","ppm","psb","psd","pdd","psp","px","pxm","pxr","qfx","raw","rle","sct","sgi","rgb","int","bw","tga","tiff","tif","vtf","xbm","xcf","xpm","3dv","amf","ai","awg","cgm","cdr","cmx","dxf","e2d","egt","eps","fs","gbr","odg","svg","stl","vrml","x3d","sxd","v2d","vnd","wmf","emf","art","xar","png","webp","jxr","hdp","wdp","cur","ecw","iff","lbm","liff","nrrd","pam","pcx","pgf","sgi","rgb","rgba","bw","int","inta","sid","ras","sun","tga"]}return e.prototype.isImage=function(e){var t=e.name.toLowerCase().substr(e.name.lastIndexOf(".")+1);return-1!==this.imageExtensions.indexOf(t)},e.decorators=[{type:t.Injectable}],e}(),f=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{providers:[{provide:u,useClass:u},{provide:s,useClass:s},{provide:p,useClass:p}]}]}],e}();e.NgxPicaExifService=s,e.NgxPicaImageService=p,e.NgxPicaModule=f,e.NgxPicaService=u,Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=ng-pica.umd.min.js.map