@cause-911/core
Version:
Run `npm install @cause-911/core --save` to add this library to your project
111 lines • 9.74 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
export class ImageService {
constructor() { }
/**
* @param {?} file
* @param {?=} maxWidth
* @param {?=} maxHeight
* @return {?}
*/
compress(file, maxWidth = 0, maxHeight = 0) {
/** @type {?} */
const fileName = file.name;
/** @type {?} */
const reader = new FileReader();
return new Observable((/**
* @param {?} observer
* @return {?}
*/
(observer) => {
reader.readAsDataURL(file);
reader.onload = (/**
* @param {?} e
* @return {?}
*/
(e) => {
/** @type {?} */
const image = new Image();
image.src = e.target['result'].toString();
image.onload = (/**
* @return {?}
*/
() => {
/** @type {?} */
const ratio = this.findRatio(image, maxWidth, maxHeight);
if (ratio !== null) {
/** @type {?} */
const elem = document.createElement('canvas');
elem.width = ratio.width;
elem.height = ratio.height;
/** @type {?} */
const ctx = elem.getContext('2d');
ctx.drawImage(image, 0, 0, ratio.width, ratio.height);
ctx.canvas.toBlob((/**
* @param {?} blob
* @return {?}
*/
(blob) => {
/** @type {?} */
const resizeFile = new File([blob], fileName, {
type: file.type,
lastModified: Date.now()
});
observer.next(resizeFile);
}), file.type, 1);
}
else {
observer.next(file);
}
});
});
}));
}
/**
* @private
* @param {?} image
* @param {?=} maxWidth
* @param {?=} maxHeight
* @return {?}
*/
findRatio(image, maxWidth = 0, maxHeight = 0) {
if (maxWidth === 0 && maxHeight === 0) {
return null;
}
/** @type {?} */
const aspectRatio = (image.width / image.height);
/** @type {?} */
const aspect = aspectRatio > 1 ? 'horizontal' : 'vertical';
maxWidth = maxWidth || image.width;
maxHeight = maxHeight || image.height;
if (image.width < maxWidth && image.height < maxHeight) {
return null;
}
if (aspect === 'horizontal' && maxWidth < image.width) {
return {
width: maxWidth,
height: (maxWidth / aspectRatio)
};
}
else {
return {
width: (maxHeight * aspectRatio),
height: maxHeight
};
}
}
}
ImageService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
ImageService.ctorParameters = () => [];
/** @nocollapse */ ImageService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function ImageService_Factory() { return new ImageService(); }, token: ImageService, providedIn: "root" });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjYXVzZS05MTEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvc2VydmljZXMvaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUs5QyxNQUFNLE9BQU8sWUFBWTtJQUV2QixnQkFBZ0IsQ0FBQzs7Ozs7OztJQUVWLFFBQVEsQ0FBQyxJQUFVLEVBQUUsV0FBbUIsQ0FBQyxFQUFFLFlBQW9CLENBQUM7O2NBQy9ELFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSTs7Y0FDcEIsTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1FBRS9CLE9BQU8sSUFBSSxVQUFVOzs7O1FBQUMsQ0FBQyxRQUEwQixFQUFFLEVBQUU7WUFDbkQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTTs7OztZQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7O3NCQUNkLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRTtnQkFFekIsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQyxLQUFLLENBQUMsTUFBTTs7O2dCQUFHLEdBQUcsRUFBRTs7MEJBQ1osS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7b0JBRXhELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTs7OEJBQ1osSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7OEJBRXJCLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDakMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDdEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7O3dCQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O2tDQUNuQixVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUU7Z0NBQzVDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQ0FDZixZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTs2QkFDekIsQ0FBQzs0QkFFRixRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUM1QixDQUFDLEdBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDbEI7eUJBQU07d0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDckI7Z0JBQ0gsQ0FBQyxDQUFBLENBQUM7WUFDSixDQUFDLENBQUEsQ0FBQztRQUNKLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7Ozs7SUFFTyxTQUFTLENBQUMsS0FBdUIsRUFBRSxXQUFtQixDQUFDLEVBQUUsWUFBb0IsQ0FBQztRQUNwRixJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiOztjQUVLLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7Y0FDMUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUUxRCxRQUFRLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDbkMsU0FBUyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksTUFBTSxLQUFLLFlBQVksSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNyRCxPQUFPO2dCQUNMLEtBQUssRUFBRSxRQUFRO2dCQUNmLE1BQU0sRUFBRSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7YUFDakMsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPO2dCQUNMLEtBQUssRUFBRSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7Z0JBQ2hDLE1BQU0sRUFBRSxTQUFTO2FBQ2xCLENBQUM7U0FDSDtJQUNILENBQUM7OztZQXJFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwdWJsaWMgY29tcHJlc3MoZmlsZTogRmlsZSwgbWF4V2lkdGg6IG51bWJlciA9IDAsIG1heEhlaWdodDogbnVtYmVyID0gMCk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPEZpbGU+KSA9PiB7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgIGltYWdlLnNyYyA9IGUudGFyZ2V0WydyZXN1bHQnXS50b1N0cmluZygpO1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSB0aGlzLmZpbmRSYXRpbyhpbWFnZSwgbWF4V2lkdGgsIG1heEhlaWdodCk7XG5cbiAgICAgICAgICBpZiAocmF0aW8gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIGVsZW0ud2lkdGggPSByYXRpby53aWR0aDtcbiAgICAgICAgICAgIGVsZW0uaGVpZ2h0ID0gcmF0aW8uaGVpZ2h0O1xuXG4gICAgICAgICAgICBjb25zdCBjdHggPSBlbGVtLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCByYXRpby53aWR0aCwgcmF0aW8uaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5jYW52YXMudG9CbG9iKChibG9iKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZUZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc2l6ZUZpbGUpO1xuICAgICAgICAgICAgfSwgZmlsZS50eXBlLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChmaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUmF0aW8oaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQsIG1heFdpZHRoOiBudW1iZXIgPSAwLCBtYXhIZWlnaHQ6IG51bWJlciA9IDApOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgIGlmIChtYXhXaWR0aCA9PT0gMCAmJiBtYXhIZWlnaHQgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gKGltYWdlLndpZHRoIC8gaW1hZ2UuaGVpZ2h0KTtcbiAgICBjb25zdCBhc3BlY3QgPSBhc3BlY3RSYXRpbyA+IDEgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnO1xuXG4gICAgbWF4V2lkdGggPSBtYXhXaWR0aCB8fCBpbWFnZS53aWR0aDtcbiAgICBtYXhIZWlnaHQgPSBtYXhIZWlnaHQgfHwgaW1hZ2UuaGVpZ2h0O1xuXG4gICAgaWYgKGltYWdlLndpZHRoIDwgbWF4V2lkdGggJiYgaW1hZ2UuaGVpZ2h0IDwgbWF4SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYXNwZWN0ID09PSAnaG9yaXpvbnRhbCcgJiYgbWF4V2lkdGggPCBpbWFnZS53aWR0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IG1heFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IChtYXhXaWR0aCAvIGFzcGVjdFJhdGlvKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IChtYXhIZWlnaHQgKiBhc3BlY3RSYXRpbyksXG4gICAgICAgIGhlaWdodDogbWF4SGVpZ2h0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIl19