A music player that connects to your cloud/distributed storage.
at main 1.3 kB view raw
1// 🚀 2 3 4export function init(app) { 5 app.ports.pickAverageBackgroundColor.subscribe((src: string) => { 6 const avgColor = pickAverageBackgroundColor(src) 7 if (avgColor) app.ports.setAverageBackgroundColor.send(avgColor) 8 }) 9} 10 11 12 13// 🛠️ 14 15 16function averageColorOfImage(img: HTMLImageElement): { r: number, g: number, b: number } | null { 17 const canvas = document.createElement("canvas") 18 const ctx = canvas.getContext("2d") 19 canvas.width = img.naturalWidth 20 canvas.height = img.naturalHeight 21 22 if (!ctx) return null 23 24 ctx.drawImage(img, 0, 0) 25 26 const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height) 27 const color = { r: 0, g: 0, b: 0 } 28 29 for (let i = 0, l = imageData.data.length; i < l; i += 4) { 30 color.r += imageData.data[i] 31 color.g += imageData.data[i + 1] 32 color.b += imageData.data[i + 2] 33 } 34 35 color.r = Math.floor(color.r / (imageData.data.length / 4)) 36 color.g = Math.floor(color.g / (imageData.data.length / 4)) 37 color.b = Math.floor(color.b / (imageData.data.length / 4)) 38 39 return color 40} 41 42 43function pickAverageBackgroundColor(src: string): { r: number, g: number, b: number } | null { 44 const img = document.querySelector(`img[src$="${src}"]`) 45 return img ? averageColorOfImage(img as HTMLImageElement) : null 46}