From 6df0ad793848fe04c6bd0b22869d5bfce561e372 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Tue, 20 Dec 2022 14:46:16 +0000 Subject: [PATCH] added `contrastYIQ` util --- packages/app/package.json | 1 + packages/app/src/utils/contrastYIQ/index.js | 32 +++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 packages/app/src/utils/contrastYIQ/index.js diff --git a/packages/app/package.json b/packages/app/package.json index ffabb674..465674c4 100755 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -46,6 +46,7 @@ "electron-log": "^4.4.8", "electron-squirrel-startup": "^1.0.0", "evite": "0.13.7", + "fast-average-color": "^9.2.0", "faye": "1.4.0", "feather-reactjs": "2.0.13", "fuse.js": "6.5.3", diff --git a/packages/app/src/utils/contrastYIQ/index.js b/packages/app/src/utils/contrastYIQ/index.js new file mode 100644 index 00000000..82ef0fd4 --- /dev/null +++ b/packages/app/src/utils/contrastYIQ/index.js @@ -0,0 +1,32 @@ +import { FastAverageColor } from "fast-average-color" + +export default class ContrastYIQ { + static get facInstance() { + return new FastAverageColor() + } + + static async averageColor(image) { + return await ContrastYIQ.facInstance.getColorAsync(image) + } + + static fromHex(hexcolor) { + const r = parseInt(hexcolor.substring(1, 3), 16) + const g = parseInt(hexcolor.substring(3, 5), 16) + const b = parseInt(hexcolor.substring(5, 7), 16) + + const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000 + + return (yiq >= 128) ? "black" : "white" + } + + static async fromUrl(url) { + const image = new Image() + + image.src = url + "?" + new Date().getTime() + image.setAttribute("crossOrigin", "") + + const results = await ContrastYIQ.averageColor(image) + + return ContrastYIQ.fromHex(results.hex) + } +} \ No newline at end of file