UNPKG

@digitalascetic/ngx-pica

Version:

Angular (LTS) module to resize images files in browser

1 lines 16.9 kB
{"version":3,"file":"digitalascetic-ngx-pica.mjs","sources":["../../../../projects/digitalascetic/ngx-pica/src/lib/ngx-pica-error.interface.ts","../../../../projects/digitalascetic/ngx-pica/src/lib/ngx-pica.service.ts","../../../../projects/digitalascetic/ngx-pica/src/lib/ngx-pica-image.service.ts","../../../../projects/digitalascetic/ngx-pica/src/lib/ngx-pica.module.ts","../../../../projects/digitalascetic/ngx-pica/src/public_api.ts","../../../../projects/digitalascetic/ngx-pica/src/digitalascetic-ngx-pica.ts"],"sourcesContent":["export enum NgxPicaErrorType {\n NO_FILES_RECEIVED = 'NO_FILES_RECEIVED',\n READ_ERROR = 'IMAGE_COULD_NOT_BE_LOADED',\n NOT_BE_ABLE_TO_COMPRESS_ENOUGH = 'NOT_BE_ABLE_TO_COMPRESS_ENOUGH'\n}\n\nexport interface NgxPicaErrorInterface {\n err: NgxPicaErrorType;\n file?: File;\n}\n","import {Injectable} from '@angular/core';\nimport {Subject, Observable, Subscription} from 'rxjs';\nimport {NgxPicaErrorInterface, NgxPicaErrorType} from './ngx-pica-error.interface';\nimport {switchMap} from 'rxjs/operators';\nimport imageCompression from 'browser-image-compression';\n\n@Injectable()\nexport class NgxPicaService {\n private MAX_STEPS = 20;\n\n public resizeImages(files: File[], width: number, height: number, useWebWorker?: boolean): Observable<File> {\n const resizedImage: Subject<File> = new Subject();\n const totalFiles: number = files.length;\n\n if (totalFiles > 0) {\n const nextFile: Subject<File> = new Subject();\n let index = 0;\n\n const subscription: Subscription = nextFile\n .pipe(\n switchMap((file: File) => this.resizeImage(file, width, height, useWebWorker))\n )\n .subscribe({\n next: imageResized => {\n index++;\n resizedImage.next(imageResized);\n\n if (index < totalFiles) {\n nextFile.next(files[index]);\n\n } else {\n resizedImage.complete();\n subscription.unsubscribe();\n }\n },\n error: (err) => {\n const ngxPicaError: NgxPicaErrorInterface = {\n file: files[index],\n err: err\n };\n\n resizedImage.error(ngxPicaError);\n }\n });\n\n nextFile.next(files[index]);\n } else {\n const ngxPicaError: NgxPicaErrorInterface = {\n err: NgxPicaErrorType.NO_FILES_RECEIVED\n };\n\n resizedImage.error(ngxPicaError);\n resizedImage.complete();\n }\n\n return resizedImage.asObservable();\n }\n\n public resizeImage(file: File, width: number, height: number, useWebWorker: boolean = true): Observable<File> {\n const resizedImage: Subject<File> = new Subject();\n\n const maxWidthOrHeight = width > height ? height : width;\n\n imageCompression.getExifOrientation(file)\n .then(orientation => {\n imageCompression(file, {\n maxWidthOrHeight: maxWidthOrHeight,\n exifOrientation: orientation,\n useWebWorker: useWebWorker,\n maxIteration: this.MAX_STEPS\n }).then(resizedFile => {\n resizedImage.next(resizedFile);\n resizedImage.complete();\n }).catch(err => resizedImage.error({err: NgxPicaErrorType.READ_ERROR, file: file, original_error: err}));\n\n })\n .catch(err => {\n imageCompression(file, {\n maxWidthOrHeight: maxWidthOrHeight,\n maxIteration: this.MAX_STEPS\n }).then(resizedFile => {\n resizedImage.next(resizedFile);\n resizedImage.complete();\n }).catch(err => resizedImage.error({err: NgxPicaErrorType.READ_ERROR, file: file, original_error: err}));\n });\n\n return resizedImage.asObservable();\n }\n\n public compressImages(files: File[], sizeInMB: number, useWebWorker?: boolean): Observable<File> {\n const compressedImage: Subject<File> = new Subject();\n const totalFiles: number = files.length;\n\n if (totalFiles > 0) {\n const nextFile: Subject<File> = new Subject();\n let index = 0;\n\n const subscription: Subscription = nextFile\n .pipe(\n switchMap((file: File) => this.compressImage(file, sizeInMB, useWebWorker))\n )\n .subscribe({\n next: imageCompressed => {\n index++;\n compressedImage.next(imageCompressed);\n\n if (index < totalFiles) {\n nextFile.next(files[index]);\n\n } else {\n compressedImage.complete();\n subscription.unsubscribe();\n }\n },\n error: err => {\n const ngxPicaError: NgxPicaErrorInterface = {\n file: files[index],\n err: err\n };\n\n compressedImage.error(ngxPicaError);\n }\n });\n\n nextFile.next(files[index]);\n } else {\n const ngxPicaError: NgxPicaErrorInterface = {\n err: NgxPicaErrorType.NO_FILES_RECEIVED\n };\n\n compressedImage.error(ngxPicaError);\n compressedImage.complete();\n }\n\n return compressedImage.asObservable();\n }\n\n public compressImage(file: File, sizeInMB: number, useWebWorker: boolean = true): Observable<File> {\n const compressedImage: Subject<File> = new Subject();\n\n if (this.bytesToMB(file.size) <= sizeInMB) {\n setTimeout(() => {\n compressedImage.next(file);\n compressedImage.complete();\n });\n } else {\n imageCompression.getExifOrientation(file)\n .then(orientation => {\n imageCompression(file, {\n maxSizeMB: sizeInMB,\n useWebWorker: useWebWorker,\n exifOrientation: orientation,\n alwaysKeepResolution: true,\n maxIteration: this.MAX_STEPS\n })\n .then(compressedFile => {\n compressedImage.next(compressedFile);\n compressedImage.complete();\n })\n .catch(err => compressedImage.error({err: NgxPicaErrorType.READ_ERROR, file: file, original_error: err}));\n\n })\n .catch(err => {\n imageCompression(file, {\n maxSizeMB: sizeInMB,\n alwaysKeepResolution: true,\n maxIteration: this.MAX_STEPS\n })\n .then(compressedFile => {\n compressedImage.next(compressedFile);\n compressedImage.complete();\n })\n .catch(err2 => compressedImage.error({err: NgxPicaErrorType.READ_ERROR, file: file, original_error: err2}));\n });\n }\n\n return compressedImage.asObservable();\n }\n\n private bytesToMB(bytes: number) {\n return bytes / 1048576;\n }\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable()\nexport class NgxPicaImageService {\n\n private imageExtensions: string[] = [\n 'ase',\n 'art',\n 'bmp',\n 'blp',\n 'cd5',\n 'cit',\n 'cpt',\n 'cr2',\n 'cut',\n 'dds',\n 'dib',\n 'djvu',\n 'egt',\n 'exif',\n 'gif',\n 'gpl',\n 'grf',\n 'icns',\n 'ico',\n 'iff',\n 'jng',\n 'jpeg',\n 'jpg',\n 'jfif',\n 'jp2',\n 'jps',\n 'lbm',\n 'max',\n 'miff',\n 'mng',\n 'msp',\n 'nitf',\n 'ota',\n 'pbm',\n 'pc1',\n 'pc2',\n 'pc3',\n 'pcf',\n 'pcx',\n 'pdn',\n 'pgm',\n 'PI1',\n 'PI2',\n 'PI3',\n 'pict',\n 'pct',\n 'pnm',\n 'pns',\n 'ppm',\n 'psb',\n 'psd',\n 'pdd',\n 'psp',\n 'px',\n 'pxm',\n 'pxr',\n 'qfx',\n 'raw',\n 'rle',\n 'sct',\n 'sgi',\n 'rgb',\n 'int',\n 'bw',\n 'tga',\n 'tiff',\n 'tif',\n 'vtf',\n 'xbm',\n 'xcf',\n 'xpm',\n '3dv',\n 'amf',\n 'ai',\n 'awg',\n 'cgm',\n 'cdr',\n 'cmx',\n 'dxf',\n 'e2d',\n 'egt',\n 'eps',\n 'fs',\n 'gbr',\n 'odg',\n 'svg',\n 'stl',\n 'vrml',\n 'x3d',\n 'sxd',\n 'v2d',\n 'vnd',\n 'wmf',\n 'emf',\n 'art',\n 'xar',\n 'png',\n 'webp',\n 'jxr',\n 'hdp',\n 'wdp',\n 'cur',\n 'ecw',\n 'iff',\n 'lbm',\n 'liff',\n 'nrrd',\n 'pam',\n 'pcx',\n 'pgf',\n 'sgi',\n 'rgb',\n 'rgba',\n 'bw',\n 'int',\n 'inta',\n 'sid',\n 'ras',\n 'sun',\n 'tga'\n ];\n\n public isImage(file: File): boolean {\n const fileExtension: string = file.name.toLowerCase().substring(file.name.lastIndexOf('.') + 1);\n return (this.imageExtensions.indexOf(fileExtension) !== -1);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {NgxPicaService} from './ngx-pica.service';\nimport {NgxPicaImageService} from './ngx-pica-image.service';\n\n@NgModule({\n providers: [\n {provide: NgxPicaService, useClass: NgxPicaService},\n {provide: NgxPicaImageService, useClass: NgxPicaImageService},\n ]\n})\nexport class NgxPicaModule {\n}\n","/*\n * Public API Surface of ngx-pica\n */\n\nexport * from './lib/ngx-pica.module';\nexport * from './lib/ngx-pica.service';\nexport * from './lib/ngx-pica-image.service';\nexport * from './lib/ngx-pica-error.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}