UNPKG

@soarlin/angular-color-thief

Version:

Rewirte ColorThief as a Angular service

1 lines 6.66 kB
{"version":3,"file":"soarlin-angular-color-thief.mjs","sources":["../../../projects/color-thief/src/lib/color-thief.service.ts","../../../projects/color-thief/src/lib/color-thief.module.ts","../../../projects/color-thief/src/public-api.ts","../../../projects/color-thief/src/soarlin-angular-color-thief.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport quantize from 'quantize';\n\ntype RGB = [number, number, number];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorThiefService {\n private canvas: HTMLCanvasElement;\n private context: CanvasRenderingContext2D;\n private pixelCount: number;\n private quality: number;\n\n constructor() {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d')!;\n this.pixelCount = 10000;\n this.quality = 10;\n }\n\n getColor(sourceImage: HTMLImageElement, quality: number = 10): RGB {\n const palette = this.getPalette(sourceImage, 5, quality);\n return palette[0];\n }\n\n getPalette(sourceImage: HTMLImageElement, colorCount: number = 10, quality: number = 10): RGB[] {\n if (typeof colorCount === 'undefined' || colorCount < 2 || colorCount > 256) {\n colorCount = 10;\n }\n if (typeof quality === 'undefined' || quality < 1) {\n quality = 10;\n }\n\n // Create custom CanvasRenderingContext2D from the image\n const imageWidth = sourceImage.naturalWidth || sourceImage.width;\n const imageHeight = sourceImage.naturalHeight || sourceImage.height;\n this.canvas.width = imageWidth;\n this.canvas.height = imageHeight;\n this.context.clearRect(0, 0, imageWidth, imageHeight);\n this.context.drawImage(sourceImage, 0, 0, imageWidth, imageHeight);\n\n const imageData = this.context.getImageData(0, 0, imageWidth, imageHeight);\n const pixels = imageData.data;\n const pixelCount = imageWidth * imageHeight;\n\n const pixelArray: RGB[] = [];\n for (let i = 0, offset, r, g, b, a; i < pixelCount; i = i + quality) {\n offset = i * 4;\n r = pixels[offset + 0];\n g = pixels[offset + 1];\n b = pixels[offset + 2];\n a = pixels[offset + 3];\n\n // If pixel is mostly opaque and not white\n if (a >= 125) {\n if (!(r > 250 && g > 250 && b > 250)) {\n pixelArray.push([r, g, b]);\n }\n }\n }\n\n // Use quantize to build the color palette\n const cmap = quantize(pixelArray, colorCount);\n const palette = cmap ? cmap.palette() as RGB[] : [];\n\n return palette;\n }\n\n async getPaletteFromUrl(imageUrl: string, count = 5, quality = 10): Promise<RGB[]> {\n try {\n const img = new Image();\n img.src = imageUrl;\n\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = reject;\n });\n\n return this.getPalette(img, count, quality);\n } catch (error) {\n throw new Error(`Failed to load image: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ColorThiefService } from './color-thief.service';\n\n@NgModule({\n providers: [ColorThiefService]\n})\nexport class ColorThiefModule { }","/*\n * Public API Surface of ng-color-thief\n */\n\nexport * from './lib/color-thief.service';\nexport * from './lib/color-thief.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}