Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
112 lines
1.1 KiB
TypeScript
112 lines
1.1 KiB
TypeScript
const DIGIT_CHARACTERS = [
|
|
"0",
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
"8",
|
|
"9",
|
|
"A",
|
|
"B",
|
|
"C",
|
|
"D",
|
|
"E",
|
|
"F",
|
|
"G",
|
|
"H",
|
|
"I",
|
|
"J",
|
|
"K",
|
|
"L",
|
|
"M",
|
|
"N",
|
|
"O",
|
|
"P",
|
|
"Q",
|
|
"R",
|
|
"S",
|
|
"T",
|
|
"U",
|
|
"V",
|
|
"W",
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"a",
|
|
"b",
|
|
"c",
|
|
"d",
|
|
"e",
|
|
"f",
|
|
"g",
|
|
"h",
|
|
"i",
|
|
"j",
|
|
"k",
|
|
"l",
|
|
"m",
|
|
"n",
|
|
"o",
|
|
"p",
|
|
"q",
|
|
"r",
|
|
"s",
|
|
"t",
|
|
"u",
|
|
"v",
|
|
"w",
|
|
"x",
|
|
"y",
|
|
"z",
|
|
"#",
|
|
"$",
|
|
"%",
|
|
"*",
|
|
"+",
|
|
",",
|
|
"-",
|
|
".",
|
|
":",
|
|
";",
|
|
"=",
|
|
"?",
|
|
"@",
|
|
"[",
|
|
"]",
|
|
"^",
|
|
"_",
|
|
"{",
|
|
"|",
|
|
"}",
|
|
"~",
|
|
];
|
|
|
|
export const decode83 = (str: string) => {
|
|
let value = 0;
|
|
let digit;
|
|
|
|
for (const c of str) {
|
|
digit = DIGIT_CHARACTERS.indexOf(c);
|
|
value = value * 83 + digit;
|
|
}
|
|
|
|
return value;
|
|
};
|
|
|
|
export const intToRGB = (int: number) => ({
|
|
r: Math.max(0, int >> 16),
|
|
g: Math.max(0, (int >> 8) & 255),
|
|
b: Math.max(0, int & 255),
|
|
});
|
|
|
|
export const getAverageFromBlurhash = (blurhash: string) => {
|
|
if (!blurhash) {
|
|
return null;
|
|
}
|
|
|
|
return intToRGB(decode83(blurhash.slice(2, 6)));
|
|
};
|