UNPKG

ngx-image-drawing-sixteen

Version:

![Screenshot](https://github.com/lea-so123/GitHub/main/my-workspace/projects/ngx-image-drawing-zone/.github/screenshot.jpg)

2 lines 77.1 kB
{"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    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    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    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-ext';\r\nimport { I18nEn, I18nInterface, i18nLanguages } from './i18n';\r\nimport { Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'image-drawing',\r\n    styleUrls: ['./image-drawing.component.scss'],\r\n    templateUrl: './image-drawing.component.html'\r\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\r\n    public canUndo = false;\r\n    public canRedo = false;\r\n\r\n    public isLoading = false;\r\n    public hasError = false;\r\n    public errorMessage = '';\r\n\r\n    private canvas: fabric.Canvas;\r\n    private stack: fabric.Object[] = [];\r\n    private stackUndo: fabric.Object[] = [];\r\n    private stackUndoLocation:number[]=[];\r\n    public colorsName: string[] = [];\r\n    public drawingSizesName: string[] = [];\r\n\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    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\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            // this.target = null;\r\n            // this.mask = null;\r\n            // this.canvas.forEachObject((obj)=> {\r\n            //   //alert(obj.get('id'));\r\n            //   var id = obj.get('id');\r\n            //   if (id === 'target') {\r\n            //     this.target = obj;\r\n            //      this.canvas.setActiveObject(obj);\r\n            //  }\r\n            //   if (id === 'mask') {\r\n            //     //alert(done);\r\n            //     //alert('mask');\r\n            //     this.mask = obj;\r\n            //   }\r\n            // });\r\n          });\r\n\r\n          this.canvas.on('object:modified',(e)=> {\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            //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{\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{\r\n\r\n          }\r\n        });\r\n\r\n        this.canvas.on('mouse:up', (o)=> {\r\n            if( this.isInsertingCropRectangle == true ){\r\n                debugger;\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{\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\r\n        // this.canvas.on(\"mouse:down\", (event) =>{\r\n        //     if (this.disabled) return;\r\n        //     console.log(\"x\",event.e.pageX-this.pos[0],this.pos[0],event.e.pageX,event.e.clientX,event.e.offsetX)\r\n        //     const p=this.canvas.getPointer(event.e)\r\n        //     console.log(p)\r\n        //     this.clipPath.left = event.e.pageX-this.pos[0] ;\r\n        //     this.clipPath.top =event.e.pageY - this.pos[1];\r\n        //     //el.selectable = false;\r\n        //     this.clipPath.visible = true;\r\n        //     this.mousex = event.e.pageX;\r\n        //     this.mousey = event.e.pageY;\r\n        //     this.isCrop = true;\r\n        //     this.canvas.bringToFront(this.clipPath);\r\n        // });\r\n\r\n        // this.canvas.on(\"mouse:move\", (event)=> {\r\n        //     //console.log(event);\r\n        //     if (this.isCrop && !this.disabled) {\r\n        //         if (event.e.pageX - this.mousex > 0) {\r\n        //             this.clipPath.width = event.e.pageX - this.mousex;\r\n        //         }\r\n\r\n        //         if (event.e.pageY - this.mousey > 0) {\r\n        //             this.clipPath.height = event.e.pageY - this.mousey;\r\n        //         }\r\n        //     }\r\n        // });\r\n\r\n        // this.canvas.on(\"mouse:up\", (event) =>\r\n        // {\r\n\r\n        //     //var left = this.clipPath.left - object.left;\r\n        //    // var top = this.clipPath.top - object.top;\r\n\r\n        //    // left *= 1 / 0.25;\r\n        //     //top *= 1 / 0.25;\r\n\r\n        //    // var width = this.clipPath.width * 1 / 0.25;\r\n        //     //var height = this.clipPath.height * 1 / 0.25;\r\n        //     var clip=new fabric.Rect({absolutePositioned:true,top:this.clipPath.top,left:this.clipPath.left+this.clipPath.width,width:this.clipPath.width,height:this.clipPath.height})\r\n        //     var clip1=new fabric.Rect({top:0,left:0,width:100,height:100})\r\n\r\n        //     if(this.isCrop){\r\n        //       //console.log(this.clipPath) .backgroundImage as fabric.Image).\r\n        //     this.canvas.clipPath=clip\r\n\r\n        //     //this.canvas.selectable = true;\r\n        //       this.disabled = true;\r\n        //       this.clipPath.visible = false;\r\n        //       this.isCrop = false;\r\n        //       this.setUndoRedo()\r\n        //       this.canvas.renderAll();\r\n\r\n        //     }\r\n\r\n        // });\r\n\r\n        //this.selectTool(this.currentTool);\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    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    }\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(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                   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                    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)\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    public resize(){\r\n        this.selectTool('resize')\r\n        this.stackUndoLocation.push(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                console.log(this.canvas.getObjects().length)\r\n              if(this.canvas.getObjects().length-this.stackUndoLocation[this.stackUndoLocation.length-1]>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();\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            //if(lastObj.canvas===undefined){\r\n             // this.canvas.clipPath=null;\r\n             // this.initClipPath()\r\n              //this.clipPath=null;\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(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                }else{\r\n                    this.canvas.insertAt(firstInStack, this.canvas.getObjects().length, false);\r\n                }\r\n\r\n            }\r\n            this.setUndoRedo();\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: 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\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\r\n                            canvasScaled.setWidth(img.width*this.imageUsed.scaleX);\r\n                            canvasScaled.setHeight(img.height*this.imageUsed.scaleY);\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\r\n        imgEl.onload = () => {\r\n            this.isLoading = false;\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            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)\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                            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(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","\r\n\r\n<div class=\"loading\" *ngIf=\"isLoading\">\r\n  <ng-container *ngTemplateOutlet=\"loadingTemplate ? loadingTemplate : defaultLoading\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n  <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<ng-template #defaultLoading><p>{{ getTextTranslated('loading') }}</p></ng-template>\r\n<ng-template #defaultError> <p>{{ errorMessage }}</p> </ng-template>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n  <canvas id=\"canvas\"></canvas>\r\n</div>\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n  <div class=\"tools\">\r\n      <div class=\"row1\">\r\n          <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'brush'\" (click)=\"selectTool('brush')\"\r\n             [title]=\"getTooltipTranslated('tools.brush')\">brush</i>\r\n          <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn1\"\r\n                [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n                [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n                [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n                [class.selected]=\"currentSize == drawingSizeName\"\r\n                [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n                (click)=\"selectDrawingSize(drawingSizeName)\">\r\n    </span>\r\n\r\n          <input style=\"display: none\" type=\"file\" #fileInput (change)=\"importPhotoFromFile($event)\"\r\n                 accept=\"image/*\"/>\r\n          <i class=\"material-icons btn1\" *ngIf=\"enableLoadAnotherImage && !hasImage\" (click)=\"fileInput.click();\"\r\n             [title]=\"getTooltipTranslated('loadImage')\">attach_file</i>\r\n          <i class=\"material-icons btn1\" *ngIf=\"enableLoadAnotherImage && !hasImage\" (click)=\"importPhotoFromUrl()\"\r\n             [title]=\"getTooltipTranslated('loadImageUrl')\">insert_drive_file</i>\r\n          <i class=\"material-icons btn1\" *ngIf=\"enableRemoveImage && hasImage\" (click)=\"removeImage()\"\r\n             [title]=\"getTooltipTranslated('removeImage')\">clear</i>\r\n\r\n             <i class=\"material-icons btn1\"  [class.selected]=\"currentTool === 'crop' || done===false\" (click)=\"crop()\"\r\n             [title]=\"getTooltipTranslated('crop')\">crop</i>\r\n             <i class=\"material-icons btn1\"  [class.selected]=\"currentTool === 'mask'\" (click)=\"maskC()\"\r\n             [title]=\"getTooltipTranslated('mask')\">crop_free</i>\r\n             <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'resize'\" (click)=\"resize()\"\r\n             [title]=\"getTooltipTranslated('resize')\">expand</i>\r\n          <i class=\"material-icons btn1\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n             [title]=\"getTooltipTranslated('undo')\">undo</i>\r\n          <i class=\"material-icons btn1\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n             [title]=\"getTooltipTranslated('redo')\">redo</i>\r\n          <!-- <i class=\"material-icons btn1\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\">delete</i> -->\r\n      </div>\r\n      <div class=\"row1\">\r\n          <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor === colorName\" class=\"color\"\r\n               [ngClass]=\"colorName\"\r\n               [style.background]=\"colors[colorName]\" [title]=\"getTooltipTranslated('colors.' + colorName)\"\r\n               (click)=\"selectColor(colorName)\">\r\n          </div>\r\n      </div>\r\n  </div>\r\n\r\n  <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n  <ng-content></ng-content>\r\n</div>\r\n<div class=\"buttons\" *ngIf=\"!isLoading\">\r\n\r\n    <a href=\"#\" [class]=\"cancelBtnClass\" *ngIf=\"showCancelButton\"\r\n       (click)=\"cancelAction(); $event.preventDefault()\">{{ getTextTranslated('cancelBtn') }}</a>\r\n       <button  [class]=\"saveBtnClass\"\r\n       (click)=\"saveImage()\">{{ getTextTranslated('saveBtn') }}</button>\r\n    </div>\r\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    declarations: [\n        ImageDrawingComponent\n    ],\n    exports: [\n        ImageDrawingComponent,\n    ],\n    imports: [\n        CommonModule,\n        MatIconModule\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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"}