ngx-image-drawing-zone
Version:

1 lines • 106 kB
Source Map (JSON)
{"version":3,"file":"ngx-image-drawing-zone.mjs","sources":["../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/i18n.ts","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/image-drawing.component.ts","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/image-drawing.component.html","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing.module.ts","../../../projects/ngx-image-drawing-zone/src/public-api.ts","../../../projects/ngx-image-drawing-zone/src/ngx-image-drawing-zone.ts"],"sourcesContent":["export const I18nFr: I18nInterface = {\n saveBtn: 'Enregistrer',\n cancelBtn: 'Annuler',\n\n loadImage: 'Charger une image depuis votre PC',\n loadImageUrl: 'Charger une image depuis une URL',\n loading: 'Chargement',\n loadError: 'Erreur de chargement %@',\n removeImage: 'Supprimer l\\'image',\n\n sizes: {\n small: 'Petit',\n medium: 'Moyen',\n large: 'Gros'\n },\n\n undo: 'Annuler',\n redo: 'Répter',\n clear: 'Effacer',\n\n colors: {\n black: 'Noir',\n white: 'Blanc',\n yellow: 'Jaune',\n red: 'Rouge',\n green: 'Vert',\n blue: 'Blue',\n purple: 'Violet'\n },\n\n tools: {\n brush: 'Pinceau'\n }\n};\n\nexport const I18nEn: I18nInterface = {\n saveBtn: 'Save',\n cancelBtn: 'Cancel',\n\n loadImage: 'Load image',\n loadImageUrl: 'Load image from URL',\n loading: 'Loading',\n loadError: 'Error loading %@',\n removeImage: 'Remove image',\n\n sizes: {\n small: 'Small',\n medium: 'Medium',\n large: 'Large'\n },\n resize:\"Resize\",\n undo: 'Undo',\n redo: 'Redo',\n clear: 'Clear',\n crop: 'Crop',\n mask:\"Mask\",\n rotate:\"Rotate\",\n colors: {\n black: 'Black',\n white: 'White',\n yellow: 'Yellow',\n red: 'Red',\n green: 'Green',\n blue: 'Blue',\n purple: 'Purple',\n },\n\n tools: {\n brush: 'Brush'\n }\n};\nexport const I18nHe: I18nInterface = {\n saveBtn: 'שמירה',\n cancelBtn: 'ביטול',\n\n loadImage: 'טוען תמונה',\n loadImageUrl: 'טוען תמונה מנתיב',\n loading: 'בטעינה',\n loadError: 'שגיאה בטעינה',\n removeImage: 'הסרת תמונה',\n sizes: {\n small: 'קטן',\n medium: 'בינוני',\n large: 'גדול'\n },\n rotate:\"הפיכת תמונה\",\n resize:\"שנה גודל\",\n undo: 'ביטול',\n redo: 'שחזור',\n clear: 'ניקןי',\n crop: 'חיתוך תמונה',\n mask:'ריבוע בחירה',\n colors: {\n black: 'שחור',\n white: 'לבן',\n yellow: 'צהוב',\n red: 'אדום',\n green: 'ירוק',\n blue: 'כחול',\n purple: 'סגול',\n },\n\n tools: {\n brush: 'מברשת'\n }\n};\nexport const i18nLanguages: { [name: string]: I18nInterface } = {\n fr: I18nFr,\n en: I18nEn,\n he:I18nHe\n};\n\nexport interface I18nInterface {\n saveBtn?: string;\n cancelBtn?: string;\n\n loadImage?: string;\n loadImageUrl?: string;\n loading?: string;\n loadError?: string;\n removeImage?: string;\n\n sizes?: { [name: string]: string };\n resize?:string;\n undo?: string;\n redo?: string;\n clear?: string;\n crop?:string;\n mask?:string\n rotate?:string\n colors?: { [name: string]: string };\n\n tools?: { [name: string]: string };\n}\n","import { Component, EventEmitter, Input, NgZone, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { fabric } from 'fabric';\r\nimport { I18nEn, I18nInterface, i18nLanguages } from './i18n';\r\nimport { Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\nimport { NgTemplateOutlet, NgStyle, NgClass } from '@angular/common';\r\n\r\n@Component({\n selector: 'image-drawing',\n styleUrls: ['./image-drawing.component.scss'],\n templateUrl: './image-drawing.component.html',\n standalone: true,\n imports: [NgTemplateOutlet, NgStyle, NgClass]\n})\r\nexport class ImageDrawingComponent implements OnInit, OnChanges {\r\n\r\n @Input() public src?: string;\r\n @Input() public width?: number;\r\n @Input() public height?: number;\r\n\r\n @Input() public saveBtnClass=\"button btn-primary\"\r\n @Input() public cancelBtnClass=\"button btn-light\"\r\n\r\n @Input() public forceSizeCanvas = true;\r\n @Input() public forceSizeExport = false;\r\n @Input() public enableRemoveImage = false;\r\n @Input() public enableLoadAnotherImage = false;\r\n @Input() public enableTooltip = true;\r\n @Input() public showCancelButton = true;\r\n\r\n // @ts-ignore\r\n @Input('i18n') public i18nUser: I18nInterface;\r\n @Input() public locale: string = 'en';\r\n /* @deprecated Use i18n.saveBtn */\r\n @Input() public saveBtnText = 'Save';\r\n /* @deprecated Use i18n.cancelBtn */\r\n @Input() public cancelBtnText = 'Cancel';\r\n /* @deprecated Use i18n.loading */\r\n @Input() public loadingText = 'Loading…';\r\n /* @deprecated Use i18n.loadError */\r\n @Input() public errorText = 'Error loading %@';\r\n\r\n @Input() public loadingTemplate?: TemplateRef<any>;\r\n @Input() public errorTemplate?: TemplateRef<any>;\r\n\r\n @Input() public outputMimeType = 'image/jpeg';\r\n @Input() public outputQuality = 0.8;\r\n\r\n @Input() public borderCss: string = 'none';\r\n\r\n @Input() public drawingSizes: { [name: string]: number } = {\r\n small: 5,\r\n medium: 10,\r\n large: 25,\r\n };\r\n\r\n @Input() public colors: { [name: string]: string } = {\r\n black: '#000',\r\n white: '#fff',\r\n yellow: '#ffeb3b',\r\n red: '#f44336',\r\n blue: '#2196f3',\r\n green: '#4caf50',\r\n purple: '#7a08af',\r\n };\r\n\r\n @Output() public save: EventEmitter<Blob> = new EventEmitter<Blob>();\r\n @Output() public cancel: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public currentTool = '';\r\n public currentSize = 'medium';\r\n public currentColor = 'black';\r\n public i18n: I18nInterface = I18nEn;\r\n public shapesNames=[\r\n {shape:'rectangle',icon:'rectangle'},\r\n {shape:'circle',icon:'circle'},\r\n {shape:'line',icon:' horizontal_rule'},\r\n {shape:'arrow',icon:'arrow_back'}\r\n ]\r\n public canUndo = false;\r\n public canRedo = false;\r\n public isShapeMode=false;\r\n public shapeType:string=''\r\n public isLoading = false;\r\n public hasError = false;\r\n public errorMessage = '';\r\n private shapedone=false;\r\n private canvas: fabric.Canvas;\r\n private stack: any[] = [];\r\n private stackUndo: fabric.Object[] = [];\r\n private stackUndoLocation:{type:string,loc:number}[]=[];\r\n private stackRedoLocation:{type:string,loc:number}[]=[];\r\n public colorsName: string[] = [];\r\n public drawingSizesName: string[] = [];\r\n private shapePoint:any\r\n private imageUsed?: fabric.Image;\r\n private clipPath:fabric.Rect;\r\n private r:DOMRect\r\n private isCrop:boolean=false\r\n private pos = [0, 0];\r\n private mousex = 0;\r\n private mousey = 0;\r\n private disabled:boolean=true\r\n private lastSelectedPicture = null;\r\n private isInsertingCropRectangle = false;\r\n shape_rect:fabric.Rect\r\n shape_circle:fabric.Circle\r\n shape_line:fabric.Line\r\n shape_arrow:fabric.Triangle\r\n shape_line_copy:fabric.Line\r\n shape_arrow_copy:fabric.Triangle\r\n crop_rect\r\n isDown:boolean\r\n origX\r\n origY\r\n mask\r\n target: fabric.Image;\r\n done = false;\r\n constructor(private zone:NgZone) {\r\n }\r\n get commons(){\r\n return {\r\n originX:'center',\r\n originY:'center',\r\n stroke:this.currentColor,\r\n strokeWidth:this.drawingSizes[this.currentSize]\r\n }\r\n }\r\n get commons1(){\r\n return {\r\n\r\n stroke:this.currentColor,\r\n strokeWidth:this.drawingSizes[this.currentSize]\r\n }\r\n }\r\n public ngOnInit(): void {\r\n this.colorsName = Object.keys(this.colors);\r\n this.drawingSizesName = Object.keys(this.drawingSizes);\r\n this.initClipPath();\r\n\r\n this.canvas = new fabric.Canvas('canvas', {\r\n hoverCursor: 'pointer',\r\n selection: true,\r\n preserveObjectStacking: true,\r\n\r\n //clipPath:clipPath\r\n //isDrawingMode: true,\r\n });\r\n this.canvas.backgroundColor = 'white';\r\n\r\n if (this.src) {\r\n this.importPhotoFromSrc(this.src);\r\n this.r = document.getElementById('canvas').getBoundingClientRect();\r\n this.pos[0]=this.r.left\r\n this.pos[1]=this.r.top\r\n } else {\r\n if (!this.width || !this.height) {\r\n throw new Error('No width or hight given !');\r\n }\r\n\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n //this.canvas.on('')\r\n this.canvas.on('path:created', () => {\r\n this.stack = [];\r\n this.setUndoRedo();\r\n });\r\n this.canvas.on('object:added', (e)=> {\r\n\r\n });\r\n\r\n this.canvas.on('object:modified',(e)=> {\r\n if(this.currentTool=== 'resize'){\r\n const newWidth= e.target.width*e.target.scaleX;\r\n const newHeight=e.target.height*e.target.scaleY\r\n e.target.set({ opacity: 1 });\r\n debugger;\r\n //var newWidth = (Math.round(e.target.width/ canvasGrid)) * canvasGrid;\r\n //var newHeight = (Math.round(e.target.height / canvasGrid)) * canvasGrid;\r\n\r\n if (e.target.width !== newWidth) {\r\n //e.target.set({ width: newWidth, height: newHeight, scaleX: 1, scaleY: 1, });\r\n }\r\n\r\n this.imageUsed.scaleToWidth(e.target.width*e.target.scaleX)\r\n this.imageUsed.scaleToHeight(e.target.height*e.target.scaleY)\r\n this.canvas.setWidth(e.target.width*e.target.scaleX)\r\n this.canvas.setHeight(e.target.height*e.target.scaleY)\r\n\r\n e.target.setCoords();\r\n\r\n\r\n this.canvas.renderAll();\r\n const imageStr=this.canvas.toDataURL(\r\n {\r\n\r\n\r\n format:'jpeg'\r\n })\r\n this.canvas.remove(this.imageUsed)\r\n this.canvas.getObjects().forEach(\r\n e=>e.opacity=0\r\n )\r\n this.selectTool('')\r\n //this.canvas.getObjects()[0].opacity=1\r\n this.importPhotoFromSrc(imageStr,false,true)\r\n }\r\n\r\n\r\n //this.setUndoRedo()\r\n });\r\n this.canvas.on('mouse:down', (o) =>{\r\n if( this.isInsertingCropRectangle == true ){\r\n console.log('mouse down done = '+this.done);\r\n if (this.done) {\r\n this.canvas.renderAll();\r\n return;\r\n }\r\n this.isDown = true;\r\n var pointer = this.canvas.getPointer(o.e);\r\n this.origX = pointer.x;\r\n this.origY = pointer.y;\r\n this.crop_rect = new fabric.Rect({\r\n left: this.origX,\r\n top: this.origY,\r\n width: pointer.x - this.origX,\r\n height: pointer.y - this.origY,\r\n opacity: .3,\r\n transparentCorners: false,\r\n selectable: true,\r\n\r\n //id: 'mask'\r\n });\r\n this.mask=this.crop_rect\r\n this.canvas.add(this.crop_rect);\r\n this.setUndoRedo();\r\n this.canvas.renderAll();\r\n }\r\n else if(this.isShapeMode===true){\r\n this.isDown = true;\r\n if(this.shapeType==='rectangle'){\r\n\r\n this.shapePoint = this.canvas.getPointer(o.e);\r\n this.shape_rect=new fabric.Rect({\r\n ...this.commons,\r\n left:this.shapePoint.x,\r\n top:this.shapePoint.y,\r\n fill:'transparent',\r\n width: this.shapePoint.x - this.shapePoint.x,\r\n height: this.shapePoint.y - this.shapePoint.y,\r\n //centeredRotation:true,\r\n //centeredScaling:true,\r\n selectable: true,\r\n })\r\n this.canvas.add(this.shape_rect);\r\n //this.setUndoRedo();\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='circle'){\r\n this.shapePoint = this.canvas.getPointer(o.e);\r\n this.shape_circle=new fabric.Circle({\r\n ...this.commons,\r\n left:this.shapePoint.x,\r\n top:this.shapePoint.y,\r\n fill:'transparent',\r\n radius: this.shapePoint.x - this.shapePoint.x,\r\n\r\n\r\n\r\n selectable: true,\r\n })\r\n this.canvas.add(this.shape_circle);\r\n //this.setUndoRedo();\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='line'){\r\n this.shapePoint = this.canvas.getPointer(o.e);\r\n this.shape_line= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n this.canvas.add(this.shape_line)\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='arrow'){\r\n this.shapePoint = this.canvas.getPointer(o.e);\r\n var angle=Math.atan2(this.shapePoint.y-this.shapePoint.y,this.shapePoint.x-this.shapePoint.x);\r\n angle*=180/Math.PI\r\n angle+=90\r\n this.shape_line= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n this.shape_arrow=new fabric.Triangle({\r\n ...this.commons,\r\n angle:angle,\r\n top:this.shape_line.y2,\r\n left:this.shape_line.x2,\r\n width:10,\r\n height:10\r\n\r\n })\r\n this.shape_line_copy= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n this.shape_arrow_copy=new fabric.Triangle({\r\n ...this.commons,\r\n angle:angle,\r\n top:this.shape_line.y2,\r\n left:this.shape_line.x2,\r\n width:10,\r\n height:10\r\n\r\n })\r\n\r\n this.canvas.add(this.shape_line);\r\n this.canvas.add(this.shape_arrow);\r\n\r\n this.canvas.renderAll();\r\n }\r\n }\r\n });\r\n\r\n this.canvas.on('mouse:move', (o)=> {\r\n if( this.isInsertingCropRectangle == true ){\r\n console.log('mouse move done = '+this.done);\r\n if (this.done) {\r\n this.canvas.renderAll();\r\n return;\r\n }\r\n if (!this.isDown) return;\r\n var pointer = this.canvas.getPointer(o.e);\r\n\r\n if (this.origX > pointer.x) {\r\n this.crop_rect.set({\r\n left: Math.abs(pointer.x)\r\n });\r\n }\r\n if (this.origY > pointer.y) {\r\n this.crop_rect.set({\r\n top: Math.abs(pointer.y)\r\n });\r\n }\r\n\r\n this.crop_rect.set({\r\n width: Math.abs(this.origX - pointer.x)\r\n });\r\n this.crop_rect.set({\r\n height: Math.abs(this.origY - pointer.y)\r\n });\r\n\r\n\r\n this.crop_rect.setCoords();\r\n this.canvas.renderAll();\r\n }\r\n else if(this.isShapeMode===true){\r\n if (!this.isDown) return;\r\n if(this.shapeType==='rectangle'){\r\n\r\n var pointer = this.canvas.getPointer(o.e);\r\n\r\n if (this.shapePoint.x > pointer.x) {\r\n this.shape_rect.set({\r\n left: Math.abs(pointer.x)\r\n });\r\n }\r\n if (this.shapePoint.y > pointer.y) {\r\n this.shape_rect.set({\r\n top: Math.abs(pointer.y)\r\n });\r\n }\r\n\r\n this.shape_rect.set({\r\n width: Math.abs(this.shapePoint.x - pointer.x)\r\n });\r\n this.shape_rect.set({\r\n height: Math.abs(this.shapePoint.y - pointer.y)\r\n });\r\n\r\n\r\n this.shape_rect.setCoords();\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='circle'){\r\n\r\n var pointer = this.canvas.getPointer(o.e);\r\n\r\n if (this.shapePoint.x > pointer.x) {\r\n this.shape_circle.set({\r\n left: Math.abs(pointer.x)\r\n });\r\n }\r\n if (this.shapePoint.y > pointer.y) {\r\n this.shape_circle.set({\r\n top: Math.abs(pointer.y)\r\n });\r\n }\r\n\r\n this.shape_circle.set({\r\n radius: Math.abs(this.shapePoint.x - pointer.x)/2\r\n });\r\n // this.shape_circle.set({\r\n // height: Math.abs(this.shapePoint.y - pointer.y)\r\n //});\r\n\r\n\r\n this.shape_circle.setCoords();\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='line'){\r\n\r\n var pointer = this.canvas.getPointer(o.e);\r\n\r\n if (this.shapePoint.x > pointer.x) {\r\n this.shape_line.set({\r\n left: Math.abs(pointer.x)\r\n });\r\n }\r\n if (this.shapePoint.y > pointer.y) {\r\n this.shape_line.set({\r\n top: Math.abs(pointer.y)\r\n });\r\n }\r\n this.shape_line.set({\r\n x2:pointer.x,\r\n y2:pointer.y\r\n });\r\n this.shape_line.setCoords();\r\n this.canvas.renderAll();\r\n }else if(this.shapeType==='arrow'){\r\n var pointer = this.canvas.getPointer(o.e);\r\n console.log(pointer);\r\n console.log(this.shapePoint)\r\n const py=pointer.y-this.shapePoint.y;\r\n const px=pointer.x-this.shapePoint.x;\r\n\r\n this.shape_line.set({\r\n x2:pointer.x,\r\n y2:pointer.y\r\n });\r\n this.shape_line_copy.set({\r\n x2:pointer.x,\r\n y2:pointer.y\r\n });\r\n this.shape_line.setCoords();\r\n var angle=Math.atan2(py,px);\r\n angle*=180/Math.PI\r\n angle+=90\r\n let pointX\r\n let pointY\r\n if(pointer.x>this.shapePoint.x)\r\n {\r\n pointX=pointer.x+15\r\n\r\n }else if(pointer.x<this.shapePoint.x){\r\n pointX=pointer.x-15\r\n }else{\r\n pointX=pointer.x\r\n }\r\n if(pointer.y>this.shapePoint.y)\r\n {\r\n pointY=pointer.y+7\r\n\r\n }else if(pointer.y<this.shapePoint.y){\r\n pointY=pointer.y-7\r\n }else{\r\n pointY=pointer.y\r\n }\r\n this.shape_arrow.set({\r\n angle:angle,\r\n top:pointer.y,\r\n left:pointer.x\r\n })\r\n\r\n this.shape_arrow_copy.set({\r\n angle:angle,\r\n top:pointer.y,\r\n left:pointer.x\r\n })\r\n console.log(this.shape_arrow)\r\n console.log(this.shape_line)\r\n this.shape_arrow.setCoords();\r\n this.canvas.renderAll();\r\n\r\n }\r\n\r\n }\r\n });\r\n\r\n this.canvas.on('mouse:up', (o)=> {\r\n\r\n if( this.isInsertingCropRectangle == true ){\r\n\r\n console.log('mouse up done = '+this.done);\r\n if (this.done) {\r\n this.canvas.renderAll();\r\n return;\r\n }\r\n this.isDown = false;\r\n\r\n this.crop_rect.set({\r\n selectable: true\r\n\r\n });\r\n this.done = true;\r\n\r\n }\r\n else if(this.isShapeMode===true){\r\n if(this.shapedone) return;\r\n if(this.shapeType==='arrow'){\r\n debugger;\r\n const line= new fabric.Line([this.shape_line.x1,this.shape_line.y1,this.shape_line.x2,this.shape_line.y2],this.commons1)\r\n line.set({\r\n x1:this.shape_line.x1,\r\n y1:this.shape_line.y1,\r\n x2:this.shape_line.x2,\r\n y2:this.shape_line.y2\r\n })\r\n const arrow=new fabric.Triangle({\r\n ...this.commons1,\r\n angle:this.shape_arrow.angle,\r\n top:this.shape_arrow.top,\r\n left:this.shape_arrow.left,\r\n width:10,\r\n height:10\r\n\r\n })\r\n line.setCoords()\r\n arrow.setCoords()\r\n\r\n var obj=[this.shape_arrow_copy,this.shape_line_copy];\r\n let myShape= new fabric.Group(obj,{\r\n left:Math.min(this.shape_line_copy.x1,this.shape_line_copy.x2) ,\r\n top:Math.min(this.shape_line_copy.y1,this.shape_line_copy.y2)\r\n })\r\n myShape.setCoords();\r\n console.log(myShape);\r\n this.canvas.add(myShape);\r\n this.canvas.renderAll();\r\n this.canvas.remove(this.shape_line);\r\n this.canvas.remove(this.shape_arrow);\r\n this.canvas.renderAll();\r\n this.shapedone=true;\r\n //this.isDown = false;\r\n //this.shapeType=''\r\n //this.isShapeMode=false;\r\n this.selectTool('');\r\n this.setUndoRedo();\r\n this.canvas.renderAll();\r\n\r\n }else{\r\n //this.isDown = false;\r\n //this.shapeType=''\r\n //this.isShapeMode=false;\r\n this.selectTool('');\r\n this.setUndoRedo();\r\n this.canvas.renderAll();\r\n }\r\n\r\n }\r\n });\r\n\r\n this.canvas.on('selection:created', (event) =>{\r\n console.log(\"canvas.on('selection:created'\");\r\n this.selectionChanged(event);\r\n });\r\n\r\n this.canvas.on('selection:updated', (event) =>{\r\n console.log(\"canvas.on('selection:updated'\");\r\n this.selectionChanged(event);\r\n });\r\n this.selectColor(this.currentColor);\r\n this.selectDrawingSize(this.currentSize);\r\n\r\n if (this.locale && i18nLanguages[this.locale.toLowerCase()]) {\r\n this.i18n = i18nLanguages[this.locale.toLowerCase()];\r\n }\r\n\r\n // FIXME remove after a while because properties are now deprecated\r\n if (this.saveBtnText) {\r\n this.i18n.saveBtn = this.saveBtnText;\r\n }\r\n if (this.cancelBtnText) {\r\n this.i18n.cancelBtn = this.cancelBtnText;\r\n }\r\n if (this.loadingText) {\r\n this.i18n.loading = this.loadingText;\r\n }\r\n if (this.errorText) {\r\n this.i18n.loadError = this.errorText;\r\n }\r\n }\r\n selectionChanged(event){\r\n\t\tconsole.log(\"selectionChanged\");\r\n\t\tconsole.log(\"selectionChanged type = \"+event.target?.type);\r\n\t\tswitch(event.target?.type) {\r\n\t\t\tcase 'textbox':\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'image':\r\n\t\t\t\tthis.lastSelectedPicture = event.target;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rect':\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'group':\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t}\r\n rotate(degrees:number,undo=true){\r\n this.selectTool('rotate');\r\n\r\n\r\n\r\n //this.canvas.setWidth(this.canvas.width+500)\r\n //this.canvas.setHeight(this.canvas.height+500)\r\n this.canvas.renderAll();\r\n if(undo){\r\n this.stackUndoLocation.push({type:'rotate',loc:this.canvas.getObjects().length})\r\n this.stackUndo.push(this.imageUsed);\r\n this.setUndoRedo();\r\n }\r\n\r\n\r\n\r\n const w = this.canvas.width\r\n const h=this.canvas.height\r\n this.canvas.setWidth(h)\r\n this.canvas.setHeight(w)\r\n let i=0;\r\n\r\n this.canvas.getObjects().forEach((value:fabric.Object)=>{\r\n console.log(value)\r\n const t =value.top;\r\n const l= value.left;\r\n\r\n console.log(\"T L\",value.top,value.left)\r\n //const dd=(value?.angle+degrees)\r\n //const de=( (dd % 360)* Math.PI) / 180\r\n value.centeredRotation=true;\r\n if(i>0){\r\n this.canvas.setActiveObject(value)\r\n }\r\n value.rotate(value?.angle+degrees).setCoords();\r\n console.log(\"T1 L1\",value.top,value.left)\r\n const w1=value.width>this.canvas.width&&value.width!==this.canvas.height?this.canvas.width:value.width;;\r\n const h1=value.height>this.canvas.height&&value.height!==this.canvas.width?this.canvas.height:value.height;\r\n //value.originX='left'\r\n //value.originY='top'\r\n console.log(\"w1 h1 \",w1,h1);\r\n //value.or\r\n let pref=Math.abs(w1/2-h1/2)\r\n\r\n console.log(\"pref \" , pref);\r\n // value.originX='left'\r\n // value.originY='top'\r\n console.log(\"i \",i);\r\n if(i===0){\r\n\r\n\r\n if((value.angle%360===90||value.angle%360===270)){\r\n if(h>w){\r\n pref=pref*-1\r\n }\r\n const t1=t-value.top;\r\n const l1=h1-value.left;\r\n console.log(t1,l1)\r\n value.top=value.top+pref;\r\n value.left=value.left-pref\r\n\r\n }\r\n // if(value.angle%360===270){\r\n\r\n // const t1=t-value.top;\r\n // const l1=l-value.left;\r\n // console.log(t1,l1)\r\n // value.top=value.top+pref;\r\n // value.left=value.left-pref;\r\n // }\r\n\r\n if(value.angle%360===180||value.angle%360===0){\r\n if(h<w){\r\n pref=pref*-1\r\n }\r\n const t1=h1+value.top;\r\n const l1=l-value.left;\r\n console.log(t1,l1)\r\n value.top=value.top-pref;\r\n value.left=value.left+pref\r\n }\r\n // if(value.angle%360===0){\r\n // const t1=h1-value.top;\r\n // const l1=l-value.left;\r\n // console.log(t1,l1)\r\n // value.top=value.top-pref;\r\n // value.left=value.left+pref;\r\n // }\r\n }else{\r\n\r\n\r\n\r\n // if(value.angle%360===0){\r\n // value.top=300;\r\n\r\n\r\n // value.left=300;\r\n // console.log(\"TT LL\",value.top,value.left)\r\n // }else{\r\n value.top=l;\r\n\r\n\r\n value.left=this.canvas.width-t;\r\n console.log(\"TT LL\",value.top,value.left)\r\n //}\r\n\r\n\r\n\r\n }\r\n\r\n\r\n i=i+1;\r\n console.log(value)\r\n })\r\n\r\n //imageR.rotate(Math.PI / 2)\r\n // imageR.snapAngle =90;\r\n\r\n this.canvas.renderAll()\r\n }\r\n shape(shapeT:string){\r\n this.selectTool('shape');\r\n this.shapedone=false;\r\n this.isShapeMode=true;\r\n this.shapeType=shapeT;\r\n }\r\n rescaleMask(target, mask){\r\n mask.scaleX = 1;\r\n mask.scaleY = 1;\r\n\r\n mask.scaleX/=target.scaleX;\r\n mask.scaleY/=target.scaleY;\r\n\r\n const targetCenterX = target.width * target.scaleX / 2;\r\n const targetCenterY = target.height * target.scaleY / 2;\r\n\r\n const maskOverlapX = mask.left - target.left;\r\n const maskOverlapY = mask.top - target.top;\r\n let centerBasedX = maskOverlapX - targetCenterX;\r\n let centerBasedY = maskOverlapY - targetCenterY;\r\n\r\n if( maskOverlapX >= targetCenterX){\r\n centerBasedX = (maskOverlapX - targetCenterX)/target.scaleX;\r\n }\r\n else{\r\n\r\n centerBasedX = (-(targetCenterX) + maskOverlapX)/target.scaleX;\r\n }\r\n\r\n if( maskOverlapY >= targetCenterY){\r\n centerBasedY = (maskOverlapY - targetCenterY)/target.scaleY;\r\n }\r\n else{\r\n centerBasedY = (-(targetCenterY) + maskOverlapY)/target.scaleY;\r\n }\r\n\r\n\r\n\r\n\r\n console.log('targetleft = '+target.left);\r\n console.log('targettop = '+target.top);\r\n console.log('targetCenterX = '+targetCenterX);\r\n console.log('targetCenterY = '+targetCenterY);\r\n console.log('maskleft = '+mask.left);\r\n console.log('masktop = '+mask.top);\r\n console.log('maskOverlapX = '+maskOverlapX);\r\n console.log('maskOverlapY = '+maskOverlapY);\r\n console.log('centerBasedX = '+centerBasedX);\r\n console.log('centerBasedY = '+centerBasedY);\r\n\r\n mask.left = centerBasedX;\r\n mask.top = centerBasedY;\r\n mask.originX = 'left';\r\n mask.originY = 'top';\r\n\r\n mask.setCoords();\r\n mask.dirty=true;\r\n this.canvas.renderAll();\r\n\r\n\r\n\r\n //var newMask = mask;\r\n return(mask);\r\n }\r\n initClipPath(){\r\n this.clipPath = new fabric.Rect({\r\n //left: 100,\r\n //top: 100,\r\n fill: 'transparent',\r\n originX: 'left',\r\n originY: 'top',\r\n stroke: '#ccc',\r\n strokeDashArray: [2, 2],\r\n opacity: 1,\r\n width: 1,\r\n height: 1\r\n });\r\n }\r\n // Tools\r\n public selectTool(tool: string) {\r\n this.currentTool = tool;\r\n if(this.currentTool==='brush'){\r\n this.canvas.isDrawingMode=true;\r\n }else{\r\n this.canvas.isDrawingMode=false;\r\n }\r\n if(this.currentTool!=='shape'){\r\n this.isDown = false;\r\n this.shapeType=''\r\n this.isShapeMode=false;\r\n }\r\n }\r\n\r\n public selectDrawingSize(size: string) {\r\n this.currentSize = size;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.width = this.drawingSizes[size];\r\n }\r\n }\r\n\r\n public selectColor(color: string) {\r\n this.currentColor = color;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.color = this.colors[color];\r\n }\r\n }\r\n public maskC(){\r\n this.isInsertingCropRectangle = true;\r\n this.selectTool('mask')\r\n\t\tthis.canvas.discardActiveObject();\r\n this.target.selectable=false ;\r\n this.target.setCoords();\r\n this.target.dirty=true;\r\n\t\t//this.lastSelectedPicture.selectable = false;\r\n\t\t//this.lastSelectedPicture.setCoords();\r\n\t\t//this.lastSelectedPicture.dirty = true;\r\n\t\tthis.canvas.renderAll();\r\n this.setUndoRedo();\r\n\t\tthis.canvas.discardActiveObject();\r\n this.canvas.isDrawingMode=false;\r\n }\r\n // Actions\r\n public crop(){\r\n if (this.target !== null && this.mask !== null&&this.done) {\r\n this.selectTool('crop')\r\n this.target.setCoords();\r\n // Re-scale mask\r\n //this.mask = this.rescaleMask(this.target, this.mask);\r\n this.mask.setCoords();\r\n\r\n // Do the crop\r\n //this.target.clipPath = this.mask;\r\n //this.target.clipPath.setCoords();\r\n //this.target.dirty=true;\r\n //this.canvas.setActiveObject(this.target);\r\n //this.canvas.bringToFront(this.target);\r\n //this.target.clipPath.selectable = true;\r\n this.setUndoRedo();\r\n //this.stackUndoLocation.push(this.canvas.getObjects().length-2)\r\n //this.stackUndo.push(this.mask);\r\n this.canvas.remove(this.mask);\r\n\r\n this.canvas.renderAll();\r\n this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n this.stackUndo.push(this.imageUsed)\r\n\r\n this.setUndoRedo()\r\n const scale2=Math.min(this.canvas.getWidth()/this.crop_rect.width,this.canvas.getHeight()/this.crop_rect.height)\r\n const imageStr=this.canvas.toDataURL(\r\n {\r\n\r\n width:this.crop_rect.width,//this.target.clipPath.width,\r\n height:this.crop_rect.height,\r\n left:this.crop_rect.left,//+this.canvas.width/2,\r\n top:this.crop_rect.top,//+this.canvas.height/2,\r\n quality:1,\r\n multiplier:scale2,\r\n format:'jpeg'\r\n })\r\n\r\n this.canvas.remove(this.imageUsed)\r\n this.canvas.getObjects().forEach(\r\n e=>e.opacity=0\r\n )\r\n //this.canvas.getObjects()[0].opacity=1\r\n this.importPhotoFromSrc(imageStr)\r\n\r\n this.imageUsed.sendToBack()\r\n\r\n this.canvas.renderAll();\r\n this.setUndoRedo()\r\n console.log(this.target);\r\n this.isInsertingCropRectangle=false;\r\n this.done=false;\r\n this.selectTool('')\r\n }\r\n //this.disabled=false;\r\n\r\n }\r\n\r\n public resize(){\r\n this.selectTool('resize')\r\n this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n this.stackUndo.push(this.imageUsed)\r\n\r\n this.setUndoRedo()\r\n const imageStr=this.canvas.toDataURL(\r\n {\r\n\r\n\r\n format:'jpeg'\r\n })\r\n this.canvas.remove(this.imageUsed)\r\n this.canvas.getObjects().forEach(\r\n e=>e.opacity=0\r\n )\r\n //this.canvas.getObjects()[0].opacity=1\r\n this.importPhotoFromSrc(imageStr,true)\r\n\r\n\r\n //this.canvas.setWidth(this.canvas.width+500)\r\n //this.canvas.setHeight(this.canvas.height+500)\r\n this.canvas.renderAll();\r\n }\r\n public undo() {\r\n if (this.canUndo) {\r\n debugger;\r\n if(this.stackUndo.length>0){\r\n if(this.stackUndoLocation[this.stackUndoLocation.length-1].type==='rotate'){\r\n const ob=this.stackUndo.pop();\r\n const l=this.stackUndoLocation.pop().loc;\r\n this.setUndoRedo();\r\n this.rotate(-90,false);\r\n this.stack.push('rotate')\r\n this.stackRedoLocation.push({type:'rotate',loc:this.canvas.getObjects().length})\r\n this.setUndoRedo();\r\n }\r\n\r\n else if(this.canvas.getObjects().length-this.stackUndoLocation[this.stackUndoLocation.length-1].loc>1){\r\n const lastId = this.canvas.getObjects().length - 1;\r\n const lastObj = this.canvas.getObjects()[lastId];\r\n this.done=false;\r\n this.stack.push(lastObj);\r\n this.canvas.remove(lastObj);\r\n this.setUndoRedo();\r\n this.canvas.renderAll()\r\n }else{\r\n const ob=this.stackUndo.pop();\r\n const l=this.stackUndoLocation.pop().loc;\r\n if(ob instanceof fabric.Image){\r\n this.stack.push(this.imageUsed);\r\n for(var i=l;i>=0;i--){\r\n this.canvas.getObjects()[i].opacity=1\r\n }\r\n this.setUndoRedo();\r\n this.canvas.remove(this.imageUsed)\r\n this.importPhotoFromSrc((ob as fabric.Image).getSrc())\r\n debugger;\r\n\r\n }else{\r\n this.canvas.add(ob)\r\n }\r\n this.canvas.renderAll();\r\n\r\n }\r\n\r\n\r\n }else{\r\n const lastId = this.canvas.getObjects().length - 1;\r\n const lastObj = this.canvas.getObjects()[lastId];\r\n this.done=false;\r\n this.stack.push(lastObj);\r\n this.canvas.remove(lastObj);\r\n this.setUndoRedo();\r\n this.canvas.renderAll()\r\n }\r\n\r\n\r\n\r\n }\r\n }\r\n\r\n public redo() {\r\n if (this.canRedo) {\r\n const firstInStack = this.stack.splice(-1, 1)[0];\r\n if (firstInStack) {\r\n if(firstInStack instanceof fabric.Image){\r\n this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n this.stackUndo.push(this.imageUsed)\r\n this.canvas.remove(this.imageUsed)\r\n this.importPhotoFromSrc((firstInStack as fabric.Image).getSrc())\r\n this.setUndoRedo();\r\n }\r\n else if(firstInStack==='rotate'){\r\n this.rotate(90);\r\n }\r\n else{\r\n this.canvas.insertAt(firstInStack, this.canvas.getObjects().length, false);\r\n this.setUndoRedo();\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n public clearCanvas() {\r\n if (this.canvas) {\r\n this.canvas.clipPath=null;\r\n this.canvas.remove(...this.canvas.getObjects());\r\n //this.canvas.clear()\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public saveImage() {\r\n if (!this.forceSizeExport || (this.forceSizeExport && this.width && this.height)) {\r\n const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n canvasScaled.backgroundColor = 'white';\r\n let imageStr=null;\r\n new Observable<fabric.Canvas>(observer => {\r\n if (this.imageUsed) {\r\n if(this.target.clipPath){\r\n debugger;\r\n imageStr=this.canvas.toDataURL(\r\n {\r\n\r\n width:this.target.clipPath.width,\r\n height:this.target.clipPath.height,\r\n left:this.target.clipPath.left+this.canvas.width/2,\r\n top:this.target.clipPath.top+this.canvas.height/2,\r\n format:'jpeg'\r\n })\r\n console.log(imageStr);\r\n }\r\n\r\n if (this.forceSizeExport) {\r\n canvasScaled.setWidth(this.width);\r\n canvasScaled.setHeight(this.height);\r\n\r\n this.imageUsed.cloneAsImage(imageCloned => {\r\n imageCloned.scaleToWidth(this.width, false);\r\n imageCloned.scaleToHeight(this.height, false);\r\n\r\n canvasScaled.setBackgroundImage(imageCloned, (img: HTMLImageElement) => {\r\n if (!img) {\r\n observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n }\r\n\r\n observer.next(canvasScaled);\r\n observer.complete();\r\n }, {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n });\r\n } else {\r\n //canvasScaled.clipPath=this.mask\r\n canvasScaled.setBackgroundImage(this.target, (img: any) => {\r\n if (!img) {\r\n observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n }\r\n\r\n\r\n //canvasScaled.clipPath=this.clipPath\r\n //(canvasScaled.backgroundImage as fabric.Image).clipPath=(this.canvas.backgroundImage as fabric.Image).clipPath\r\n\r\n console.log(this.canvas.width)\r\n if(img.angle%360===90||img.angle%360===270){\r\n canvasScaled.setWidth(img.height*this.imageUsed.scaleX);\r\n canvasScaled.setHeight(img.width*this.imageUsed.scaleY);\r\n }else{\r\n canvasScaled.setWidth(img.width*this.imageUsed.scaleX);\r\n canvasScaled.setHeight(img.height*this.imageUsed.scaleY);\r\n }\r\n\r\n\r\n observer.next(canvasScaled);\r\n observer.complete();\r\n }, {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n\r\n //(canvasScaled.backgroundImage as fabric.Image).clipPath=this.clipPath\r\n }\r\n } else {\r\n canvasScaled.setWidth(this.width);\r\n canvasScaled.setHeight(this.height);\r\n }\r\n }).pipe(\r\n switchMap(() => {\r\n let process = of(canvasScaled);\r\n\r\n if (this.canvas.getObjects().length > 1) {\r\n this.canvas.remove(this.imageUsed)\r\n const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n process = process.pipe(switchMap(() => {\r\n return new Observable<fabric.Canvas>(observerObject => {\r\n originalObject.clone((clonedObject: fabric.Object) => {\r\n clonedObject.set('left', originalObject.left * ratioX);\r\n clonedObject.set('top', originalObject.top * ratioY);\r\n clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n canvasScaled.insertAt(clonedObject, i, false);\r\n canvasScaled.renderAll();\r\n\r\n observerObject.next(canvasScaled);\r\n observerObject.complete();\r\n });\r\n });\r\n }));\r\n });\r\n }\r\n return process;\r\n }),\r\n ).subscribe(() => {\r\n canvasScaled.renderAll();\r\n // console.log(\r\n // canvasScaled.toDataURL(\r\n // {width:this.clipPath.width,\r\n // height:this.clipPath.height,\r\n // left:(this.canvas.backgroundImage as fabric.Image).clipPath.left,\r\n // top:(this.canvas.backgroundImage as fabric.Image).clipPath.top,\r\n // format:'jpeg'\r\n // }))\r\n\r\n const im= canvasScaled.toDataURL({\r\n\r\n\r\n\r\n format:'jpeg'\r\n }\r\n )\r\n console.log(im)\r\n canvasScaled.getElement().toBlob(\r\n (data: Blob) =>this.zone.run(() =>{\r\n this.save.emit(data);\r\n\r\n }),\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n });\r\n } else {\r\n this.canvas.getElement().toBlob(\r\n (data: Blob) =>this.zone.run(() => {\r\n this.save.emit(data);\r\n }),\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n }\r\n }\r\n\r\n public cancelAction() {\r\n this.cancel.emit();\r\n }\r\n\r\n public getTextTranslated(name: string): string {\r\n let strOk = name.split('.').reduce((o, i) => o[i], this.i18n as any);\r\n\r\n if (this.i18nUser) {\r\n try {\r\n const str = name.split('.').reduce((o, i) => o[i], this.i18nUser as any);\r\n if (str) {\r\n strOk = str;\r\n }\r\n } catch (e) {\r\n // if we pass here, ignored\r\n }\r\n }\r\n\r\n if (!strOk) {\r\n console.error(name + ' translation not found !');\r\n }\r\n\r\n return strOk;\r\n }\r\n\r\n public getTooltipTranslated(name: string): string {\r\n if (this.enableTooltip) {\r\n return this.getTextTranslated(name)\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private setUndoRedo() {\r\n this.canUndo = this.canvas.getObjects().length > 1||this.stackUndo.length>0;\r\n this.canRedo = this.stack.length > 0;\r\n // this.canvas.renderAll();\r\n }\r\n\r\n public importPhotoFromFile(event: Event | any) {\r\n if (event.target.files && event.target.files.length > 0) {\r\n const file = event.target.files[0];\r\n if (file.type.match('image.*')) {\r\n this.importPhotoFromBlob(file);\r\n } else {\r\n throw new Error('Not an image !');\r\n }\r\n }\r\n }\r\n\r\n public removeImage() {\r\n if (this.imageUsed) {\r\n this.imageUsed.dispose();\r\n this.imageUsed = null;\r\n }\r\n this.canvas.backgroundImage = null;\r\n\r\n if (this.width && this.height) {\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.renderAll();\r\n }\r\n\r\n public get hasImage(): boolean {\r\n return !!this.canvas.backgroundImage;\r\n }\r\n\r\n private importPhotoFromSrc(src: string,select:boolean=false,stackundo=false) {\r\n this.isLoading = true;\r\n let isFirstTry = true;\r\n const imgEl = new Image();\r\n imgEl.setAttribute('crossorigin', 'anonymous');\r\n imgEl.crossOrigin = \"anonymous\";\r\n imgEl.src = src;\r\n imgEl.onerror = () => {\r\n // Retry with cors proxy\r\n /* if (isFirstTry) {\r\n imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n isFirstTry = false;\r\n }\r\n else */\r\n {\r\n this.isLoading = false;\r\n this.hasError = true;\r\n this.errorMessage = this.getTextTranslated('loadError').replace('%@', this.src as string);\r\n }\r\n };\r\n console.log(imgEl)\r\n const scaleWidth = this.canvas.getWidth() / imgEl.width;\r\n const scaleHeight = this.canvas.getHeight() / imgEl.height;\r\n const scale = Math.min(scaleWidth, scaleHeight);\r\n console.log(scale)\r\n imgEl.onload = () => {\r\n this.isLoading = false;\r\n\r\n this.imageUsed = new fabric.Image(imgEl,{\r\n selectable:false,\r\n width:imgEl.width,\r\n height:imgEl.height,\r\n\r\n\r\n });\r\n this.canvas.insertAt(this.imageUsed,0,false)\r\n //this.canvas.sendToBack(this.imageUsed)\r\n this.canvas.width=imgEl.width\r\n this.canvas.height=imgEl.height\r\n //this.canvas.setActiveObject(this.imageUsed)\r\n console.log(this.imageUsed)\r\n this.imageUsed.cloneAsImage(image => {\r\n let width = imgEl.width;\r\n let height = imgEl.height;\r\n\r\n if (this.width&&this.width<width) {\r\n width = this.width;\r\n }\r\n if (this.height&&this.height<height) {\r\n height = this.height;\r\n }\r\n this.imageUsed.scaleToWidth(width)\r\n this.imageUsed.scaleToHeight(height)\r\n image.scaleToWidth(width, false);\r\n image.scaleToHeight(height, false);\r\n console.log(image,width,height)\r\n\r\n // this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n // if (img) {\r\n if (this.forceSizeCanvas) {\r\n this.canvas.setWidth(width);\r\n this.canvas.setHeight(height);\r\n } else {\r\n\r\n this.canvas.setWidth(image.getScaledWidth());\r\n this.canvas.setHeight(image.getScaledHeight());\r\n }\r\n // }\r\n // }), {\r\n // crossOrigin: 'Anonymous',\r\n // originX: 'left',\r\n // originY: 'top'\r\n //});\r\n\r\n this.target=this.imageUsed\r\n this.target.selectable=select;\r\n if(select){\r\n this.target.lockMovementX=true\r\n this.target.lockMovementY=true\r\n this.canvas.setWidth(width+500);\r\n this.canvas.setHeight(height+500);\r\n }\r\n if(stackundo){\r\n this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n this.stackUndo.push(this.imageUsed)\r\n this.setUndoRedo()\r\n }\r\n });\r\n };\r\n }\r\n\r\n private importPhotoFromBlob(file: Blob | File) {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = (evtReader: any) => {\r\n if (evtReader.target.readyState == FileReader.DONE) {\r\n this.importPhotoFromSrc(evtReader.target.result);\r\n }\r\n };\r\n }\r\n\r\n public importPhotoFromUrl() {\r\n const url = prompt(this.getTooltipTranslated('loadImageUrl'));\r\n if (url) {\r\n this.importPhotoFromSrc(url);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.src && !changes.src.firstChange && changes.src.currentValue) {\r\n if (typeof changes.src.currentValue === 'string') {\r\n this.importPhotoFromSrc(changes.src.currentValue);\r\n } else if (changes.src.currentValue) {\r\n this.importPhotoFromBlob(changes.src.currentValue);\r\n }\r\n }\r\n }\r\n}\r\n","\n\n@if (isLoading) {\n <div class=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate ? loadingTemplate : defaultLoading\"></ng-container>\n </div>\n}\n@if (hasError) {\n <div class=\"error\">\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\n </div>\n}\n\n<ng-template #defaultLoading><p>{{ getTextTranslated('loading') }}</p></ng-template>\n<ng-template #defaultError> <p>{{ errorMessage }}</p> </ng-template>\n\n<div [ngStyle]=\"{ border: borderCss }\">\n <canvas id=\"canvas\"></canvas>\n</div>\n@if (!isLoading) {\n <div class=\"toolbar\">\n <div class=\"tools\">\n <div class=\"row1\">\n <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'brush'\" (click)=\"selectTool('brush')\"\n [title]=\"getTooltipTranslated('tools.brush')\">brush</i>\n @for (drawingSizeName of drawingSizesName; track drawingSizeName) {\n <span class=\"size btn1\"\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\n [class.selected]=\"currentSize == drawingSizeName\"\n [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\n (click)=\"selectDrawingSize(drawingSizeName)\">\n </span>\n }\n <input style=\"display: none\" type=\"file\" #fileInput (change)=\"importPhotoFromFile($event)\"\n accept=\"image/*\"/>\n @if (enableLoadAnotherImage && !hasImage) {\n <i class=\"material-icons btn1\" (click)=\"fileInput.click();\"\n [title]=\"getTooltipTranslated('loadImage')\">attach_file</i>\n }\n @if (enableLoadAnotherImage && !hasImage) {\n <i class=\"material-icons btn1\" (click)=\"importPhotoFromUrl()\"\n [title]=\"getTooltipTranslated('loadImageUrl')\">insert_drive_file</i>\n }\n @if (enableRemoveImage && hasImage) {\n <i class=\"material-icons btn1\" (click)=\"removeImage()\"\n [title]=\"getTooltipTranslated('removeImage')\">clear</i>\n }\n <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'crop' || done===false\" (click)=\"crop()\"\n [title]=\"getTooltipTranslated('crop')\">crop</i>\n <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'mask'\" (click)=\"maskC()\"\n [title]=\"getTooltipTranslated('mask')\">crop_free</i>\n <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'resize'\" (click)=\"resize()\"\n [title]=\"getTooltipTranslated('resize')\">expand</i>\n <i class=\"material-icons btn1\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\n [title]=\"getTooltipTranslated('undo')\">undo</i>\n <i class=\"material-icons btn1\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\n [title]=\"getTooltipTranslated('redo')\">redo</i>\n <!-- <i class=\"material-icons btn1\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\">delete</i> -->\n </div>\n <div class=\"row1\">\n @for (shapeName of shapesNames; track shapeName) {\n <div class=\"material-icons-outlined btn1\" (click)=\"shape(shapeName.shape)\">\n {{shapeName.icon}}\n </div>\n }\n <div class=\"material-icons btn1\" (click)=\"rotate(90)\">\n rotate_right\n </div>\n </div>\n <div class=\"row1\">\n @for (colorName of colorsName; track colorName) {\n <div [class.selected]=\"currentColor === colorName\" class=\"color\"\n [ngClass]=\"colorName\"\n [style.background]=\"colors[colorName]\" [title]=\"getTooltipTranslated('colors.' + colorName)\"\n (click)=\"selectColor(colorName)\">\n </div>\n }\n </div>\n </div>\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\n <ng-content></ng-content>\n </div>\n }\n @if (!isLoading) {\n <div class=\"buttons\">\n @if (showCancelButton) {\n <a href=\"#\" [class]=\"cancelBtnClass\"\n (click)=\"cancelAction(); $event.preventDefault()\">{{ getTextTranslated('cancelBtn') }}</a>\n }\n <button [class]=\"saveBtnClass\"\n (click)=\"saveImage()\">{{ getTextTranslated('saveBtn') }}</button>\n </div>\n }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ImageDrawingComponent } from './image-drawing/image-drawing.component';\nimport {MatIconModule} from '@angular/material/icon';\n@NgModule({\n exports: [\n ImageDrawingComponent,\n ],\n imports: [\n CommonModule,\n MatIconModule,\n ImageDrawingComponent\n ]\n})\nexport class ImageDrawingModule {}\n","/*\n * Public API Surface of ngx-image-drawing-zone\n */\n\nexport * from './lib/image-drawing/image-drawing.module';\nexport * from './lib/image-drawing/image-drawing/image-drawing.component';\nexport * from './lib/image-drawing/image-drawing/i18n';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}