ngx-image-cropper 5.0.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/esm2020/lib/component/image-cropper.component.mjs +540 -0
- package/esm2020/lib/image-cropper.module.mjs +26 -0
- package/esm2020/lib/interfaces/cropper-options.interface.mjs +2 -0
- package/esm2020/lib/interfaces/cropper-position.interface.mjs +2 -0
- package/esm2020/lib/interfaces/cropper.settings.mjs +50 -0
- package/esm2020/lib/interfaces/dimensions.interface.mjs +2 -0
- package/esm2020/lib/interfaces/exif-transform.interface.mjs +2 -0
- package/esm2020/lib/interfaces/image-cropped-event.interface.mjs +2 -0
- package/esm2020/lib/interfaces/image-transform.interface.mjs +2 -0
- package/esm2020/lib/interfaces/index.mjs +2 -0
- package/esm2020/lib/interfaces/loaded-image.interface.mjs +2 -0
- package/esm2020/lib/interfaces/move-start.interface.mjs +7 -0
- package/esm2020/lib/services/crop.service.mjs +117 -0
- package/esm2020/lib/services/cropper-position.service.mjs +201 -0
- package/esm2020/lib/services/load-image.service.mjs +168 -0
- package/esm2020/lib/utils/blob.utils.mjs +12 -0
- package/esm2020/lib/utils/exif.utils.mjs +89 -0
- package/esm2020/lib/utils/hammer.utils.mjs +2 -0
- package/esm2020/lib/utils/keyboard.utils.mjs +40 -0
- package/esm2020/lib/utils/resize.utils.mjs +75 -0
- package/esm2020/ngx-image-cropper.mjs +5 -0
- package/esm2020/public-api.mjs +6 -0
- package/fesm2015/{ngx-image-cropper.js → ngx-image-cropper.mjs} +251 -1035
- package/fesm2015/ngx-image-cropper.mjs.map +1 -0
- package/fesm2020/ngx-image-cropper.mjs +1315 -0
- package/fesm2020/ngx-image-cropper.mjs.map +1 -0
- package/lib/component/image-cropper.component.d.ts +12 -9
- package/lib/image-cropper.module.d.ts +6 -0
- package/lib/interfaces/cropper.settings.d.ts +1 -1
- package/lib/services/crop.service.d.ts +3 -0
- package/lib/services/cropper-position.service.d.ts +3 -0
- package/lib/services/load-image.service.d.ts +3 -0
- package/lib/utils/hammer.utils.d.ts +1 -1
- package/ngx-image-cropper.d.ts +1 -3
- package/package.json +24 -13
- package/bundles/ngx-image-cropper.umd.js +0 -2418
- package/bundles/ngx-image-cropper.umd.js.map +0 -1
- package/bundles/ngx-image-cropper.umd.min.js +0 -16
- package/bundles/ngx-image-cropper.umd.min.js.map +0 -1
- package/esm2015/lib/component/image-cropper.component.js +0 -827
- package/esm2015/lib/image-cropper.module.js +0 -24
- package/esm2015/lib/interfaces/cropper-options.interface.js +0 -56
- package/esm2015/lib/interfaces/cropper-position.interface.js +0 -20
- package/esm2015/lib/interfaces/cropper.settings.js +0 -140
- package/esm2015/lib/interfaces/dimensions.interface.js +0 -16
- package/esm2015/lib/interfaces/exif-transform.interface.js +0 -16
- package/esm2015/lib/interfaces/image-cropped-event.interface.js +0 -24
- package/esm2015/lib/interfaces/image-transform.interface.js +0 -20
- package/esm2015/lib/interfaces/index.js +0 -6
- package/esm2015/lib/interfaces/loaded-image.interface.js +0 -18
- package/esm2015/lib/interfaces/move-start.interface.js +0 -37
- package/esm2015/lib/services/crop.service.js +0 -176
- package/esm2015/lib/services/cropper-position.service.js +0 -259
- package/esm2015/lib/services/load-image.service.js +0 -304
- package/esm2015/lib/utils/blob.utils.js +0 -26
- package/esm2015/lib/utils/exif.utils.js +0 -128
- package/esm2015/lib/utils/hammer.utils.js +0 -29
- package/esm2015/lib/utils/keyboard.utils.js +0 -58
- package/esm2015/lib/utils/resize.utils.js +0 -116
- package/esm2015/ngx-image-cropper.js +0 -13
- package/esm2015/public-api.js +0 -11
- package/fesm2015/ngx-image-cropper.js.map +0 -1
- package/ngx-image-cropper.metadata.json +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: lib/utils/resize.utils.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
/*
|
|
7
|
-
* Hermite resize - fast image resize/resample using Hermite filter.
|
|
8
|
-
* https://github.com/viliusle/Hermite-resize
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* @param {?} canvas
|
|
12
|
-
* @param {?} width
|
|
13
|
-
* @param {?} height
|
|
14
|
-
* @return {?}
|
|
15
|
-
*/
|
|
16
|
-
export function resizeCanvas(canvas, width, height) {
|
|
17
|
-
/** @type {?} */
|
|
18
|
-
const width_source = canvas.width;
|
|
19
|
-
/** @type {?} */
|
|
20
|
-
const height_source = canvas.height;
|
|
21
|
-
width = Math.round(width);
|
|
22
|
-
height = Math.round(height);
|
|
23
|
-
/** @type {?} */
|
|
24
|
-
const ratio_w = width_source / width;
|
|
25
|
-
/** @type {?} */
|
|
26
|
-
const ratio_h = height_source / height;
|
|
27
|
-
/** @type {?} */
|
|
28
|
-
const ratio_w_half = Math.ceil(ratio_w / 2);
|
|
29
|
-
/** @type {?} */
|
|
30
|
-
const ratio_h_half = Math.ceil(ratio_h / 2);
|
|
31
|
-
/** @type {?} */
|
|
32
|
-
const ctx = canvas.getContext('2d');
|
|
33
|
-
if (ctx) {
|
|
34
|
-
/** @type {?} */
|
|
35
|
-
const img = ctx.getImageData(0, 0, width_source, height_source);
|
|
36
|
-
/** @type {?} */
|
|
37
|
-
const img2 = ctx.createImageData(width, height);
|
|
38
|
-
/** @type {?} */
|
|
39
|
-
const data = img.data;
|
|
40
|
-
/** @type {?} */
|
|
41
|
-
const data2 = img2.data;
|
|
42
|
-
for (let j = 0; j < height; j++) {
|
|
43
|
-
for (let i = 0; i < width; i++) {
|
|
44
|
-
/** @type {?} */
|
|
45
|
-
const x2 = (i + j * width) * 4;
|
|
46
|
-
/** @type {?} */
|
|
47
|
-
const center_y = j * ratio_h;
|
|
48
|
-
/** @type {?} */
|
|
49
|
-
let weight = 0;
|
|
50
|
-
/** @type {?} */
|
|
51
|
-
let weights = 0;
|
|
52
|
-
/** @type {?} */
|
|
53
|
-
let weights_alpha = 0;
|
|
54
|
-
/** @type {?} */
|
|
55
|
-
let gx_r = 0;
|
|
56
|
-
/** @type {?} */
|
|
57
|
-
let gx_g = 0;
|
|
58
|
-
/** @type {?} */
|
|
59
|
-
let gx_b = 0;
|
|
60
|
-
/** @type {?} */
|
|
61
|
-
let gx_a = 0;
|
|
62
|
-
/** @type {?} */
|
|
63
|
-
const xx_start = Math.floor(i * ratio_w);
|
|
64
|
-
/** @type {?} */
|
|
65
|
-
const yy_start = Math.floor(j * ratio_h);
|
|
66
|
-
/** @type {?} */
|
|
67
|
-
let xx_stop = Math.ceil((i + 1) * ratio_w);
|
|
68
|
-
/** @type {?} */
|
|
69
|
-
let yy_stop = Math.ceil((j + 1) * ratio_h);
|
|
70
|
-
xx_stop = Math.min(xx_stop, width_source);
|
|
71
|
-
yy_stop = Math.min(yy_stop, height_source);
|
|
72
|
-
for (let yy = yy_start; yy < yy_stop; yy++) {
|
|
73
|
-
/** @type {?} */
|
|
74
|
-
const dy = Math.abs(center_y - yy) / ratio_h_half;
|
|
75
|
-
/** @type {?} */
|
|
76
|
-
const center_x = i * ratio_w;
|
|
77
|
-
/** @type {?} */
|
|
78
|
-
const w0 = dy * dy;
|
|
79
|
-
for (let xx = xx_start; xx < xx_stop; xx++) {
|
|
80
|
-
/** @type {?} */
|
|
81
|
-
const dx = Math.abs(center_x - xx) / ratio_w_half;
|
|
82
|
-
/** @type {?} */
|
|
83
|
-
const w = Math.sqrt(w0 + dx * dx);
|
|
84
|
-
if (w >= 1) {
|
|
85
|
-
//pixel too far
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
//hermite filter
|
|
89
|
-
weight = 2 * w * w * w - 3 * w * w + 1;
|
|
90
|
-
/** @type {?} */
|
|
91
|
-
const pos_x = 4 * (xx + yy * width_source);
|
|
92
|
-
//alpha
|
|
93
|
-
gx_a += weight * data[pos_x + 3];
|
|
94
|
-
weights_alpha += weight;
|
|
95
|
-
//colors
|
|
96
|
-
if (data[pos_x + 3] < 255)
|
|
97
|
-
weight = weight * data[pos_x + 3] / 250;
|
|
98
|
-
gx_r += weight * data[pos_x];
|
|
99
|
-
gx_g += weight * data[pos_x + 1];
|
|
100
|
-
gx_b += weight * data[pos_x + 2];
|
|
101
|
-
weights += weight;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
data2[x2] = gx_r / weights;
|
|
105
|
-
data2[x2 + 1] = gx_g / weights;
|
|
106
|
-
data2[x2 + 2] = gx_b / weights;
|
|
107
|
-
data2[x2 + 3] = gx_a / weights_alpha;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
canvas.width = width;
|
|
111
|
-
canvas.height = height;
|
|
112
|
-
//draw
|
|
113
|
-
ctx.putImageData(img2, 0, 0);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLnV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9tYXdpL1Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9yZXNpemUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBS0EsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUF5QixFQUFFLEtBQWEsRUFBRSxNQUFjOztVQUM3RSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUs7O1VBQzNCLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTTtJQUNuQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7VUFFdEIsT0FBTyxHQUFHLFlBQVksR0FBRyxLQUFLOztVQUM5QixPQUFPLEdBQUcsYUFBYSxHQUFHLE1BQU07O1VBQ2hDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7O1VBQ3JDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7O1VBRXJDLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJQUNuQyxJQUFJLEdBQUcsRUFBRTs7Y0FDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUM7O2NBQ3pELElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7O2NBQ3pDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSTs7Y0FDZixLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUk7UUFFdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FB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QUMsQ0FBQzt3QkFDakMsT0FBTyxJQUFJLE1BQU0sQ0FBQztxQkFDbkI7aUJBQ0Y7Z0JBQ0QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztnQkFDL0IsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO2dCQUMvQixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxhQUFhLENBQUM7YUFDdEM7U0FDRjtRQUdELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXZCLE1BQU07UUFDTixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDOUI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEhlcm1pdGUgcmVzaXplIC0gZmFzdCBpbWFnZSByZXNpemUvcmVzYW1wbGUgdXNpbmcgSGVybWl0ZSBmaWx0ZXIuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdmlsaXVzbGUvSGVybWl0ZS1yZXNpemVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplQ2FudmFzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIGNvbnN0IHdpZHRoX3NvdXJjZSA9IGNhbnZhcy53aWR0aDtcbiAgY29uc3QgaGVpZ2h0X3NvdXJjZSA9IGNhbnZhcy5oZWlnaHQ7XG4gIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCk7XG4gIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0KTtcblxuICBjb25zdCByYXRpb193ID0gd2lkdGhfc291cmNlIC8gd2lkdGg7XG4gIGNvbnN0IHJhdGlvX2ggPSBoZWlnaHRfc291cmNlIC8gaGVpZ2h0O1xuICBjb25zdCByYXRpb193X2hhbGYgPSBNYXRoLmNlaWwocmF0aW9fdyAvIDIpO1xuICBjb25zdCByYXRpb19oX2hhbGYgPSBNYXRoLmNlaWwocmF0aW9faCAvIDIpO1xuXG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBpZiAoY3R4KSB7XG4gICAgY29uc3QgaW1nID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aF9zb3VyY2UsIGhlaWdodF9zb3VyY2UpO1xuICAgIGNvbnN0IGltZzIgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGRhdGEgPSBpbWcuZGF0YTtcbiAgICBjb25zdCBkYXRhMiA9IGltZzIuZGF0YTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgICAgICBjb25zdCB4MiA9IChpICsgaiAqIHdpZHRoKSAqIDQ7XG4gICAgICAgIGNvbnN0IGNlbnRlcl95ID0gaiAqIHJhdGlvX2g7XG4gICAgICAgIGxldCB3ZWlnaHQgPSAwO1xuICAgICAgICBsZXQgd2VpZ2h0cyA9IDA7XG4gICAgICAgIGxldCB3ZWlnaHRzX2FscGhhID0gMDtcbiAgICAgICAgbGV0IGd4X3IgPSAwO1xuICAgICAgICBsZXQgZ3hfZyA9IDA7XG4gICAgICAgIGxldCBneF9iID0gMDtcbiAgICAgICAgbGV0IGd4X2EgPSAwO1xuXG4gICAgICAgIGNvbnN0IHh4X3N0YXJ0ID0gTWF0aC5mbG9vcihpICogcmF0aW9fdyk7XG4gICAgICAgIGNvbnN0IHl5X3N0YXJ0ID0gTWF0aC5mbG9vcihqICogcmF0aW9faCk7XG4gICAgICAgIGxldCB4eF9zdG9wID0gTWF0aC5jZWlsKChpICsgMSkgKiByYXRpb193KTtcbiAgICAgICAgbGV0IHl5X3N0b3AgPSBNYXRoLmNlaWwoKGogKyAxKSAqIHJhdGlvX2gpO1xuICAgICAgICB4eF9zdG9wID0gTWF0aC5taW4oeHhfc3RvcCwgd2lkdGhfc291cmNlKTtcbiAgICAgICAgeXlfc3RvcCA9IE1hdGgubWluKHl5X3N0b3AsIGhlaWdodF9zb3VyY2UpO1xuXG4gICAgICAgIGZvciAobGV0IHl5ID0geXlfc3RhcnQ7IHl5IDwgeXlfc3RvcDsgeXkrKykge1xuICAgICAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMoY2VudGVyX3kgLSB5eSkgLyByYXRpb19oX2hhbGY7XG4gICAgICAgICAgY29uc3QgY2VudGVyX3ggPSBpICogcmF0aW9fdztcbiAgICAgICAgICBjb25zdCB3MCA9IGR5ICogZHk7IC8vcHJlLWNhbGMgcGFydCBvZiB3XG4gICAgICAgICAgZm9yIChsZXQgeHggPSB4eF9zdGFydDsgeHggPCB4eF9zdG9wOyB4eCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkeCA9IE1hdGguYWJzKGNlbnRlcl94IC0geHgpIC8gcmF0aW9fd19oYWxmO1xuICAgICAgICAgICAgY29uc3QgdyA9IE1hdGguc3FydCh3MCArIGR4ICogZHgpO1xuICAgICAgICAgICAgaWYgKHcgPj0gMSkge1xuICAgICAgICAgICAgICAvL3BpeGVsIHRvbyBmYXJcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2hlcm1pdGUgZmlsdGVyXG4gICAgICAgICAgICB3ZWlnaHQgPSAyICogdyAqIHcgKiB3IC0gMyAqIHcgKiB3ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHBvc194ID0gNCAqICh4eCArIHl5ICogd2lkdGhfc291cmNlKTtcbiAgICAgICAgICAgIC8vYWxwaGFcbiAgICAgICAgICAgIGd4X2EgKz0gd2VpZ2h0ICogZGF0YVtwb3NfeCArIDNdO1xuICAgICAgICAgICAgd2VpZ2h0c19hbHBoYSArPSB3ZWlnaHQ7XG4gICAgICAgICAgICAvL2NvbG9yc1xuICAgICAgICAgICAgaWYgKGRhdGFbcG9zX3ggKyAzXSA8IDI1NSlcbiAgICAgICAgICAgICAgd2VpZ2h0ID0gd2VpZ2h0ICogZGF0YVtwb3NfeCArIDNdIC8gMjUwO1xuICAgICAgICAgICAgZ3hfciArPSB3ZWlnaHQgKiBkYXRhW3Bvc194XTtcbiAgICAgICAgICAgIGd4X2cgKz0gd2VpZ2h0ICogZGF0YVtwb3NfeCArIDFdO1xuICAgICAgICAgICAgZ3hfYiArPSB3ZWlnaHQgKiBkYXRhW3Bvc194ICsgMl07XG4gICAgICAgICAgICB3ZWlnaHRzICs9IHdlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YTJbeDJdID0gZ3hfciAvIHdlaWdodHM7XG4gICAgICAgIGRhdGEyW3gyICsgMV0gPSBneF9nIC8gd2VpZ2h0cztcbiAgICAgICAgZGF0YTJbeDIgKyAyXSA9IGd4X2IgLyB3ZWlnaHRzO1xuICAgICAgICBkYXRhMlt4MiArIDNdID0gZ3hfYSAvIHdlaWdodHNfYWxwaGE7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgLy9kcmF3XG4gICAgY3R4LnB1dEltYWdlRGF0YShpbWcyLCAwLCAwKTtcbiAgfVxufVxuIl19
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: ngx-image-cropper.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Generated bundle index. Do not edit.
|
|
8
|
-
*/
|
|
9
|
-
export { base64ToFile, resizeCanvas, ImageCropperComponent, ImageCropperModule } from './public-api';
|
|
10
|
-
export { CropService as ɵa } from './lib/services/crop.service';
|
|
11
|
-
export { CropperPositionService as ɵb } from './lib/services/cropper-position.service';
|
|
12
|
-
export { LoadImageService as ɵc } from './lib/services/load-image.service';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWltYWdlLWNyb3BwZXIuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibmd4LWltYWdlLWNyb3BwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQSxzRkFBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDckYsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge0Nyb3BTZXJ2aWNlIGFzIMm1YX0gZnJvbSAnLi9saWIvc2VydmljZXMvY3JvcC5zZXJ2aWNlJztcbmV4cG9ydCB7Q3JvcHBlclBvc2l0aW9uU2VydmljZSBhcyDJtWJ9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Nyb3BwZXItcG9zaXRpb24uc2VydmljZSc7XG5leHBvcnQge0xvYWRJbWFnZVNlcnZpY2UgYXMgybVjfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb2FkLWltYWdlLnNlcnZpY2UnOyJdfQ==
|
package/esm2015/public-api.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: public-api.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
export { ImageCropperComponent } from './lib/component/image-cropper.component';
|
|
7
|
-
export { ImageCropperModule } from './lib/image-cropper.module';
|
|
8
|
-
export {} from './lib/interfaces';
|
|
9
|
-
export { base64ToFile } from './lib/utils/blob.utils';
|
|
10
|
-
export { resizeCanvas } from './lib/utils/resize.utils';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvbWF3aS9Qcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9wcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9zcmMvIiwic291cmNlcyI6WyJwdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0NBQWMseUNBQXlDLENBQUM7QUFDeEQsbUNBQWMsNEJBQTRCLENBQUM7QUFDM0MsZUFBYyxrQkFBa0IsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ltYWdlLWNyb3BwZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgYmFzZTY0VG9GaWxlIH0gZnJvbSAnLi9saWIvdXRpbHMvYmxvYi51dGlscyc7XG5leHBvcnQgeyByZXNpemVDYW52YXMgfSBmcm9tICcuL2xpYi91dGlscy9yZXNpemUudXRpbHMnO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-image-cropper.js","sources":["../../../projects/ngx-image-cropper/src/lib/interfaces/cropper.settings.ts","../../../projects/ngx-image-cropper/src/lib/interfaces/move-start.interface.ts","../../../projects/ngx-image-cropper/src/lib/utils/resize.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/crop.service.ts","../../../projects/ngx-image-cropper/src/lib/services/cropper-position.service.ts","../../../projects/ngx-image-cropper/src/lib/utils/exif.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/load-image.service.ts","../../../projects/ngx-image-cropper/src/lib/utils/keyboard.utils.ts","../../../projects/ngx-image-cropper/src/lib/component/image-cropper.component.ts","../../../projects/ngx-image-cropper/src/lib/image-cropper.module.ts","../../../projects/ngx-image-cropper/src/lib/utils/blob.utils.ts"],"sourcesContent":["import { CropperOptions, OutputFormat } from './cropper-options.interface';\nimport { ImageTransform } from './image-transform.interface';\nimport { SimpleChanges } from '@angular/core';\n\nexport class CropperSettings {\n\n // From options\n format: OutputFormat = 'png';\n maintainAspectRatio = true;\n transform: ImageTransform = {};\n aspectRatio = 1;\n resizeToWidth = 0;\n resizeToHeight = 0;\n cropperMinWidth = 0;\n cropperMinHeight = 0;\n cropperMaxHeight = 0;\n cropperMaxWidth = 0;\n cropperStaticWidth = 0;\n cropperStaticHeight = 0;\n canvasRotation = 0;\n initialStepSize = 3;\n roundCropper = false;\n onlyScaleDown = false;\n imageQuality = 92;\n autoCrop = true;\n backgroundColor: string = undefined;\n containWithinAspectRatio = false;\n hideResizeSquares = false;\n alignImage: 'left' | 'center' = 'center';\n\n // Internal\n cropperScaledMinWidth = 20;\n cropperScaledMinHeight = 20;\n cropperScaledMaxWidth = 20;\n cropperScaledMaxHeight = 20;\n stepSize = this.initialStepSize;\n\n setOptions(options: Partial<CropperOptions>): void {\n Object.keys(options)\n .filter((k) => k in this)\n .forEach((k) => this[k] = options[k]);\n this.validateOptions();\n }\n\n setOptionsFromChanges(changes: SimpleChanges): void {\n Object.keys(changes)\n .filter((k) => k in this)\n .forEach((k) => this[k] = changes[k].currentValue);\n this.validateOptions();\n }\n\n private validateOptions(): void {\n if (this.maintainAspectRatio && !this.aspectRatio) {\n throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\n }\n }\n}\n","export interface MoveStart {\n active: boolean;\n type: MoveTypes | null;\n position: string | null;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clientX: number;\n clientY: number;\n}\n\nexport enum MoveTypes {\n Move = 'move',\n Resize = 'resize',\n Pinch = 'pinch'\n}\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n const width_source = canvas.width;\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n\n const ratio_w = width_source / width;\n const ratio_h = height_source / height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const img = ctx.getImageData(0, 0, width_source, height_source);\n const img2 = ctx.createImageData(width, height);\n const data = img.data;\n const data2 = img2.data;\n\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const x2 = (i + j * width) * 4;\n const center_y = j * ratio_h;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n\n const xx_start = Math.floor(i * ratio_w);\n const yy_start = Math.floor(j * ratio_h);\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n let yy_stop = Math.ceil((j + 1) * ratio_h);\n xx_stop = Math.min(xx_stop, width_source);\n yy_stop = Math.min(yy_stop, height_source);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n const center_x = i * ratio_w;\n const w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n const w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n const pos_x = 4 * (xx + yy * width_source);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n\n\n canvas.width = width;\n canvas.height = height;\n\n //draw\n ctx.putImageData(img2, 0, 0);\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, ImageCroppedEvent, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { resizeCanvas } from '../utils/resize.utils';\n\n@Injectable({ providedIn: 'root' })\nexport class CropService {\n\n crop(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): ImageCroppedEvent | null {\n const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);\n const width = imagePosition.x2 - imagePosition.x1;\n const height = imagePosition.y2 - imagePosition.y1;\n const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\n cropCanvas.width = width;\n cropCanvas.height = height;\n\n const ctx = cropCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n if (settings.backgroundColor != null) {\n ctx.fillStyle = settings.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\n const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\n\n const transformedImage = loadedImage.transformed;\n ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);\n ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\n ctx.drawImage(transformedImage.image, -transformedImage.size.width / 2, -transformedImage.size.height / 2);\n\n const output: ImageCroppedEvent = {\n width, height,\n imagePosition,\n cropperPosition: { ...cropper }\n };\n if (settings.containWithinAspectRatio) {\n output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);\n }\n const resizeRatio = this.getResizeRatio(width, height, settings);\n if (resizeRatio !== 1) {\n output.width = Math.round(width * resizeRatio);\n output.height = settings.maintainAspectRatio\n ? Math.round(output.width / settings.aspectRatio)\n : Math.round(height * resizeRatio);\n resizeCanvas(cropCanvas, output.width, output.height);\n }\n output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\n return output;\n }\n\n private getImagePosition(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): CropperPosition {\n const sourceImageElement = sourceImage.nativeElement;\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio),\n y1: Math.round(cropper.y1 * ratio),\n x2: Math.round(cropper.x2 * ratio),\n y2: Math.round(cropper.y2 * ratio)\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n private getOffsetImagePosition(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): CropperPosition {\n const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\n const sourceImageElement = sourceImage.nativeElement;\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n let offsetX: number;\n let offsetY: number;\n\n if (canvasRotation % 2) {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.height) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.width) / 2;\n } else {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.width) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.height) / 2;\n }\n\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio) - offsetX,\n y1: Math.round(cropper.y1 * ratio) - offsetY,\n x2: Math.round(cropper.x2 * ratio) - offsetX,\n y2: Math.round(cropper.y2 * ratio) - offsetY\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n getResizeRatio(width: number, height: number, settings: CropperSettings): number {\n const ratioWidth = settings.resizeToWidth / width;\n const ratioHeight = settings.resizeToHeight / height;\n const ratios = new Array<number>();\n\n if (settings.resizeToWidth > 0) {\n ratios.push(ratioWidth);\n }\n if (settings.resizeToHeight > 0) {\n ratios.push(ratioHeight);\n }\n\n const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n\n if (result > 1 && !settings.onlyScaleDown) {\n return result;\n }\n return Math.min(result, 1);\n }\n\n getQuality(settings: CropperSettings): number {\n return Math.min(1, Math.max(0, settings.imageQuality / 100));\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, Dimensions, MoveStart } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\n\n@Injectable({ providedIn: 'root' })\nexport class CropperPositionService {\n\n resetCropperPosition(sourceImage: ElementRef, cropperPosition: CropperPosition, settings: CropperSettings): void {\n if (!sourceImage?.nativeElement) {\n return;\n }\n const sourceImageElement = sourceImage.nativeElement;\n if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = sourceImageElement.offsetWidth > settings.cropperStaticWidth ?\n settings.cropperStaticWidth : sourceImageElement.offsetWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = sourceImageElement.offsetHeight > settings.cropperStaticHeight ?\n settings.cropperStaticHeight : sourceImageElement.offsetHeight;\n } else {\n const cropperWidth = Math.min(settings.cropperScaledMaxWidth, sourceImageElement.offsetWidth);\n const cropperHeight = Math.min(settings.cropperScaledMaxHeight, sourceImageElement.offsetHeight);\n if (!settings.maintainAspectRatio) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n } else if (sourceImageElement.offsetWidth / settings.aspectRatio < sourceImageElement.offsetHeight) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\n cropperPosition.y1 = (sourceImageElement.offsetHeight - cropperHeightWithAspectRatio) / 2;\n cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\n } else {\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\n cropperPosition.x1 = (sourceImageElement.offsetWidth - cropperWidthWithAspectRatio) / 2;\n cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\n }\n }\n }\n\n move(event: any, moveStart: MoveStart, cropperPosition: CropperPosition) {\n const diffX = this.getClientX(event) - moveStart.clientX;\n const diffY = this.getClientY(event) - moveStart.clientY;\n\n cropperPosition.x1 = moveStart.x1 + diffX;\n cropperPosition.y1 = moveStart.y1 + diffY;\n cropperPosition.x2 = moveStart.x2 + diffX;\n cropperPosition.y2 = moveStart.y2 + diffY;\n }\n\n resize(event: any, moveStart: MoveStart, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n const moveX = this.getClientX(event) - moveStart.clientX;\n const moveY = this.getClientY(event) - moveStart.clientY;\n switch (moveStart.position) {\n case 'left':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n break;\n case 'topleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'top':\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'topright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'right':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n break;\n case 'bottomright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottom':\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottomleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'center':\n const scale = event.scale;\n const newWidth = Math.min(\n Math.max(settings.cropperScaledMinWidth, (Math.abs(moveStart.x2 - moveStart.x1)) * scale),\n settings.cropperScaledMaxWidth);\n const newHeight = Math.min(\n Math.max(settings.cropperScaledMinHeight, (Math.abs(moveStart.y2 - moveStart.y1)) * scale),\n settings.cropperScaledMaxHeight);\n cropperPosition.x1 = moveStart.clientX - newWidth / 2;\n cropperPosition.x2 = moveStart.clientX + newWidth / 2;\n cropperPosition.y1 = moveStart.clientY - newHeight / 2;\n cropperPosition.y2 = moveStart.clientY + newHeight / 2;\n if (cropperPosition.x1 < 0) {\n cropperPosition.x2 -= cropperPosition.x1;\n cropperPosition.x1 = 0;\n } else if (cropperPosition.x2 > maxSize.width) {\n cropperPosition.x1 -= (cropperPosition.x2 - maxSize.width);\n cropperPosition.x2 = maxSize.width;\n }\n if (cropperPosition.y1 < 0) {\n cropperPosition.y2 -= cropperPosition.y1;\n cropperPosition.y1 = 0;\n } else if (cropperPosition.y2 > maxSize.height) {\n cropperPosition.y1 -= (cropperPosition.y2 - maxSize.height);\n cropperPosition.y2 = maxSize.height;\n }\n break;\n }\n\n if (settings.maintainAspectRatio) {\n this.checkAspectRatio(moveStart.position, cropperPosition, maxSize, settings);\n }\n }\n\n checkAspectRatio(position: string, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n let overflowX = 0;\n let overflowY = 0;\n\n switch (position) {\n case 'top':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'bottom':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : (overflowX / settings.aspectRatio);\n }\n break;\n case 'topleft':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'topright':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'right':\n case 'bottomright':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'left':\n case 'bottomleft':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'center':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\n const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\n const overflowY2 = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX1 > 0 || overflowX2 > 0 || overflowY1 > 0 || overflowY2 > 0) {\n cropperPosition.x1 += (overflowY1 * settings.aspectRatio) > overflowX1 ? (overflowY1 * settings.aspectRatio) : overflowX1;\n cropperPosition.x2 -= (overflowY2 * settings.aspectRatio) > overflowX2 ? (overflowY2 * settings.aspectRatio) : overflowX2;\n cropperPosition.y1 += (overflowY2 * settings.aspectRatio) > overflowX2 ? overflowY2 : overflowX2 / settings.aspectRatio;\n cropperPosition.y2 -= (overflowY1 * settings.aspectRatio) > overflowX1 ? overflowY1 : overflowX1 / settings.aspectRatio;\n }\n break;\n }\n }\n\n getClientX(event: any): number {\n return event.touches?.[0].clientX || event.clientX || 0;\n }\n\n getClientY(event: any): number {\n return event.touches?.[0].clientY || event.clientY || 0;\n }\n}\n","import { ExifTransform } from '../interfaces/exif-transform.interface';\n\n// Black 2x1 JPEG, with the following meta information set:\n// - EXIF Orientation: 6 (Rotated 90° CCW)\n// Source: https://github.com/blueimp/JavaScript-Load-Image\nconst testAutoOrientationImageURL =\n 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\n 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\n 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\n 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\n 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\n 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n\nexport function supportsAutomaticRotation(): Promise<boolean> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n // Check if browser supports automatic image orientation:\n const supported = img.width === 1 && img.height === 2;\n resolve(supported);\n };\n img.src = testAutoOrientationImageURL;\n });\n}\n\nexport function getTransformationsFromExifData(exifRotationOrBase64Image: number | string): ExifTransform {\n if (typeof exifRotationOrBase64Image === 'string') {\n exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image);\n }\n switch (exifRotationOrBase64Image) {\n case 2:\n return { rotate: 0, flip: true };\n case 3:\n return { rotate: 2, flip: false };\n case 4:\n return { rotate: 2, flip: true };\n case 5:\n return { rotate: 1, flip: true };\n case 6:\n return { rotate: 1, flip: false };\n case 7:\n return { rotate: 3, flip: true };\n case 8:\n return { rotate: 3, flip: false };\n default:\n return { rotate: 0, flip: false };\n }\n}\n\nfunction getExifRotation(imageBase64: string): number {\n const view = new DataView(base64ToArrayBuffer(imageBase64));\n if (view.getUint16(0, false) !== 0xFFD8) {\n return -2;\n }\n const length = view.byteLength;\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) return -1;\n const marker = view.getUint16(offset, false);\n offset += 2;\n if (marker == 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return -1;\n }\n\n const little = view.getUint16(offset += 6, false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) == 0x0112) {\n return view.getUint16(offset + (i * 12) + 8, little);\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break;\n } else {\n offset += view.getUint16(offset, false);\n }\n }\n return -1;\n}\n\nfunction base64ToArrayBuffer(imageBase64: string) {\n imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n const binaryString = atob(imageBase64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n","import { Injectable } from '@angular/core';\nimport { Dimensions, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\nimport { getTransformationsFromExifData, supportsAutomaticRotation } from '../utils/exif.utils';\n\ninterface LoadImageBase64 {\n originalImage: HTMLImageElement;\n originalBase64: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class LoadImageService {\n\n private autoRotateSupported: Promise<boolean> = supportsAutomaticRotation();\n\n loadImageFile(file: File, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = (event: any) => {\n this.loadImage(event.target.result, file.type, cropperSettings)\n .then(resolve)\n .catch(reject);\n };\n fileReader.readAsDataURL(file);\n });\n }\n\n private loadImage(imageBase64: string, imageType: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n if (!this.isValidImageType(imageType)) {\n return Promise.reject(new Error('Invalid image type'));\n }\n return this.loadBase64Image(imageBase64, cropperSettings);\n }\n\n private isValidImageType(type: string): boolean {\n return /image\\/(png|jpg|jpeg|bmp|gif|tiff|webp)/.test(type);\n }\n\n loadImageFromURL(url: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onerror = () => reject;\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n this.loadBase64Image(canvas.toDataURL(), cropperSettings).then(resolve);\n };\n img.crossOrigin = 'anonymous';\n img.src = url;\n });\n }\n\n loadBase64Image(imageBase64: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise<LoadImageBase64>((resolve, reject) => {\n const originalImage = new Image();\n originalImage.onload = () => resolve({\n originalImage,\n originalBase64: imageBase64\n });\n originalImage.onerror = reject;\n originalImage.src = imageBase64;\n }).then((res: LoadImageBase64) => this.transformImageBase64(res, cropperSettings));\n }\n\n private async transformImageBase64(res: LoadImageBase64, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const autoRotate = await this.autoRotateSupported;\n const exifTransform = await getTransformationsFromExifData(autoRotate ? -1 : res.originalBase64);\n if (!res.originalImage || !res.originalImage.complete) {\n return Promise.reject(new Error('No image loaded'));\n }\n const loadedImage = {\n original: {\n base64: res.originalBase64,\n image: res.originalImage,\n size: {\n width: res.originalImage.naturalWidth,\n height: res.originalImage.naturalHeight\n }\n },\n exifTransform\n };\n return this.transformLoadedImage(loadedImage, cropperSettings);\n }\n\n async transformLoadedImage(loadedImage: Partial<LoadedImage>, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform.rotate;\n const originalSize = {\n width: loadedImage.original.image.naturalWidth,\n height: loadedImage.original.image.naturalHeight\n };\n if (canvasRotation === 0 && !loadedImage.exifTransform.flip && !cropperSettings.containWithinAspectRatio) {\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n transformed: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n\n const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform, cropperSettings);\n const canvas = document.createElement('canvas');\n canvas.width = transformedSize.width;\n canvas.height = transformedSize.height;\n const ctx = canvas.getContext('2d');\n ctx.setTransform(\n loadedImage.exifTransform.flip ? -1 : 1,\n 0,\n 0,\n 1,\n canvas.width / 2,\n canvas.height / 2\n );\n ctx.rotate(Math.PI * (canvasRotation / 2));\n ctx.drawImage(\n loadedImage.original.image,\n -originalSize.width / 2,\n -originalSize.height / 2\n );\n const transformedBase64 = canvas.toDataURL();\n const transformedImage = await this.loadImageFromBase64(transformedBase64);\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n transformed: {\n base64: transformedBase64,\n image: transformedImage,\n size: {\n width: transformedImage.width,\n height: transformedImage.height\n }\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n\n private loadImageFromBase64(imageBase64: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>(((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = reject;\n image.src = imageBase64;\n }));\n }\n\n private getTransformedSize(\n originalSize: { width: number, height: number },\n exifTransform: ExifTransform,\n cropperSettings: CropperSettings\n ): Dimensions {\n const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\n if (cropperSettings.containWithinAspectRatio) {\n if (canvasRotation % 2) {\n const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.height / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.height, minWidthToContain),\n height: Math.max(originalSize.width, minHeightToContain)\n };\n } else {\n const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.width / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.width, minWidthToContain),\n height: Math.max(originalSize.height, minHeightToContain)\n };\n }\n }\n\n if (canvasRotation % 2) {\n return {\n height: originalSize.width,\n width: originalSize.height\n };\n }\n return {\n width: originalSize.width,\n height: originalSize.height\n };\n }\n}\n","export function getPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'top';\n case 'ArrowRight':\n return 'right';\n case 'ArrowDown':\n return 'bottom';\n case 'ArrowLeft':\n default:\n return 'left';\n }\n}\n\nexport function getInvertedPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'bottom';\n case 'ArrowRight':\n return 'left';\n case 'ArrowDown':\n return 'top';\n case 'ArrowLeft':\n default:\n return 'right';\n }\n}\n\nexport function getEventForKey(key: string, stepSize: number): any {\n switch (key) {\n case 'ArrowUp':\n return {clientX: 0, clientY: stepSize * -1};\n case 'ArrowRight':\n return {clientX: stepSize, clientY: 0};\n case 'ArrowDown':\n return {clientX: 0, clientY: stepSize};\n case 'ArrowLeft':\n default:\n return {clientX: stepSize * -1, clientY: 0};\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n isDevMode,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport { CropperPosition, Dimensions, ImageCroppedEvent, ImageTransform, LoadedImage, MoveStart } from '../interfaces';\nimport { OutputFormat } from '../interfaces/cropper-options.interface';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { MoveTypes } from '../interfaces/move-start.interface';\nimport { CropService } from '../services/crop.service';\nimport { CropperPositionService } from '../services/cropper-position.service';\nimport { LoadImageService } from '../services/load-image.service';\nimport { HammerStatic } from '../utils/hammer.utils';\nimport { getEventForKey, getInvertedPositionForKey, getPositionForKey } from '../utils/keyboard.utils';\n\n@Component({\n selector: 'image-cropper',\n templateUrl: './image-cropper.component.html',\n styleUrls: ['./image-cropper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageCropperComponent implements OnChanges, OnInit {\n private Hammer: HammerStatic = window?.['Hammer'] || null;\n private settings = new CropperSettings();\n private setImageMaxSizeRetries = 0;\n private moveStart: MoveStart;\n private loadedImage: LoadedImage;\n\n safeImgDataUrl: SafeUrl | string;\n safeTransformStyle: SafeStyle | string;\n marginLeft: SafeStyle | string = '0px';\n maxSize: Dimensions;\n moveTypes = MoveTypes;\n imageVisible = false;\n\n @ViewChild('wrapper', { static: true }) wrapper: ElementRef<HTMLDivElement>;\n @ViewChild('sourceImage', { static: false }) sourceImage: ElementRef<HTMLDivElement>;\n\n @Input() imageChangedEvent: any;\n @Input() imageURL: string;\n @Input() imageBase64: string;\n @Input() imageFile: File;\n\n @Input() format: OutputFormat = this.settings.format;\n @Input() transform: ImageTransform = {};\n @Input() maintainAspectRatio = this.settings.maintainAspectRatio;\n @Input() aspectRatio = this.settings.aspectRatio;\n @Input() resizeToWidth = this.settings.resizeToWidth;\n @Input() resizeToHeight = this.settings.resizeToHeight;\n @Input() cropperMinWidth = this.settings.cropperMinWidth;\n @Input() cropperMinHeight = this.settings.cropperMinHeight;\n @Input() cropperMaxHeight = this.settings.cropperMaxHeight;\n @Input() cropperMaxWidth = this.settings.cropperMaxWidth;\n @Input() cropperStaticWidth = this.settings.cropperStaticWidth;\n @Input() cropperStaticHeight = this.settings.cropperStaticHeight;\n @Input() canvasRotation = this.settings.canvasRotation;\n @Input() initialStepSize = this.settings.initialStepSize;\n @Input() roundCropper = this.settings.roundCropper;\n @Input() onlyScaleDown = this.settings.onlyScaleDown;\n @Input() imageQuality = this.settings.imageQuality;\n @Input() autoCrop = this.settings.autoCrop;\n @Input() backgroundColor = this.settings.backgroundColor;\n @Input() containWithinAspectRatio = this.settings.containWithinAspectRatio;\n @Input() hideResizeSquares = this.settings.hideResizeSquares;\n @Input() cropper: CropperPosition = {\n x1: -100,\n y1: -100,\n x2: 10000,\n y2: 10000\n };\n @HostBinding('style.text-align')\n @Input() alignImage: 'left' | 'center' = this.settings.alignImage;\n @HostBinding('class.disabled')\n @Input() disabled = false;\n\n @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\n @Output() startCropImage = new EventEmitter<void>();\n @Output() imageLoaded = new EventEmitter<LoadedImage>();\n @Output() cropperReady = new EventEmitter<Dimensions>();\n @Output() loadImageFailed = new EventEmitter<void>();\n\n constructor(\n private cropService: CropService,\n private cropperPositionService: CropperPositionService,\n private loadImageService: LoadImageService,\n private sanitizer: DomSanitizer,\n private cd: ChangeDetectorRef\n ) {\n this.reset();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.onChangesUpdateSettings(changes);\n this.onChangesInputImage(changes);\n\n if (this.loadedImage?.original.image.complete && (changes.containWithinAspectRatio || changes.canvasRotation)) {\n this.loadImageService\n .transformLoadedImage(this.loadedImage, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n if (changes.cropper || changes.maintainAspectRatio || changes.aspectRatio) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n if (this.maintainAspectRatio && (changes.maintainAspectRatio || changes.aspectRatio)) {\n this.resetCropperPosition();\n } else if (changes.cropper) {\n this.checkCropperPosition(false);\n this.doAutoCrop();\n }\n this.cd.markForCheck();\n }\n if (changes.transform) {\n this.transform = this.transform || {};\n this.setCssTransform();\n this.doAutoCrop();\n }\n }\n\n private onChangesUpdateSettings(changes: SimpleChanges) {\n this.settings.setOptionsFromChanges(changes);\n\n if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\n this.settings.setOptions({\n hideResizeSquares: true,\n cropperMinWidth: this.settings.cropperStaticWidth,\n cropperMinHeight: this.settings.cropperStaticHeight,\n cropperMaxHeight: this.settings.cropperStaticHeight,\n cropperMaxWidth: this.settings.cropperStaticWidth,\n maintainAspectRatio: false\n });\n }\n }\n\n private onChangesInputImage(changes: SimpleChanges): void {\n if (changes.imageChangedEvent || changes.imageURL || changes.imageBase64 || changes.imageFile) {\n this.reset();\n }\n if (changes.imageChangedEvent && this.isValidImageChangedEvent()) {\n this.loadImageFile(this.imageChangedEvent.target.files[0]);\n }\n if (changes.imageURL && this.imageURL) {\n this.loadImageFromURL(this.imageURL);\n }\n if (changes.imageBase64 && this.imageBase64) {\n this.loadBase64Image(this.imageBase64);\n }\n if (changes.imageFile && this.imageFile) {\n this.loadImageFile(this.imageFile);\n }\n }\n\n private isValidImageChangedEvent(): boolean {\n return this.imageChangedEvent?.target?.files?.length > 0;\n }\n\n private setCssTransform() {\n this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle(\n 'scaleX(' + (this.transform.scale || 1) * (this.transform.flipH ? -1 : 1) + ')' +\n 'scaleY(' + (this.transform.scale || 1) * (this.transform.flipV ? -1 : 1) + ')' +\n 'rotate(' + (this.transform.rotate || 0) + 'deg)'\n );\n }\n\n ngOnInit(): void {\n this.settings.stepSize = this.initialStepSize;\n this.activatePinchGesture();\n }\n\n private reset(): void {\n this.imageVisible = false;\n this.loadedImage = null;\n this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg'\n + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\n + 'AAarVyFEAAAAASUVORK5CYII=';\n this.moveStart = {\n active: false,\n type: null,\n position: null,\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n clientX: 0,\n clientY: 0\n };\n this.maxSize = {\n width: 0,\n height: 0\n };\n this.cropper.x1 = -100;\n this.cropper.y1 = -100;\n this.cropper.x2 = 10000;\n this.cropper.y2 = 10000;\n }\n\n private loadImageFile(file: File): void {\n this.loadImageService\n .loadImageFile(file, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadBase64Image(imageBase64: string): void {\n this.loadImageService\n .loadBase64Image(imageBase64, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadImageFromURL(url: string): void {\n this.loadImageService\n .loadImageFromURL(url, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private setLoadedImage(loadedImage: LoadedImage): void {\n this.loadedImage = loadedImage;\n this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.base64);\n this.cd.markForCheck();\n }\n\n private loadImageError(error: any): void {\n console.error(error);\n this.loadImageFailed.emit();\n }\n\n imageLoadedInView(): void {\n if (this.loadedImage != null) {\n this.imageLoaded.emit(this.loadedImage);\n this.setImageMaxSizeRetries = 0;\n setTimeout(() => this.checkImageMaxSizeRecursively());\n }\n }\n\n private checkImageMaxSizeRecursively(): void {\n if (this.setImageMaxSizeRetries > 40) {\n this.loadImageFailed.emit();\n } else if (this.sourceImageLoaded()) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n this.resetCropperPosition();\n this.cropperReady.emit({ ...this.maxSize });\n this.cd.markForCheck();\n } else {\n this.setImageMaxSizeRetries++;\n setTimeout(() => this.checkImageMaxSizeRecursively(), 50);\n }\n }\n\n private sourceImageLoaded(): boolean {\n return this.sourceImage?.nativeElement?.offsetWidth > 0;\n }\n\n @HostListener('window:resize')\n onResize(): void {\n if (!this.loadedImage) {\n return;\n }\n this.resizeCropperPosition();\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n }\n\n private activatePinchGesture() {\n if (this.Hammer) {\n const hammer = new this.Hammer(this.wrapper.nativeElement);\n hammer.get('pinch').set({ enable: true });\n hammer.on('pinchmove', this.onPinch.bind(this));\n hammer.on('pinchend', this.pinchStop.bind(this));\n hammer.on('pinchstart', this.startPinch.bind(this));\n } else if (isDevMode()) {\n console.warn('[NgxImageCropper] Could not find HammerJS - Pinch Gesture won\\'t work');\n }\n }\n\n private resizeCropperPosition(): void {\n const sourceImageElement = this.sourceImage.nativeElement;\n if (this.maxSize.width !== sourceImageElement.offsetWidth || this.maxSize.height !== sourceImageElement.offsetHeight) {\n this.cropper.x1 = this.cropper.x1 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.x2 = this.cropper.x2 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.y1 = this.cropper.y1 * sourceImageElement.offsetHeight / this.maxSize.height;\n this.cropper.y2 = this.cropper.y2 * sourceImageElement.offsetHeight / this.maxSize.height;\n }\n }\n\n resetCropperPosition(): void {\n this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings);\n this.doAutoCrop();\n this.imageVisible = true;\n }\n\n keyboardAccess(event: KeyboardEvent) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n\n private changeKeyboardStepSize(event: KeyboardEvent): void {\n const key = +event.key;\n if (key >= 1 && key <= 9) {\n this.settings.stepSize = key;\n }\n }\n\n private keyboardMoveCropper(event) {\n const keyboardWhiteList: string[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n if (!(keyboardWhiteList.includes(event.key))) {\n return;\n }\n const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n const moveEvent = getEventForKey(event.key, this.settings.stepSize);\n event.preventDefault();\n event.stopPropagation();\n this.startMove({ clientX: 0, clientY: 0 }, moveType, position);\n this.moveImg(moveEvent);\n this.moveStop();\n }\n\n startMove(event: any, moveType: MoveTypes, position: string | null = null): void {\n if (this.moveStart?.active && this.moveStart?.type === MoveTypes.Pinch) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: moveType,\n position,\n clientX: this.cropperPositionService.getClientX(event),\n clientY: this.cropperPositionService.getClientY(event),\n ...this.cropper\n };\n }\n\n startPinch(event: any) {\n if (!this.safeImgDataUrl) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: MoveTypes.Pinch,\n position: 'center',\n clientX: this.cropper.x1 + (this.cropper.x2 - this.cropper.x1) / 2,\n clientY: this.cropper.y1 + (this.cropper.y2 - this.cropper.y1) / 2,\n ...this.cropper\n };\n }\n\n @HostListener('document:mousemove', ['$event'])\n @HostListener('document:touchmove', ['$event'])\n moveImg(event: any): void {\n if (this.moveStart.active) {\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (this.moveStart.type === MoveTypes.Move) {\n this.cropperPositionService.move(event, this.moveStart, this.cropper);\n this.checkCropperPosition(true);\n } else if (this.moveStart.type === MoveTypes.Resize) {\n if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\n this.cropperPositionService.resize(event, this.moveStart, this.cropper, this.maxSize, this.settings);\n }\n this.checkCropperPosition(false);\n }\n this.cd.detectChanges();\n }\n }\n\n onPinch(event: any) {\n if (this.moveStart.active) {\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (this.moveStart.type === MoveTypes.Pinch) {\n this.cropperPositionService.resize(event, this.moveStart, this.cropper, this.maxSize, this.settings);\n this.checkCropperPosition(false);\n }\n this.cd.detectChanges();\n }\n }\n\n private setMaxSize(): void {\n if (this.sourceImage) {\n const sourceImageElement = this.sourceImage.nativeElement;\n this.maxSize.width = sourceImageElement.offsetWidth;\n this.maxSize.height = sourceImageElement.offsetHeight;\n this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n }\n }\n\n private setCropperScaledMinSize(): void {\n if (this.loadedImage?.transformed?.image) {\n this.setCropperScaledMinWidth();\n this.setCropperScaledMinHeight();\n } else {\n this.settings.cropperScaledMinWidth = 20;\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMinWidth(): void {\n this.settings.cropperScaledMinWidth = this.cropperMinWidth > 0\n ? Math.max(20, this.cropperMinWidth / this.loadedImage.transformed.image.width * this.maxSize.width)\n : 20;\n }\n\n private setCropperScaledMinHeight(): void {\n if (this.maintainAspectRatio) {\n this.settings.cropperScaledMinHeight = Math.max(20, this.settings.cropperScaledMinWidth / this.aspectRatio);\n } else if (this.cropperMinHeight > 0) {\n this.settings.cropperScaledMinHeight = Math.max(\n 20,\n this.cropperMinHeight / this.loadedImage.transformed.image.height * this.maxSize.height\n );\n } else {\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMaxSize(): void {\n if (this.loadedImage?.transformed?.image) {\n const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;\n this.settings.cropperScaledMaxWidth = this.cropperMaxWidth > 20 ? this.cropperMaxWidth / ratio : this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.cropperMaxHeight > 20 ? this.cropperMaxHeight / ratio : this.maxSize.height;\n if (this.maintainAspectRatio) {\n if (this.settings.cropperScaledMaxWidth > this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxWidth = this.settings.cropperScaledMaxHeight * this.aspectRatio;\n } else if (this.settings.cropperScaledMaxWidth < this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxHeight = this.settings.cropperScaledMaxWidth / this.aspectRatio;\n }\n }\n } else {\n this.settings.cropperScaledMaxWidth = this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.maxSize.height;\n }\n }\n\n private checkCropperPosition(maintainSize = false): void {\n if (this.cropper.x1 < 0) {\n this.cropper.x2 -= maintainSize ? this.cropper.x1 : 0;\n this.cropper.x1 = 0;\n }\n if (this.cropper.y1 < 0) {\n this.cropper.y2 -= maintainSize ? this.cropper.y1 : 0;\n this.cropper.y1 = 0;\n }\n if (this.cropper.x2 > this.maxSize.width) {\n this.cropper.x1 -= maintainSize ? (this.cropper.x2 - this.maxSize.width) : 0;\n this.cropper.x2 = this.maxSize.width;\n }\n if (this.cropper.y2 > this.maxSize.height) {\n this.cropper.y1 -= maintainSize ? (this.cropper.y2 - this.maxSize.height) : 0;\n this.cropper.y2 = this.maxSize.height;\n }\n }\n\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n moveStop(): void {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n\n pinchStop(): void {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n\n private doAutoCrop(): void {\n if (this.autoCrop) {\n this.crop();\n }\n }\n\n crop(): ImageCroppedEvent | null {\n if (this.loadedImage?.transformed?.image != null) {\n this.startCropImage.emit();\n const output = this.cropService.crop(this.sourceImage, this.loadedImage, this.cropper, this.settings);\n if (output != null) {\n this.imageCropped.emit(output);\n }\n return output;\n }\n return null;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ImageCropperComponent } from './component/image-cropper.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n ImageCropperComponent\n ],\n exports: [\n ImageCropperComponent\n ]\n})\nexport class ImageCropperModule {\n}\n","export function base64ToFile(base64Image: string): Blob {\n const split = base64Image.split(',');\n const type = split[0].replace('data:', '').replace(';base64', '');\n const byteString = atob(split[1]);\n const ab = new ArrayBuffer(byteString.length);\n const ia = new Uint8Array(ab);\n for (let i = 0; i < byteString.length; i += 1) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ab], {type});\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"exports":[{"export":[{"name":"CropperOptions","as":"CropperOptions"},{"name":"OutputFormat","as":"OutputFormat"}],"from":"./lib/cropper-options.interface"},{"export":[{"name":"CropperPosition","as":"CropperPosition"}],"from":"./lib/cropper-position.interface"},{"export":[{"name":"Dimensions","as":"Dimensions"}],"from":"./lib/dimensions.interface"},{"export":[{"name":"ImageCroppedEvent","as":"ImageCroppedEvent"}],"from":"./lib/image-cropped-event.interface"},{"export":[{"name":"MoveStart","as":"MoveStart"}],"from":"./lib/move-start.interface"},{"export":[{"name":"ImageTransform","as":"ImageTransform"}],"from":"./lib/image-transform.interface"},{"export":[{"name":"LoadedImage","as":"LoadedImage"}],"from":"./lib/loaded-image.interface"}],"metadata":{"ImageCropperComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":27,"character":1},"arguments":[{"selector":"image-cropper","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":31,"character":19},"member":"OnPush"},"template":"<div [style.background]=\"imageVisible && backgroundColor\"\n #wrapper\n>\n <img\n #sourceImage\n class=\"ngx-ic-source-image\"\n *ngIf=\"safeImgDataUrl\"\n [src]=\"safeImgDataUrl\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n [style.transform]=\"safeTransformStyle\"\n (load)=\"imageLoadedInView()\"\n />\n <div\n class=\"ngx-ic-overlay\"\n [style.width.px]=\"maxSize.width\"\n [style.height.px]=\"maxSize.height\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n ></div>\n <div class=\"ngx-ic-cropper\"\n *ngIf=\"imageVisible\"\n [class.rounded]=\"roundCropper\"\n [style.top.px]=\"cropper.y1\"\n [style.left.px]=\"cropper.x1\"\n [style.width.px]=\"cropper.x2 - cropper.x1\"\n [style.height.px]=\"cropper.y2 - cropper.y1\"\n [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n (keydown)=\"keyboardAccess($event)\"\n tabindex=\"0\"\n >\n <div\n (mousedown)=\"startMove($event, moveTypes.Move)\"\n (touchstart)=\"startMove($event, moveTypes.Move)\"\n class=\"ngx-ic-move\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"ngx-ic-resize ngx-ic-topleft\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-top\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-topright\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-right\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomright\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottom\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-bottomleft\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize ngx-ic-left\">\n <span class=\"ngx-ic-square\"></span>\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-top\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-right\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"ngx-ic-resize-bar ngx-ic-left\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\">\n </span>\n </ng-container>\n </div>\n</div>\n","styles":[":host{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}:host,:host>div{position:relative;width:100%}:host>div img.ngx-ic-source-image{max-height:100%;max-width:100%;transform-origin:center}:host .ngx-ic-overlay{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}:host .ngx-ic-cropper{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{border:1px dashed;bottom:0;color:inherit;content:\"\";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{cursor:nwse-resize;left:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{cursor:ns-resize;left:calc(50% - 12px);top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{cursor:nesw-resize;right:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;cursor:nwse-resize;right:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;cursor:nesw-resize;left:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}:host .ngx-ic-cropper.ngx-ic-rounded{outline-color:transparent}:host .ngx-ic-cropper.ngx-ic-rounded:after{border-radius:100%;box-shadow:0 0 0 100vw hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){:host .ngx-ic-cropper.ngx-ic-rounded:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}:host .ngx-ic-cropper.ngx-ic-rounded .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-move,:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar{display:none}"]}]}],"members":{"wrapper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":47,"character":3},"arguments":["wrapper",{"static":true}]}]}],"sourceImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":48,"character":3},"arguments":["sourceImage",{"static":false}]}]}],"imageChangedEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"imageURL":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"imageBase64":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"imageFile":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"format":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"transform":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"maintainAspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":3}}]}],"aspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":58,"character":3}}]}],"resizeToWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}}]}],"resizeToHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"cropperMinWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"cropperMinHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"cropperMaxHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"cropperMaxWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3}}]}],"cropperStaticWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"cropperStaticHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"canvasRotation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3}}]}],"initialStepSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"roundCropper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"onlyScaleDown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"imageQuality":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"autoCrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"backgroundColor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"containWithinAspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"hideResizeSquares":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"cropper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"alignImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":82,"character":3},"arguments":["style.text-align"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":84,"character":3},"arguments":["class.disabled"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"imageCropped":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":3}}]}],"startCropImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":88,"character":3}}]}],"imageLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":89,"character":3}}]}],"cropperReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":90,"character":3}}]}],"loadImageFailed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":91,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":97,"character":23},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":98,"character":16}]}],"ngOnChanges":[{"__symbolic":"method"}],"onChangesUpdateSettings":[{"__symbolic":"method"}],"onChangesInputImage":[{"__symbolic":"method"}],"isValidImageChangedEvent":[{"__symbolic":"method"}],"setCssTransform":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"loadImageFile":[{"__symbolic":"method"}],"loadBase64Image":[{"__symbolic":"method"}],"loadImageFromURL":[{"__symbolic":"method"}],"setLoadedImage":[{"__symbolic":"method"}],"loadImageError":[{"__symbolic":"method"}],"imageLoadedInView":[{"__symbolic":"method"}],"checkImageMaxSizeRecursively":[{"__symbolic":"method"}],"sourceImageLoaded":[{"__symbolic":"method"}],"onResize":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":269,"character":3},"arguments":["window:resize"]}]}],"activatePinchGesture":[{"__symbolic":"method"}],"resizeCropperPosition":[{"__symbolic":"method"}],"resetCropperPosition":[{"__symbolic":"method"}],"keyboardAccess":[{"__symbolic":"method"}],"changeKeyboardStepSize":[{"__symbolic":"method"}],"keyboardMoveCropper":[{"__symbolic":"method"}],"startMove":[{"__symbolic":"method"}],"startPinch":[{"__symbolic":"method"}],"moveImg":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":369,"character":3},"arguments":["document:mousemove",["$event"]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":370,"character":3},"arguments":["document:touchmove",["$event"]]}]}],"onPinch":[{"__symbolic":"method"}],"setMaxSize":[{"__symbolic":"method"}],"setCropperScaledMinSize":[{"__symbolic":"method"}],"setCropperScaledMinWidth":[{"__symbolic":"method"}],"setCropperScaledMinHeight":[{"__symbolic":"method"}],"setCropperScaledMaxSize":[{"__symbolic":"method"}],"checkCropperPosition":[{"__symbolic":"method"}],"moveStop":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":483,"character":3},"arguments":["document:mouseup"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":484,"character":3},"arguments":["document:touchend"]}]}],"pinchStop":[{"__symbolic":"method"}],"doAutoCrop":[{"__symbolic":"method"}],"crop":[{"__symbolic":"method"}]}},"ImageCropperModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":6,"character":4}],"declarations":[{"__symbolic":"reference","name":"ImageCropperComponent"}],"exports":[{"__symbolic":"reference","name":"ImageCropperComponent"}]}]}],"members":{}},"base64ToFile":{"__symbolic":"function"},"resizeCanvas":{"__symbolic":"function"},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"crop":[{"__symbolic":"method"}],"getImagePosition":[{"__symbolic":"method"}],"getOffsetImagePosition":[{"__symbolic":"method"}],"getResizeRatio":[{"__symbolic":"method"}],"getQuality":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"resetCropperPosition":[{"__symbolic":"method"}],"move":[{"__symbolic":"method"}],"resize":[{"__symbolic":"method"}],"checkAspectRatio":[{"__symbolic":"method"}],"getClientX":[{"__symbolic":"method"}],"getClientY":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"loadImageFile":[{"__symbolic":"method"}],"loadImage":[{"__symbolic":"method"}],"isValidImageType":[{"__symbolic":"method"}],"loadImageFromURL":[{"__symbolic":"method"}],"loadBase64Image":[{"__symbolic":"method"}],"transformImageBase64":[{"__symbolic":"method"}],"transformLoadedImage":[{"__symbolic":"method"}],"loadImageFromBase64":[{"__symbolic":"method"}],"getTransformedSize":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"ImageCropperComponent":"./lib/component/image-cropper.component","ImageCropperModule":"./lib/image-cropper.module","base64ToFile":"./lib/utils/blob.utils","resizeCanvas":"./lib/utils/resize.utils","ɵa":"./lib/services/crop.service","ɵb":"./lib/services/cropper-position.service","ɵc":"./lib/services/load-image.service"},"importAs":"ngx-image-cropper"}
|