{"version":3,"file":"sowatech-shared-image-transform.mjs","sources":["../../../projects/shared/image-transform/image-transform-builder.ts","../../../projects/shared/image-transform/image-transform.service.ts","../../../projects/shared/image-transform/sowatech-shared-image-transform.ts"],"sourcesContent":["import exifr from 'exifr';\r\n\r\nimport { Coords, CropType, ImageTransformMarkerOptions } from './image-transform.types';\r\n\r\nexport class ImageTransformBuilder {\r\n\r\n    private imageType: string;\r\n    private imageOrientation: number;\r\n    private canvas: HTMLCanvasElement;\r\n\r\n    protected constructor(imageType: string, orientation: number, canvas: HTMLCanvasElement) {\r\n        this.imageType = imageType;\r\n        this.imageOrientation = orientation;\r\n        this.canvas = canvas;\r\n    }\r\n\r\n    public static async loadFromSrcStringAsync(base64SrcString: string): Promise<ImageTransformBuilder> {\r\n        const imgType = `image/${base64SrcString.match(/(data:image\\/)(jpe?g|png)/i)[2]}`;\r\n        if (!base64SrcString.startsWith('data'))\r\n            base64SrcString = 'data:image/jpeg;base64,' + base64SrcString;\r\n\r\n        const orientation = await ImageTransformBuilder.extractOrientationAsync(base64SrcString);\r\n        const canvas = await this.initCanvasAsync(base64SrcString);\r\n        return new ImageTransformBuilder(imgType, orientation, canvas);\r\n    }\r\n\r\n    public static loadFromFileAsync(file: File): Promise<ImageTransformBuilder> {\r\n        const reader = new FileReader();\r\n        return new Promise<ImageTransformBuilder>((resolve, reject) => {\r\n            reader.onload = (e: ProgressEvent<FileReader>) => resolve(ImageTransformBuilder.loadFromSrcStringAsync(e.target.result as string));\r\n            reader.onerror = (e: ProgressEvent<FileReader>) => reject(e.target.error);\r\n            reader.readAsDataURL(file);\r\n        });\r\n    }\r\n\r\n    public toBase64(quality?: number): string {\r\n        return this.canvas.toDataURL(this.imageType, quality);\r\n    }\r\n\r\n    public copyInstance(): ImageTransformBuilder {\r\n        const canvasCopy = document.createElement('canvas');\r\n        canvasCopy.width = this.canvas.width;\r\n        canvasCopy.height = this.canvas.height;\r\n        canvasCopy.getContext('2d').drawImage(this.canvas, 0, 0);\r\n        return new ImageTransformBuilder(this.imageType, this.imageOrientation, canvasCopy);\r\n    }\r\n\r\n    public fixOrientation(): ImageTransformBuilder {\r\n        //http://jpegclub.org/exif_orientation.html\r\n        switch (this.imageOrientation) {\r\n            case 1:\r\n            case 2:\r\n            case 4:\r\n            case 5:\r\n            case 7:\r\n                return; //unchanged\r\n            case 3:\r\n                this.rotate(180);\r\n                break;\r\n            case 6:\r\n                this.rotate(90);\r\n                break;\r\n            case 8:\r\n                this.rotate(270);\r\n                break;\r\n            default:\r\n                throw new Error('Unknown orientation => ' + this.imageOrientation);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public shrinkTo(newWidth: number, newHeight: number): ImageTransformBuilder {\r\n        if (this.canvas.width >= this.canvas.height) {\r\n            newWidth = Math.min(this.canvas.width, newWidth);\r\n            newHeight = Math.min(this.canvas.width, newWidth);\r\n        } else {\r\n            newWidth = Math.min(this.canvas.height, newHeight);\r\n            newHeight = Math.min(this.canvas.height, newHeight);\r\n        }\r\n\r\n        const shrinked = document.createElement('canvas');\r\n        if (this.canvas.width >= this.canvas.height) {\r\n            const scaleFactorWidth = this.canvas.width > 0 ? newWidth / this.canvas.width : 0;\r\n            shrinked.width = newWidth;\r\n            shrinked.height = this.canvas.height * scaleFactorWidth;\r\n        } else {\r\n            const scaleFactorHeight = this.canvas.height > 0 ? newHeight / this.canvas.height : 0;\r\n            shrinked.width = this.canvas.width * scaleFactorHeight;\r\n            shrinked.height = newHeight;\r\n        }\r\n\r\n        shrinked.getContext('2d').drawImage(this.canvas, 0, 0, shrinked.width, shrinked.height);\r\n        this.canvas = shrinked;\r\n        return this;\r\n    }\r\n\r\n    public crop(cropType: CropType, cropCoords?: Coords): ImageTransformBuilder {\r\n        if (cropType === 'square') {\r\n            const isLandscape = this.canvas.width > this.canvas.height;\r\n            const minImageSize = Math.min(this.canvas.width, this.canvas.height);\r\n            cropCoords.left = isLandscape ? (this.canvas.width / 2) - (minImageSize / 2) : 0;\r\n            cropCoords.top = isLandscape ? 0 : (this.canvas.height / 2) - (minImageSize / 2);\r\n            cropCoords.width = minImageSize;\r\n            cropCoords.height = minImageSize;\r\n        } else if (cropType === 'coords') {\r\n            cropCoords.left ??= (this.canvas.width / 2) - (cropCoords.width / 2);\r\n            cropCoords.top ??= (this.canvas.height / 2) - (cropCoords.height / 2);\r\n            cropCoords.width ??= 0;\r\n            cropCoords.height ??= 0;\r\n        }\r\n\r\n        const imageData = this.canvas.getContext('2d').getImageData(cropCoords.top, cropCoords.left, cropCoords.width, cropCoords.height);\r\n        const cropped = document.createElement('canvas');\r\n        cropped.width = imageData.width;\r\n        cropped.height = imageData.height;\r\n\r\n        cropped.getContext('2d').putImageData(imageData, 0, 0);\r\n        this.canvas = cropped;\r\n        return this;\r\n    }\r\n\r\n    public setMarker(options: ImageTransformMarkerOptions): ImageTransformBuilder {\r\n        options.markercolor ??= 'red';\r\n        const defaultMarkerType = 'rect';\r\n        options.markertype ??= defaultMarkerType;\r\n\r\n        const context = this.canvas.getContext('2d');\r\n        context.strokeStyle = options.markercolor;\r\n        if (options.markertype === defaultMarkerType)\r\n            context.strokeRect(options.left, options.top, options.width, options.height);\r\n        else {\r\n            context.beginPath();\r\n            const half = options.width / 2;\r\n            context.lineWidth = options.lineWidth;\r\n            context.arc(options.left + half, options.top + half, half, 0, 2 * Math.PI);\r\n            context.stroke();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public setWatermark(text: string, fontSize?: number): ImageTransformBuilder {\r\n        const context = this.canvas.getContext('2d');\r\n        context.save();\r\n        context.font = `${fontSize ?? 46}pt Arial`;\r\n        context.fillStyle = 'white';\r\n        context.shadowColor = 'grey';\r\n        context.shadowOffsetX = 1;\r\n        context.shadowOffsetY = 1;\r\n        context.shadowBlur = 10;\r\n        context.textBaseline = 'alphabetic';\r\n        context.fillText(text, 20, this.canvas.height - 20);\r\n        context.restore();\r\n        return this;\r\n    }\r\n\r\n    public rotate(angleInDegrees: -90 | 90 | 180 | 270): void {\r\n        const rotated = document.createElement('canvas');\r\n        rotated.width = angleInDegrees === 180 ? this.canvas.width : this.canvas.height;\r\n        rotated.height = angleInDegrees === 180 ? this.canvas.height : this.canvas.width;\r\n        const rotatedContext = rotated.getContext('2d');\r\n\r\n        rotatedContext.save();\r\n        rotatedContext.translate(rotated.width / 2, rotated.height / 2);\r\n        rotatedContext.rotate(angleInDegrees * Math.PI / 180);\r\n        rotatedContext.drawImage(this.canvas, -this.canvas.width / 2, -this.canvas.height / 2);\r\n        rotatedContext.restore();\r\n\r\n        this.canvas = rotated;\r\n    }\r\n\r\n    public static createImageAsync(base64: string): Promise<HTMLImageElement> {\r\n        return new Promise((resolve, reject) => {\r\n            const img = new Image();\r\n            img.onload = () => resolve(img);\r\n            img.onerror = (e) => reject(e);\r\n            img.src = base64;\r\n        });\r\n    }\r\n\r\n    private static async initCanvasAsync(base64: string): Promise<HTMLCanvasElement> {\r\n        const img = await this.createImageAsync(base64);\r\n        const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n        canvas.width = img.width;\r\n        canvas.height = img.height;\r\n        canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);\r\n        return canvas;\r\n    }\r\n\r\n    private static async extractOrientationAsync(imageData: string | File): Promise<number> {\r\n        let exifOrientation: number | undefined;\r\n        try {\r\n            exifOrientation = await exifr.orientation(imageData);\r\n        } catch (error) {\r\n            exifOrientation = 1;\r\n        }\r\n        exifOrientation = parseInt((exifOrientation ?? 1).toString(), 10);\r\n        return exifOrientation;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport exifr from 'exifr';\r\n\r\nimport { CropOptions, ImageTransformMarkerOptions, ImageTransformShrinkOptions } from './image-transform.types';\r\n\r\n/**\r\n * @deprecated Use ImageTransformBuilder instead\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ImageTransformService {\r\n\r\n  constructor(\r\n    private logger: LoggerService) {\r\n  }\r\n\r\n  public getBase64FromFile(file: File): Promise<string> {\r\n    return new Promise((resolve, reject) => {\r\n      const reader = new FileReader();\r\n      reader.onload = (e: ProgressEvent) => resolve((e.target as any).result);\r\n      reader.onerror = (e) => reject(e);\r\n      reader.readAsDataURL(file);\r\n    });\r\n  }\r\n\r\n  public getBase64ImageSrcString(base64: string): string {\r\n    return 'data:image/jpeg;base64,' + base64;\r\n  }\r\n\r\n  public getBase64FromImageSrcUrl(dataurlBase64: string): string {\r\n    return dataurlBase64.replace(/data:image\\/jpeg;base64,/g, '');\r\n  }\r\n\r\n  public async shrinkImage(base64: string, options: ImageTransformShrinkOptions): Promise<string> {\r\n    this.logger.log('ImageTransformService.shrinkImage');\r\n\r\n    try {\r\n      const imageBase64 = base64.startsWith('data') ? base64 : this.getBase64ImageSrcString(base64);\r\n      const img = await this.loadImage(imageBase64);\r\n\r\n      if (img.width >= img.height) {\r\n        options.width = Math.min(img.width, options.width);\r\n        options.height = Math.min(img.width, options.width);\r\n      }\r\n      else {\r\n        options.width = Math.min(img.height, options.height);\r\n        options.height = Math.min(img.height, options.height);\r\n      }\r\n\r\n      const canvas = document.createElement('canvas');\r\n      canvas.width = options.width;\r\n      canvas.height = options.height;\r\n\r\n      this.logger.log('ImageTransformService.shrinkImage/img.onload');\r\n      const isLandscape = img.width >= img.height;\r\n      let scaleFactor = 0;\r\n      let width = 0;\r\n      let height = 0;\r\n      if (isLandscape) {\r\n        scaleFactor = img.width > 0 ? canvas.width / img.width : 0;\r\n        width = canvas.width;\r\n        height = img.height * scaleFactor;\r\n        canvas.height = height;\r\n      }\r\n      else {\r\n        scaleFactor = img.height > 0 ? canvas.height / img.height : 0;\r\n        width = img.width * scaleFactor;\r\n        height = canvas.height;\r\n        canvas.width = width;\r\n      }\r\n      const context = canvas.getContext('2d');\r\n      context.drawImage(img, 0, 0, width, height);\r\n      const dataurl = canvas.toDataURL('image/jpeg', options.quality);\r\n      const resultBase64 = this.getBase64FromImageSrcUrl(dataurl);\r\n\r\n      return Promise.resolve(resultBase64);\r\n    } catch (err) {\r\n      return Promise.reject(err);\r\n    }\r\n  }\r\n\r\n  public loadImage(base64: string): Promise<HTMLImageElement> {\r\n    return new Promise((resolve, reject) => {\r\n      const img = new Image();\r\n      img.onload = (e) => resolve(img);\r\n      img.onerror = (e) => reject(e);\r\n      img.src = base64;\r\n    });\r\n  }\r\n\r\n  public async setMarkerOnImage(base64: string, options: ImageTransformMarkerOptions): Promise<string> {\r\n    this.logger.log('ImageTransformService.setMarkerOnImage');\r\n\r\n    try {\r\n      const img = await this.loadImage(this.getBase64ImageSrcString(base64));\r\n\r\n      this.logger.log('ImageTransformService.setMarkerOnImage/img.onload');\r\n      const canvas = document.createElement('canvas');\r\n      canvas.width = img.width;\r\n      canvas.height = img.height;\r\n\r\n      const context = canvas.getContext('2d');\r\n      context.drawImage(img, 0, 0);\r\n      context.translate(0.5, 0.5);\r\n\r\n      const markercolor = options.markercolor ? options.markercolor : 'red';\r\n      context.strokeStyle = markercolor;\r\n\r\n      const markertype = options.markertype ? options.markertype : 'rect';\r\n      if (markertype == 'rect')\r\n        context.strokeRect(options.left, options.top, options.width, options.height);\r\n\r\n      else {\r\n        context.beginPath();\r\n        const half = options.width / 2;\r\n        context.lineWidth = options.lineWidth;\r\n        context.arc(options.left + half, options.top + half, half, 0, 2 * Math.PI);\r\n        context.stroke();\r\n      }\r\n      const dataurl = canvas.toDataURL('image/jpeg');\r\n      const resultBase64 = dataurl.replace(/data:image\\/jpeg;base64,/g, '');\r\n\r\n      return Promise.resolve(resultBase64);\r\n    } catch (err) {\r\n      return Promise.reject(err);\r\n    }\r\n  }\r\n\r\n  public async fixOrientation(base64: string): Promise<string> {\r\n    this.logger.log('ImageTransformService.fixOrientation');\r\n    const exifOrientation = await exifr.orientation(base64);\r\n    const orientation: number = parseInt((exifOrientation || 1).toString(), 10);\r\n    return this.reOrient(base64, orientation);\r\n  }\r\n\r\n  private base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n    this.logger.log('ImageTransformService.base64ToArrayBuffer');\r\n    const binaryString = window.atob(base64);\r\n    const len = binaryString.length;\r\n    const bytes = new Uint8Array(len);\r\n\r\n    for (let i = 0; i < len; i++)\r\n      bytes[i] = binaryString.charCodeAt(i);\r\n\r\n    return bytes.buffer as ArrayBuffer;\r\n  }\r\n\r\n  private reOrient(base64: string, orientation: number): Promise<string> {\r\n    this.logger.log('ImageTransformService.reOrient');\r\n    //http://jpegclub.org/exif_orientation.html\r\n    switch (orientation) {\r\n      case 1:\r\n      case 2:\r\n      case 4:\r\n      case 5:\r\n      case 7:\r\n        if (orientation > 1) this.logger.warn('ImageTransformService/reOrient: Unhandled EXIF Orientation=' + orientation.toString());\r\n        return Promise.resolve(base64);//unchanged\r\n      case 3:\r\n        return this.rotateImage(base64, 180);\r\n      case 6:\r\n        return this.rotateImage(base64, 90);\r\n      case 8:\r\n        return this.rotateImage(base64, 270);\r\n      default:\r\n        throw new Error('Unknown orientation => ' + orientation);\r\n    }\r\n  }\r\n\r\n  private async rotateImage(base64: string, angleInDegrees: number): Promise<string> {\r\n    this.logger.log('ImageTransformService.rotateImage');\r\n\r\n\r\n    try {\r\n      const img = await this.loadImage(this.getBase64ImageSrcString(base64));\r\n\r\n      this.logger.log('ImageTransformService.rotateImage/img.onload');\r\n      const canvas = document.createElement('canvas');\r\n      const maxsize = Math.max(img.width, img.height);\r\n      canvas.width = maxsize;\r\n      canvas.height = maxsize;\r\n\r\n      const context = canvas.getContext('2d');\r\n      context.save();\r\n      context.translate(canvas.width / 2, canvas.height / 2);\r\n      context.rotate(angleInDegrees * Math.PI / 180);\r\n      context.drawImage(img, -img.width / 2, -img.height / 2);\r\n      context.restore();\r\n\r\n      const dataurl = canvas.toDataURL('image/jpeg');\r\n      const resultBase64 = this.getBase64FromImageSrcUrl(dataurl);\r\n\r\n      //bei drehung um vielfaches von 90 kann bild wieder sauber geschnitten werden\r\n      if (angleInDegrees == 90 || angleInDegrees == 270 || angleInDegrees == -90 || angleInDegrees == 180) {\r\n        const cropwidth = angleInDegrees == 180 ? img.width : img.height;\r\n        const cropheight = angleInDegrees == 180 ? img.height : img.width;\r\n        const croppedImage = await this.cropImage(resultBase64, { cropCoords: { width: cropwidth, height: cropheight } });\r\n        return Promise.resolve(croppedImage);\r\n      }\r\n      else\r\n        return Promise.resolve(resultBase64);\r\n\r\n    }\r\n    catch (err) {\r\n      return Promise.reject(err);\r\n    }\r\n\r\n  }\r\n\r\n  public setWatermark(base64: string, text: string, config?: { x: number; y: number; }): Promise<string> {\r\n    this.logger.log('ImageTransformService.setWatermark');\r\n\r\n    return new Promise((resolve, reject) => {\r\n      const img = new Image();\r\n      img.src = this.getBase64ImageSrcString(base64);\r\n      img.onload = () => {\r\n        this.logger.log('ImageTransformService.setWatermark/img.onload');\r\n        const canvas = document.createElement('canvas');\r\n        canvas.width = img.width;\r\n        canvas.height = img.height;\r\n\r\n        const context = canvas.getContext('2d');\r\n        context.save();\r\n        context.drawImage(img, 0, 0);\r\n        context.font = '46pt Arial';\r\n        context.fillStyle = 'white';\r\n        context.shadowColor = 'grey';\r\n        context.shadowOffsetX = 1;\r\n        context.shadowOffsetY = 1;\r\n        context.shadowBlur = 10;\r\n        context.textBaseline = 'alphabetic';\r\n        context.scale(1, 1);\r\n        context.fillText(text, 20, img.height - 20);\r\n        context.restore();\r\n\r\n        const dataurl = canvas.toDataURL('image/jpeg');\r\n        return resolve(this.getBase64FromImageSrcUrl(dataurl));\r\n      };\r\n      img.onerror = (err) => reject(err);\r\n    });\r\n  }\r\n\r\n  public async cropImage(base64: string, options: CropOptions): Promise<string> {\r\n    this.logger.log('ImageTransformService.cropImage');\r\n\r\n    try {\r\n      const img = await this.loadImage(this.getBase64ImageSrcString(base64));\r\n\r\n      this.logger.log('ImageTransformService.cropImage/img.onload');\r\n      const canvas = document.createElement('canvas');\r\n\r\n      let left = 0;\r\n      let top = 0;\r\n      let width = 0;\r\n      let height = 0;\r\n      let validOptions = true;\r\n\r\n      const cropType = options.cropType || 'coords';\r\n      if (cropType == 'square') {\r\n        const isLandscape = img.width > img.height;\r\n        const minImageSize = Math.min(img.width, img.height);\r\n        left = isLandscape ? img.width / 2 - minImageSize / 2 : 0;\r\n        top = isLandscape ? 0 : img.height / 2 - minImageSize / 2;\r\n        width = minImageSize;\r\n        height = minImageSize;\r\n      }\r\n      if (cropType == 'coords') {\r\n        if (options.cropCoords) {\r\n          left = options.cropCoords.left || img.width / 2 - options.cropCoords.width / 2;\r\n          top = options.cropCoords.top || img.height / 2 - options.cropCoords.height / 2;\r\n          width = options.cropCoords.width;\r\n          height = options.cropCoords.height;\r\n        }\r\n        else\r\n          validOptions = false;\r\n\r\n      }\r\n      if (cropType != 'square' && cropType != 'coords') validOptions = false;\r\n\r\n      canvas.width = width;\r\n      canvas.height = height;\r\n\r\n      const context = canvas.getContext('2d');\r\n      context.drawImage(img, left, top, width, height, 0, 0, width, height);\r\n\r\n      const dataurl = canvas.toDataURL('image/jpeg');\r\n      const resultBase64 = this.getBase64FromImageSrcUrl(dataurl);\r\n      return resultBase64;\r\n    }\r\n    catch (err) {\r\n      return Promise.reject(err);\r\n    }\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}