The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
at master 44 lines 1.2 kB view raw
1import sharp from "sharp"; 2 3const cache = new Map<string, string>(); 4 5export default async function getAverageColor(url: string) { 6 7 const cached = cache.get(url); 8 if (cached) return cached; 9 10 const { data, info } = await sharp( 11 await (await fetch(url)).arrayBuffer() 12 ) 13 .raw() 14 .toBuffer({ resolveWithObject: true }) 15 .catch(() => ({ data: null, info: null })); 16 17 if (!data || !info) return null; 18 19 const { width, height } = info; 20 const pixelCount = width * height; 21 22 let redSum = 0; 23 let greenSum = 0; 24 let blueSum = 0; 25 26 for (let i = 0; i < data.length; i += 4) { 27 if ((data[i] + data[i + 1] + data[1 + 2]) < 10) continue; 28 29 redSum += data[i]; 30 greenSum += data[i + 1]; 31 blueSum += data[i + 2]; 32 } 33 34 const rgb = { 35 r: Math.round(redSum / pixelCount), 36 g: Math.round(greenSum / pixelCount), 37 b: Math.round(blueSum / pixelCount) 38 }; 39 40 const hex = `#${rgb.r.toString(16).padStart(2, "0")}${rgb.g.toString(16).padStart(2, "0")}${rgb.b.toString(16).padStart(2, "0")}`; 41 cache.set(url, hex); 42 43 return hex; 44}