The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
at master 1.3 kB view raw
1import sharp from "sharp"; 2 3const cache = new Map<string, string>(); 4 5export default async function getMeanColor(url: string) { 6 7 const cached = cache.get(url); 8 if (cached) return cached; 9 10 const { data } = await sharp( 11 await (await fetch(url)).arrayBuffer() 12 ) 13 .raw() 14 .toBuffer({ resolveWithObject: true }); 15 16 const colorCountMap = new Map<string, number>(); 17 18 for (let i = 0; i < data.length; i += 4) { 19 const red = data[i]; 20 const green = data[i + 1]; 21 const blue = data[i + 2]; 22 23 const color = `${red},${green},${blue}`; 24 25 if (colorCountMap.has(color)) { 26 colorCountMap.set(color, colorCountMap.get(color)! + 1); 27 } else { 28 colorCountMap.set(color, 1); 29 } 30 } 31 32 let maxCount = 0; 33 let mostFrequentColor = ""; 34 35 for (const [color, count] of colorCountMap.entries()) { 36 if (count > maxCount) { 37 maxCount = count; 38 mostFrequentColor = color; 39 } 40 } 41 42 const [red, green, blue] = mostFrequentColor.split(",").map(Number); 43 const hex = `#${red.toString(16).padStart(2, "0")}${green.toString(16).padStart(2, "0")}${blue.toString(16).padStart(2, "0")}`; 44 45 cache.set(url, hex); 46 47 return hex; 48}