ngx-image-cropper 4.0.0 → 6.0.0

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.
Files changed (89) hide show
  1. package/README.md +1 -0
  2. package/esm2020/lib/component/image-cropper.component.mjs +540 -0
  3. package/esm2020/lib/image-cropper.module.mjs +26 -0
  4. package/esm2020/lib/interfaces/cropper-options.interface.mjs +2 -0
  5. package/esm2020/lib/interfaces/cropper-position.interface.mjs +2 -0
  6. package/esm2020/lib/interfaces/cropper.settings.mjs +50 -0
  7. package/esm2020/lib/interfaces/dimensions.interface.mjs +2 -0
  8. package/esm2020/lib/interfaces/exif-transform.interface.mjs +2 -0
  9. package/esm2020/lib/interfaces/image-cropped-event.interface.mjs +2 -0
  10. package/esm2020/lib/interfaces/image-transform.interface.mjs +2 -0
  11. package/esm2020/lib/interfaces/index.mjs +2 -0
  12. package/esm2020/lib/interfaces/loaded-image.interface.mjs +2 -0
  13. package/esm2020/lib/interfaces/move-start.interface.mjs +7 -0
  14. package/esm2020/lib/services/crop.service.mjs +117 -0
  15. package/esm2020/lib/services/cropper-position.service.mjs +201 -0
  16. package/esm2020/lib/services/load-image.service.mjs +168 -0
  17. package/esm2020/lib/utils/blob.utils.mjs +12 -0
  18. package/esm2020/lib/utils/exif.utils.mjs +89 -0
  19. package/esm2020/lib/utils/hammer.utils.mjs +2 -0
  20. package/esm2020/lib/utils/keyboard.utils.mjs +40 -0
  21. package/esm2020/lib/utils/resize.utils.mjs +75 -0
  22. package/esm2020/ngx-image-cropper.mjs +5 -0
  23. package/esm2020/public-api.mjs +6 -0
  24. package/fesm2015/{ngx-image-cropper.js → ngx-image-cropper.mjs} +547 -1324
  25. package/fesm2015/ngx-image-cropper.mjs.map +1 -0
  26. package/fesm2020/ngx-image-cropper.mjs +1315 -0
  27. package/fesm2020/ngx-image-cropper.mjs.map +1 -0
  28. package/lib/component/image-cropper.component.d.ts +15 -12
  29. package/lib/image-cropper.module.d.ts +6 -0
  30. package/lib/interfaces/cropper.settings.d.ts +1 -1
  31. package/lib/interfaces/index.d.ts +1 -0
  32. package/lib/services/crop.service.d.ts +4 -1
  33. package/lib/services/cropper-position.service.d.ts +3 -0
  34. package/lib/services/load-image.service.d.ts +3 -0
  35. package/lib/utils/hammer.utils.d.ts +1 -1
  36. package/ngx-image-cropper.d.ts +1 -3
  37. package/package.json +25 -15
  38. package/bundles/ngx-image-cropper.umd.js +0 -2614
  39. package/bundles/ngx-image-cropper.umd.js.map +0 -1
  40. package/bundles/ngx-image-cropper.umd.min.js +0 -16
  41. package/bundles/ngx-image-cropper.umd.min.js.map +0 -1
  42. package/esm2015/lib/component/image-cropper.component.js +0 -825
  43. package/esm2015/lib/image-cropper.module.js +0 -24
  44. package/esm2015/lib/interfaces/cropper-options.interface.js +0 -56
  45. package/esm2015/lib/interfaces/cropper-position.interface.js +0 -20
  46. package/esm2015/lib/interfaces/cropper.settings.js +0 -140
  47. package/esm2015/lib/interfaces/dimensions.interface.js +0 -16
  48. package/esm2015/lib/interfaces/exif-transform.interface.js +0 -16
  49. package/esm2015/lib/interfaces/image-cropped-event.interface.js +0 -24
  50. package/esm2015/lib/interfaces/image-transform.interface.js +0 -20
  51. package/esm2015/lib/interfaces/index.js +0 -6
  52. package/esm2015/lib/interfaces/loaded-image.interface.js +0 -18
  53. package/esm2015/lib/interfaces/move-start.interface.js +0 -37
  54. package/esm2015/lib/services/crop.service.js +0 -176
  55. package/esm2015/lib/services/cropper-position.service.js +0 -254
  56. package/esm2015/lib/services/load-image.service.js +0 -304
  57. package/esm2015/lib/utils/blob.utils.js +0 -26
  58. package/esm2015/lib/utils/exif.utils.js +0 -128
  59. package/esm2015/lib/utils/hammer.utils.js +0 -29
  60. package/esm2015/lib/utils/keyboard.utils.js +0 -58
  61. package/esm2015/lib/utils/resize.utils.js +0 -116
  62. package/esm2015/ngx-image-cropper.js +0 -13
  63. package/esm2015/public-api.js +0 -11
  64. package/esm5/lib/component/image-cropper.component.js +0 -978
  65. package/esm5/lib/image-cropper.module.js +0 -28
  66. package/esm5/lib/interfaces/cropper-options.interface.js +0 -56
  67. package/esm5/lib/interfaces/cropper-position.interface.js +0 -20
  68. package/esm5/lib/interfaces/cropper.settings.js +0 -156
  69. package/esm5/lib/interfaces/dimensions.interface.js +0 -16
  70. package/esm5/lib/interfaces/exif-transform.interface.js +0 -16
  71. package/esm5/lib/interfaces/image-cropped-event.interface.js +0 -24
  72. package/esm5/lib/interfaces/image-transform.interface.js +0 -20
  73. package/esm5/lib/interfaces/index.js +0 -6
  74. package/esm5/lib/interfaces/loaded-image.interface.js +0 -18
  75. package/esm5/lib/interfaces/move-start.interface.js +0 -37
  76. package/esm5/lib/services/crop.service.js +0 -214
  77. package/esm5/lib/services/cropper-position.service.js +0 -293
  78. package/esm5/lib/services/load-image.service.js +0 -366
  79. package/esm5/lib/utils/blob.utils.js +0 -26
  80. package/esm5/lib/utils/exif.utils.js +0 -128
  81. package/esm5/lib/utils/hammer.utils.js +0 -29
  82. package/esm5/lib/utils/keyboard.utils.js +0 -58
  83. package/esm5/lib/utils/resize.utils.js +0 -116
  84. package/esm5/ngx-image-cropper.js +0 -13
  85. package/esm5/public-api.js +0 -11
  86. package/fesm2015/ngx-image-cropper.js.map +0 -1
  87. package/fesm5/ngx-image-cropper.js +0 -2396
  88. package/fesm5/ngx-image-cropper.js.map +0 -1
  89. package/ngx-image-cropper.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-image-cropper.js","sources":["ng://ngx-image-cropper/lib/interfaces/move-start.interface.ts","ng://ngx-image-cropper/lib/utils/resize.utils.ts","ng://ngx-image-cropper/lib/services/crop.service.ts","ng://ngx-image-cropper/lib/interfaces/cropper.settings.ts","ng://ngx-image-cropper/lib/utils/exif.utils.ts","ng://ngx-image-cropper/lib/services/load-image.service.ts","ng://ngx-image-cropper/lib/services/cropper-position.service.ts","ng://ngx-image-cropper/lib/utils/keyboard.utils.ts","ng://ngx-image-cropper/lib/component/image-cropper.component.ts","ng://ngx-image-cropper/lib/image-cropper.module.ts","ng://ngx-image-cropper/lib/utils/blob.utils.ts"],"sourcesContent":["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 { CropperSettings } from '../interfaces/cropper.settings';\nimport { CropperPosition, ImageCroppedEvent, LoadedImage } from '../interfaces';\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 { 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","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","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 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 (cropperWidth / settings.aspectRatio < cropperHeight) {\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 && event.touches[0] ? event.touches[0].clientX : event.clientX) || 0;\n }\n\n getClientY(event: any): number {\n return (event.touches && event.touches[0] ? event.touches[0].clientY : event.clientY) || 0;\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 { MoveTypes } from '../interfaces/move-start.interface';\nimport { HammerStatic } from '../utils/hammer.utils';\nimport { CropService } from '../services/crop.service';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { LoadImageService } from '../services/load-image.service';\nimport { OutputFormat } from '../interfaces/cropper-options.interface';\nimport { CropperPositionService } from '../services/cropper-position.service';\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 = typeof window !== 'undefined'\n ? (window as any).Hammer as HammerStatic\n : 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 && this.loadedImage.original.image.complete\n && (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\n && this.imageChangedEvent.target\n && this.imageChangedEvent.target.files\n && 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 && this.sourceImage.nativeElement && 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: any) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n\n private changeKeyboardStepSize(event: any): void {\n if (event.key >= '1' && event.key <= '9') {\n this.settings.stepSize = +event.key;\n return;\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 && 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 && this.loadedImage.transformed && 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 && this.loadedImage.transformed && 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.sourceImage && this.sourceImage.nativeElement && 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":"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=\"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=\"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=\"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=\"move\">\n </div>\n <ng-container *ngIf=\"!hideResizeSquares\">\n <span class=\"resize topleft\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize top\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize topright\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize right\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize bottomright\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize bottom\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize bottomleft\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize left\">\n <span class=\"square\"></span>\n </span>\n <span class=\"resize-bar top\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\">\n </span>\n <span class=\"resize-bar right\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\">\n </span>\n <span class=\"resize-bar bottom\"\n (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\">\n </span>\n <span class=\"resize-bar 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;position:relative;width:100%;max-width:100%;max-height:100%;overflow:hidden;padding:5px;text-align:center}:host>div{width:100%;position:relative}:host>div img.source-image{max-width:100%;max-height:100%;transform-origin:center}:host .overlay{position:absolute;pointer-events:none;touch-action:none;outline:var(--cropper-overlay-color,#fff) solid 100vw;top:0;left:0}:host .cropper{position:absolute;display:flex;color:#53535c;background:0 0;outline:rgba(255,255,255,.3) solid 100vw;outline:var(--cropper-outline-color,rgba(255,255,255,.3)) solid 100vw;touch-action:none}:host .cropper:after{position:absolute;content:\"\";top:0;bottom:0;left:0;right:0;pointer-events:none;border:1px dashed;opacity:.75;color:inherit;z-index:1}:host .cropper .move{width:100%;cursor:move;border:1px solid rgba(255,255,255,.5)}:host .cropper:focus .move{border-color:#1e90ff;border-width:2px}:host .cropper .resize{position:absolute;display:inline-block;line-height:6px;padding:8px;opacity:.85;z-index:1}:host .cropper .resize .square{display:inline-block;background:#53535c;width:6px;height:6px;border:1px solid rgba(255,255,255,.5);box-sizing:content-box}:host .cropper .resize.topleft{top:-12px;left:-12px;cursor:nwse-resize}:host .cropper .resize.top{top:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .cropper .resize.topright{top:-12px;right:-12px;cursor:nesw-resize}:host .cropper .resize.right{top:calc(50% - 12px);right:-12px;cursor:ew-resize}:host .cropper .resize.bottomright{bottom:-12px;right:-12px;cursor:nwse-resize}:host .cropper .resize.bottom{bottom:-12px;left:calc(50% - 12px);cursor:ns-resize}:host .cropper .resize.bottomleft{bottom:-12px;left:-12px;cursor:nesw-resize}:host .cropper .resize.left{top:calc(50% - 12px);left:-12px;cursor:ew-resize}:host .cropper .resize-bar{position:absolute;z-index:1}:host .cropper .resize-bar.top{top:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .cropper .resize-bar.right{top:11px;right:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .cropper .resize-bar.bottom{bottom:-11px;left:11px;width:calc(100% - 22px);height:22px;cursor:ns-resize}:host .cropper .resize-bar.left{top:11px;left:-11px;height:calc(100% - 22px);width:22px;cursor:ew-resize}:host .cropper.rounded{outline-color:transparent}:host .cropper.rounded:after{border-radius:100%;box-shadow:0 0 0 100vw rgba(255,255,255,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,rgba(255,255,255,.3))}@media (orientation:portrait){:host .cropper{outline-width:100vh}:host .cropper.rounded:after{box-shadow:0 0 0 100vh rgba(255,255,255,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,rgba(255,255,255,.3))}}:host .cropper.rounded .move{border-radius:100%}:host.disabled .cropper .move,:host.disabled .cropper .resize,:host.disabled .cropper .resize-bar{display:none}"]}]}],"members":{"wrapper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":49,"character":3},"arguments":["wrapper",{"static":true}]}]}],"sourceImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":50,"character":3},"arguments":["sourceImage",{"static":false}]}]}],"imageChangedEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"imageURL":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"imageBase64":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"imageFile":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"format":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":3}}]}],"transform":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":58,"character":3}}]}],"maintainAspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}}]}],"aspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"resizeToWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"resizeToHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"cropperMinWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"cropperMinHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3}}]}],"cropperMaxHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"cropperMaxWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"cropperStaticWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3}}]}],"cropperStaticHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"canvasRotation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"initialStepSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"roundCropper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"onlyScaleDown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"imageQuality":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"autoCrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"backgroundColor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"containWithinAspectRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"hideResizeSquares":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"cropper":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"alignImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":84,"character":3},"arguments":["style.text-align"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":86,"character":3},"arguments":["class.disabled"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"imageCropped":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":89,"character":3}}]}],"startCropImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":90,"character":3}}]}],"imageLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":91,"character":3}}]}],"cropperReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"loadImageFailed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":93,"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":99,"character":23},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":100,"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":275,"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":375,"character":3},"arguments":["document:mousemove",["$event"]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":376,"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":489,"character":3},"arguments":["document:mouseup"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":490,"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"}