Files
discord-decomp/modules/thumbhash/ThumbhashUtils.tsx
T
2026-11-01 12:12:55 +02:00

324 lines
11 KiB
TypeScript

// Metro module 15368 (f15369).
import { thumbHashToApproximateAspectRatio, rgbaToDataURL } from "../../_bundle/thumbHashToRGBA";
const thumbHashToRGBA = function thumbHashToRGBA(a0, r45 = {}) {
let r110, r112, r141, r170, r172, r195, r239, r241, r275, r277;
const { detail = 1, pop = 1 } = r45;
const { PI, min, max, cos, round } = Math;
const r75 = a0[0] | a0[1] << 8 | a0[2] << 16;
const r33 = a0[3] | a0[4] << 8;
const r39 = r75 >> 23;
const r80 = r33 >> 15;
const r55 = max(3, r80 ? r39 ? 5 : 7 : 7 & r33);
const r54 = max(3, r80 ? 7 & r33 : r39 ? 5 : 7);
const r36 = r39 ? (15 & a0[5]) / 15 : 1;
const r31 = (a0[5] >> 4) / 15;
const r87 = r39 ? 6 : 5;
const r34 = (r75 >> 18 & 31) / 31 / 2;
const r53 = [];
const r42 = 0 < r54;
let r94 = 0;
let r95 = 0;
let r22 = 0;
if (r42) {
do {
const r21 = r94;
const r27 = r95;
let r12 = r27 ? 0 : 1;
const r24 = r12 * r54;
const r96 = r55 * (r54 - r27);
let r23 = r21;
let r97 = r23;
if (r24 < r96) {
do {
const r101 = a0[r87 + (r23 >> 1)];
const r11 = r23 + 1;
r53.push(((r101 >> ((1 & r23) << 2) & 15) / 7.5 - 1) * r34);
const r17 = r12 + 1;
r110 = r17 * r54;
r112 = r55 * (r54 - r27);
r23 = r11;
r12 = r17;
r97 = r23;
} while (r110 < r112);
}
r95 = r27 + 1;
r94 = r97;
r22 = r94;
} while (r95 < r54);
}
const r117 = (r33 >> 3 & 63) / 63 * pop;
const r52 = [];
let r118 = 0;
while (true) {
const r119 = r22;
const r120 = r118;
let r121 = r120 ? 0 : 1;
const r122 = r121 * 3;
const r124 = 3 * (3 - r120);
let r125 = r119;
let r126 = r125;
if (r122 < r124) {
do {
const r130 = a0[r87 + (r125 >> 1)];
const r131 = r125 + 1;
r52.push(((r130 >> ((1 & r125) << 2) & 15) / 7.5 - 1) * r117);
const r140 = r121 + 1;
r141 = r140 * 3;
r125 = r131;
r121 = r140;
r126 = r125;
} while (r141 < r124);
}
r118 = r120 + 1;
r22 = r126;
if (!(r118 < 3)) {
const r146 = (r33 >> 9 & 63) / 63 * pop;
const r51 = [];
let r147 = 0;
while (true) {
const r148 = r126;
const r149 = r147;
let r150 = r149 ? 0 : 1;
const r151 = r150 * 3;
const r153 = 3 * (3 - r149);
let r154 = r148;
let r155 = r154;
if (r151 < r153) {
do {
const r159 = a0[r87 + (r154 >> 1)];
const r160 = r154 + 1;
r51.push(((r159 >> ((1 & r154) << 2) & 15) / 7.5 - 1) * r146);
const r169 = r150 + 1;
r170 = r169 * 3;
r154 = r160;
r150 = r169;
r155 = r154;
} while (r170 < r153);
}
r147 = r149 + 1;
r126 = r155;
if (!(r147 < 3)) {
const r171 = [];
if (r39) {
let r173 = 0;
do {
const r174 = r155;
const r175 = r173;
let r176 = r175 ? 0 : 1;
const r177 = r176 * 5;
const r179 = 5 * (5 - r175);
let r180 = r174;
let r181 = r180;
if (r177 < r179) {
do {
const r61 = a0[r87 + (r180 >> 1)];
const r185 = r180 + 1;
r171.push(((r61 >> ((1 & r180) << 2) & 15) / 7.5 - 1) * r31);
const r194 = r176 + 1;
r195 = r194 * 5;
r180 = r185;
r176 = r194;
r181 = r180;
} while (r195 < r179);
}
r173 = r175 + 1;
r155 = r181;
r172 = r171;
} while (r173 < 5);
} else {
r172 = r171;
}
const r202 = thumbHashToApproximateAspectRatio(a0);
const r206 = round(r202 > 1 ? 32 : 32 * r202);
const r209 = round(r202 > 1 ? 32 / r202 : 32);
const uint8Array = new Uint8Array(r206 * r209 * 4);
const r215 = [];
const r216 = [];
const r217 = 0 < r209;
const r225 = (r75 >> 6 & 63) / 31.5 - 1;
const r230 = (r75 >> 12 & 63) / 31.5 - 1;
const r232 = (63 & r75) / 63;
let r234 = 0;
let r235 = 0;
if (r217) {
while (true) {
L83: {
const r236 = 0 < r206;
const r237 = r235 + 0.5;
let r238 = r234;
r239 = r235;
let r240 = 0;
r241 = r238;
if (r236) {
loop52: while (true) {
const r242 = r240;
const r243 = r238;
const r245 = max(r55, r39 ? 5 : 3);
const r246 = 0 < r245;
const r247 = r242 + 0.5;
let r248 = 0;
if (r246) {
do {
r215[r248] = cos(PI / r206 * r247 * r248);
r248 = r248 + 1;
} while (r248 < r245);
}
const r253 = max(r54, r39 ? 5 : 3);
const r254 = 0 < r253;
let r255 = 0;
if (r254) {
do {
r216[r255] = cos(PI / r209 * r237 * r255);
r255 = r255 + 1;
} while (r255 < r253);
}
const r260 = 0 < r54;
let r15 = 0;
let r261 = 0;
let r262 = r232;
let r263 = r262;
if (r260) {
do {
const r13 = r15;
const r10 = r261;
const r14 = r262;
let r7 = r10 ? 0 : 1;
const r1 = 2 * r216[r10];
const r6 = r7 * r54;
const r265 = r55 * (r54 - r10);
let r0 = r13;
let r3 = r14;
let r266 = r0;
let r267 = r3;
if (r6 < r265) {
do {
let r268 = r7 > detail;
const r269 = r7;
const r270 = r0;
const r4 = r3;
if (!r268) {
r268 = r10 > detail;
}
const r5 = r268 ? r4 : r4 + r53[r270] * r215[r269] * r1;
const r274 = r269 + 1;
r0 = r270 + 1;
r275 = r274 * r54;
r277 = r55 * (r54 - r10);
r3 = r5;
r7 = r274;
r266 = r0;
r267 = r3;
} while (r275 < r277);
}
r261 = r10 + 1;
r15 = r266;
r262 = r267;
r263 = r262;
} while (r261 < r54);
}
let r278 = 0;
let r279 = 0;
let r280 = r230;
let r281 = r225;
while (true) {
const r282 = r278;
const r283 = r279;
const r284 = r280;
const r285 = r281;
let r286 = r283 ? 0 : 1;
const r288 = 2 * r216[r283];
const r289 = 3 - r283;
let r290 = r282;
let r291 = r284;
let r292 = r285;
let r293 = r290;
let r294 = r291;
let r295 = r292;
while (r286 < r289) {
const r297 = r215[r286] * r288;
r292 = r292 + r52[r290] * r297;
r291 = r291 + r51[r290] * r297;
r286 = r286 + 1;
r290 = r290 + 1;
r293 = r290;
r294 = r291;
r295 = r292;
}
r279 = r283 + 1;
r278 = r293;
r280 = r294;
r281 = r295;
if (!(r279 < 3)) {
let r301 = 0;
let r302 = 0;
let r303 = r36;
let r304 = r303;
if (r39) {
do {
const r305 = r301;
const r306 = r302;
const r307 = r303;
let r308 = r306 ? 0 : 1;
const r310 = 2 * r216[r306];
const r311 = 5 - r306;
let r312 = r305;
let r313 = r307;
let r314 = r312;
let r315 = r313;
while (r308 < r311) {
r313 = r313 + r172[r312] * r215[r308] * r310;
r308 = r308 + 1;
r312 = r312 + 1;
r314 = r312;
r315 = r313;
}
r302 = r306 + 1;
r301 = r314;
r303 = r315;
r304 = r303;
} while (r302 < 5);
}
const r321 = r263 - 0.6666666666666666 * r295;
const r325 = (3 * r263 - r321 + r294) / 2;
uint8Array[r243] = max(0, 255 * min(1, r325));
uint8Array[r243 + 1] = max(0, 255 * min(1, r325 - r294));
uint8Array[r243 + 2] = max(0, 255 * min(1, r321));
uint8Array[r243 + 3] = max(0, 255 * min(1, r304));
r240 = r242 + 1;
r238 = r243 + 4;
r241 = r238;
if (r240 < r206) {
continue loop52;
}
break L83;
}
}
}
}
}
r235 = r239 + 1;
r234 = r241;
if (!(r235 < r209)) {
break;
}
}
}
return {
w: r206,
h: r209,
rgba: uint8Array
};
}
}
}
}
};
export function createThumbhashImageFromPlaceholder(a0) {
const r12 = thumbHashToRGBA(Uint8Array.from(atob(a0), (a0) => a0.charCodeAt(0)), {
detail: 1,
pop: 1.1
});
return rgbaToDataURL(r12.w, r12.h, r12.rgba);
}
export { thumbHashToRGBA };