decord/source/14612_thumbHashToRGBA.js
2026-08-24 06:08:38 +00:00

706 lines
20 KiB
JavaScript

// Module ID: 14612
// Function ID: 14613
// Name: thumbHashToRGBA
// Dependencies: [32]
// Exports: rgbaToThumbHash, thumbHashToApproximateAspectRatio, thumbHashToAverageRGBA, thumbHashToDataURL
// Module 14612 (thumbHashToRGBA)
import closure_0 from "_slicedToArray" /* 32 */;
function thumbHashToRGBA(arg0) {
let diff3 = arg0[0] | arg0[1] << 8 | arg0[2] << 16;
const result = (63 & diff3) / 63;
const diff = (diff3 >> 6 & 63) / 31.5 - 1;
const diff1 = (diff3 >> 12 & 63) / 31.5 - 1;
const result1 = (diff3 >> 18 & 31) / 31;
if ((arg0[3] | arg0[4] << 8) >> 15) {
let num = 7;
if (tmp7) {
num = 5;
}
let tmp9 = num;
} else {
tmp9 = 7 & tmp2;
}
const maxResult = max(3, tmp9);
if ((arg0[3] | arg0[4] << 8) >> 15) {
let num2 = 7 & tmp2;
} else {
num2 = 7;
if (tmp7) {
num2 = 5;
}
}
const maxResult1 = max(3, num2);
let num3 = 1;
if (diff3 >> 23) {
num3 = (15 & arg0[5]) / 15;
}
let num4 = 5;
const result2 = (arg0[5] >> 4) / 15;
if (diff3 >> 23) {
num4 = 6;
}
const items = [];
let num5 = 0;
let num6 = 0;
let num7 = 0;
if (0 < maxResult1) {
do {
let tmp13 = num5;
let tmp14 = num6;
let num8 = 1;
if (num6) {
num8 = 0;
}
let tmp15 = num5;
let tmp16 = num5;
if (num8 * maxResult1 < maxResult * (maxResult1 - num6)) {
do {
let sum = tmp15 + 1;
let arr = items.push(((arg0[num4 + (tmp15 >> 1)] >> ((1 & tmp15) << 2) & 15) / 7.5 - 1) * result1);
let sum1 = num8 + 1;
tmp15 = sum;
num8 = sum1;
tmp16 = sum;
result3 = sum1 * maxResult1;
result4 = maxResult * (maxResult1 - num6);
} while (result3 < result4);
}
num6 = num6 + 1;
num5 = tmp16;
num7 = tmp16;
} while (num6 < maxResult1);
}
const items1 = [];
let num9 = 0;
do {
let tmp23 = num7;
let tmp24 = num9;
let num10 = 1;
if (num9) {
num10 = 0;
}
let result5 = 3 * (3 - num9);
let tmp26 = num7;
let tmp27 = num7;
if (num10 * 3 < result5) {
do {
let sum2 = tmp26 + 1;
arr = items1.push(((arg0[num4 + (tmp26 >> 1)] >> ((1 & tmp26) << 2) & 15) / 7.5 - 1) * tmp22);
let sum3 = num10 + 1;
tmp26 = sum2;
num10 = sum3;
tmp27 = sum2;
result6 = sum3 * 3;
} while (result6 < result5);
}
num9 = num9 + 1;
num7 = tmp27;
} while (num9 < 3);
const items2 = [];
let num11 = 0;
do {
let tmp33 = tmp27;
let tmp34 = num11;
let num12 = 1;
if (num11) {
num12 = 0;
}
let result7 = 3 * (3 - num11);
let tmp36 = tmp27;
let tmp37 = tmp27;
if (num12 * 3 < result7) {
do {
let sum4 = tmp36 + 1;
let arr1 = items2.push(((arg0[num4 + (tmp36 >> 1)] >> ((1 & tmp36) << 2) & 15) / 7.5 - 1) * tmp32);
let sum5 = num12 + 1;
tmp36 = sum4;
num12 = sum5;
tmp37 = sum4;
result8 = sum5 * 3;
} while (result8 < result7);
}
num11 = num11 + 1;
tmp27 = tmp37;
} while (num11 < 3);
let tmp42 = tmp7;
if (diff3 >> 23) {
const items3 = [];
let num13 = 0;
do {
let tmp43 = tmp37;
let tmp44 = num13;
let num14 = 1;
if (num13) {
num14 = 0;
}
let result9 = 5 * (5 - num13);
let tmp46 = tmp37;
let tmp47 = tmp37;
if (num14 * 5 < result9) {
do {
let sum6 = tmp46 + 1;
let arr2 = items3.push(((arg0[num4 + (tmp46 >> 1)] >> ((1 & tmp46) << 2) & 15) / 7.5 - 1) * result2);
let sum7 = num14 + 1;
tmp46 = sum6;
num14 = sum7;
tmp47 = sum6;
result10 = sum7 * 5;
} while (result10 < result9);
}
num13 = num13 + 1;
tmp37 = tmp47;
tmp42 = items3;
} while (num13 < 5);
}
if (128 & arg0[4]) {
let num15 = 7;
if (tmp53) {
num15 = 5;
}
let tmp55 = num15;
} else {
tmp55 = 7 & tmp52;
}
if (128 & arg0[4]) {
let num16 = 7 & tmp52;
} else {
num16 = 7;
if (tmp53) {
num16 = 5;
}
}
const result11 = tmp55 / num16;
let num17 = 32;
if (1 >= result11) {
num17 = 32 * result11;
}
const w = round(num17);
let num18 = 32;
if (1 < result11) {
num18 = 32 / result11;
}
const h = round(num18);
const rgba = new Uint8Array(w * h * 4);
const items4 = [];
let num19 = 0;
let num20 = 0;
if (0 < h) {
do {
let sum14 = num19;
let tmp62 = num20;
let num21 = 0;
let tmp63 = num19;
if (0 < w) {
do {
let tmp64 = num21;
let tmp65 = sum14;
let num22 = 3;
if (tmp7) {
num22 = 5;
}
let maxResult2 = max(maxResult, num22);
for (let num23 = 0; num23 < maxResult2; num23 = num23 + 1) {
items4[num23] = cos(PI / w * tmp67 * num23);
}
let num24 = 3;
if (tmp7) {
num24 = 5;
}
let maxResult3 = max(maxResult1, num24);
for (let num25 = 0; num25 < maxResult3; num25 = num25 + 1) {
[][num25] = cos(PI / h * tmp60 * num25);
}
let num26 = 0;
let num27 = 0;
let tmp69 = result;
let tmp70 = result;
if (0 < maxResult1) {
do {
let tmp71 = num26;
let tmp72 = num27;
let tmp73 = tmp69;
let num28 = 1;
if (num27) {
num28 = 0;
}
let sum10 = num26;
let sum8 = tmp69;
let tmp77 = num26;
let tmp78 = tmp69;
if (num28 * maxResult1 < maxResult * (maxResult1 - num27)) {
do {
sum8 = sum8 + items[sum10] * items4[num28] * tmp74;
let sum9 = num28 + 1;
sum10 = sum10 + 1;
num28 = sum9;
tmp77 = sum10;
tmp78 = sum8;
result12 = sum9 * maxResult1;
result13 = maxResult * (maxResult1 - num27);
} while (result12 < result13);
}
num27 = num27 + 1;
num26 = tmp77;
tmp69 = tmp78;
tmp70 = tmp78;
} while (num27 < maxResult1);
}
let num29 = 0;
let num30 = 0;
let tmp82 = diff1;
let tmp83 = diff;
do {
let tmp84 = num29;
let tmp85 = num30;
let tmp86 = tmp82;
let tmp87 = tmp83;
let num31 = 1;
if (num30) {
num31 = 0;
}
let diff2 = 3 - num30;
let sum13 = num29;
let sum12 = tmp82;
let sum11 = tmp83;
let tmp93 = num29;
let tmp94 = tmp82;
let tmp95 = tmp83;
if (num31 < diff2) {
do {
let result14 = items4[num31] * tmp88;
sum11 = sum11 + items1[sum13] * result14;
sum12 = sum12 + items2[sum13] * result14;
num31 = num31 + 1;
sum13 = sum13 + 1;
tmp93 = sum13;
tmp94 = sum12;
tmp95 = sum11;
} while (num31 < diff2);
}
num30 = num30 + 1;
num29 = tmp93;
tmp82 = tmp94;
tmp83 = tmp95;
} while (num30 < 3);
let num32 = 0;
let num33 = 0;
let tmp97 = num3;
let tmp98 = num3;
if (tmp7) {
do {
let tmp99 = num32;
diff3 = num33;
diff3 = tmp97;
let num34 = 1;
if (num33) {
num34 = 0;
}
diff3 = 5 - num33;
diff3 = num32;
diff3 = tmp97;
diff3 = num32;
diff3 = tmp97;
if (num34 < diff3) {
do {
diff3 = diff3 + tmp42[diff3] * items4[num34] * diff3;
num34 = num34 + 1;
diff3 = diff3 + 1;
} while (num34 < diff3);
}
num33 = num33 + 1;
num32 = diff3;
tmp97 = diff3;
tmp98 = diff3;
} while (num33 < 5);
}
diff3 = tmp70 - 0.6666666666666666 * tmp95;
diff3 = (3 * tmp70 - diff3 + tmp94) / 2;
rgba[sum14] = max(0, 255 * min(1, diff3));
rgba[sum14 + 1] = max(0, 255 * min(1, diff3 - tmp94));
rgba[sum14 + 2] = max(0, 255 * min(1, diff3));
rgba[sum14 + 3] = max(0, 255 * min(1, tmp98));
num21 = num21 + 1;
sum14 = sum14 + 4;
tmp63 = sum14;
} while (num21 < w);
}
num20 = num20 + 1;
num19 = tmp63;
} while (num20 < h);
}
return { w, h, rgba };
}
function rgbaToDataURL(w, h, rgba) {
let sum2;
const sum = 4 * w + 1;
const sum1 = 6 + h * (5 + sum);
const items = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, w >> 8, 255 & w, 0, 0, h >> 8, 255 & h, 8, 6, 0, 0, 0, 0, 0, 0, 0, sum1 >>> 24, sum1 >> 16 & 255, sum1 >> 8 & 255, 255 & sum1, 73, 68, 65, 84, 120, 1];
const items1 = [0, 498536548, 997073096, 651767980, 1994146192, 1802195444, 1303535960, 1342533948, -306674912, -267414716, -690576408, -882789492, -1687895376, -2032938284, -1609899400, -1111625188];
const diff = sum - 1;
let sum4 = diff;
let num = 0;
let num2 = 0;
let num3 = 0;
let num4 = 1;
let num5 = 0;
let num6 = 1;
if (0 < h) {
do {
sum2 = num2 + 1;
let tmp10 = sum4;
let tmp11 = num;
let tmp12 = num3;
let tmp13 = num4;
let num7 = 1;
if (sum2 < h) {
num7 = 0;
}
let tmp14 = items;
let tmp15 = num7;
let tmp16 = tmp7;
let tmp17 = tmp4;
let tmp18 = tmp6;
let tmp19 = tmp5;
let num8 = 0;
let arr = items.push(num7, tmp7, tmp4, tmp6, tmp5, 0);
let result = (num3 + num4) % 65521;
let sum3 = num;
let tmp23 = num4;
let tmp24 = result;
let tmp25 = num4;
let tmp26 = num;
if (num < sum4) {
do {
let tmp27 = 255 & rgba[sum3];
arr = items.push(tmp27);
let result1 = (tmp23 + tmp27) % 65521;
result = (result + result1) % 65521;
sum3 = sum3 + 1;
tmp23 = result1;
tmp24 = result;
tmp25 = result1;
tmp26 = sum3;
} while (sum3 < sum4);
}
sum4 = sum4 + diff;
num = tmp26;
num3 = tmp24;
num4 = tmp25;
num5 = tmp24;
num6 = tmp25;
num2 = sum2;
} while (sum2 < h);
}
items.push(num5 >> 8, 255 & num5, num6 >> 8, 255 & num6, 0, 0, 0, 0, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130);
const items2 = [[12, 29], ];
const items3 = [37, 41 + sum1];
items2[1] = items3;
while (tmp31 !== undefined) {
let tmp33 = callback;
let tmp34 = callback(tmp32, 2);
[tmp35, tmp36] = tmp34;
let tmp37 = tmp36;
let num9 = -1;
let tmp38 = tmp35;
if (tmp35 < tmp36) {
do {
let tmp39 = num9;
let tmp40 = tmp38;
let tmp41 = num9 ^ items[tmp38];
let tmp42 = tmp41;
let tmp43 = tmp41 >>> 4 ^ items1[15 & tmp41];
let tmp44 = tmp43;
num9 = tmp43 >>> 4 ^ items1[15 & tmp43];
sum5 = tmp38 + 1;
tmp38 = sum5;
let tmp46 = tmp36;
} while (sum5 < tmp37);
}
let tmp47 = num9;
let tmp48 = ~num9;
let tmp49 = tmp48;
let tmp50 = tmp36;
let tmp51 = +tmp37;
let sum6 = tmp51 + 1;
let tmp53 = sum6;
items[tmp51] = tmp48 >>> 24;
let tmp54 = +sum6;
let sum7 = tmp54 + 1;
let tmp56 = sum7;
items[tmp54] = tmp48 >> 16 & 255;
let tmp57 = +sum7;
let sum8 = tmp57 + 1;
let tmp59 = sum8;
items[tmp57] = tmp48 >> 8 & 255;
let tmp60 = +sum8;
let sum9 = tmp60 + 1;
items[tmp60] = 255 & tmp48;
continue;
}
const items4 = [...items];
return "data:image/png;base64," + btoa(String.fromCharCode.apply(items4));
}
export const rgbaToThumbHash = function rgbaToThumbHash(arg0, arg1, arg2) {
let result10;
let result2;
const callback = arg0;
closure_1 = arg1;
if (arg0 <= 100) {
if (arg1 <= 100) {
const _Math = Math;
const _Math2 = Math;
const _Math3 = Math;
const _Math4 = Math;
const _Math5 = Math;
let num6 = 0;
let num5 = 0;
let num4 = 0;
let num3 = 0;
let num2 = 0;
let num = 0;
let num7 = 0;
let num8 = 0;
let num9 = 0;
let num10 = 0;
if (0 < arg0 * arg1) {
do {
let result = arg2[num6 + 3] / 255;
let result1 = result / 255;
num = num + result1 * arg2[num6];
num2 = num2 + result1 * arg2[num6 + 1];
num3 = num3 + result1 * arg2[num6 + 2];
num4 = num4 + result;
num5 = num5 + 1;
num6 = num6 + 4;
num7 = num4;
num8 = num3;
num9 = num2;
num10 = num;
result2 = arg0 * arg1;
} while (num5 < result2);
}
let result5 = num8;
let result4 = num9;
let result3 = num10;
if (num7) {
result3 = num10 / num7;
result4 = num9 / num7;
result5 = num8 / num7;
}
let num11 = 7;
if (num7 < arg0 * arg1) {
num11 = 5;
}
const result6 = num11 * arg0;
let maxResult = max(1, round(result6 / max(arg0, arg1)));
const result7 = num11 * arg1;
const maxResult1 = max(1, round(result7 / max(arg0, arg1)));
let items = [];
let items1 = [];
let items2 = [];
const items3 = [];
let num12 = 0;
let num13 = 0;
if (0 < arg0 * arg1) {
do {
let result8 = arg2[num12 + 3] / 255;
let diff = 1 - result8;
let result9 = result8 / 255;
let sum = result3 * diff + result9 * arg2[num12];
let sum1 = result4 * diff + result9 * arg2[num12 + 1];
let sum2 = result5 * diff + result9 * arg2[num12 + 2];
let sum3 = sum + sum1;
items[num13] = (sum3 + sum2) / 3;
items1[num13] = sum3 / 2 - sum2;
items2[num13] = sum - sum1;
items3[num13] = result8;
num13 = num13 + 1;
num12 = num12 + 4;
result10 = arg0 * arg1;
} while (num13 < result10);
}
function encodeChannel(items, maxResult2, arg2) {
let length;
items = [];
const items1 = [];
let num = 0;
let num2 = 0;
let num3 = 0;
let num4 = 0;
let num5 = 0;
if (0 < arg2) {
do {
let tmp = num;
let tmp2 = num2;
let tmp3 = num3;
let num6 = 0;
let tmp4 = num2;
let tmp5 = num3;
if (0 < maxResult2 * (arg2 - num)) {
do {
let tmp6 = closure_0;
let tmp7 = num6;
let tmp8 = tmp2;
let tmp9 = tmp3;
let num7 = 0;
if (0 < closure_0) {
do {
let tmp10 = cos;
let tmp11 = PI;
let tmp12 = closure_0;
items1[num7] = cos(PI / closure_0 * num6 * (num7 + 0.5));
num7 = num7 + 1;
tmp6 = closure_0;
} while (num7 < closure_0);
}
let tmp13 = closure_1;
let num8 = 0;
let num9 = 0;
let num10 = 0;
if (0 < closure_1) {
do {
let tmp14 = cos;
let tmp15 = PI;
let tmp16 = closure_1;
let tmp18 = closure_0;
let tmp19 = num8;
let sum = num9;
let num11 = 0;
let tmp21 = num9;
if (0 < closure_0) {
do {
let tmp22 = closure_0;
sum = sum + items[num11 + num8 * closure_0] * items1[num11] * tmp17;
num11 = num11 + 1;
tmp21 = sum;
tmp18 = closure_0;
} while (num11 < closure_0);
}
num8 = num8 + 1;
tmp13 = closure_1;
num9 = tmp21;
tmp6 = tmp18;
num10 = tmp21;
} while (num8 < closure_1);
}
let result = num10 / (tmp6 * tmp13);
if (num6) {
let arr = items.push(result);
let tmp27 = max;
let tmp28 = abs;
let tmp24 = max(tmp2, abs(result));
let tmp25 = tmp3;
} else {
tmp24 = tmp2;
tmp25 = result;
}
sum1 = num6 + 1;
tmp2 = tmp24;
tmp3 = tmp25;
num6 = sum1;
tmp4 = tmp24;
tmp5 = tmp25;
} while (sum1 * arg2 < maxResult2 * (arg2 - num));
}
num = num + 1;
num2 = tmp4;
num3 = tmp5;
num4 = tmp4;
num5 = tmp5;
} while (num < arg2);
}
if (num4) {
let num12 = 0;
if (0 < items.length) {
do {
items[num12] = 0.5 + 0.5 / num4 * items[num12];
num12 = num12 + 1;
length = items.length;
} while (num12 < length);
}
}
const items2 = [num5, items, num4];
return items2;
}
const maxResult2 = max(3, maxResult);
let tmp21 = callback;
[tmp23, tmp24, tmp25] = callback(encodeChannel(items, max(3, maxResult), max(3, maxResult1)), 3);
let tmp22 = callback(encodeChannel(items, max(3, maxResult), max(3, maxResult1)), 3);
[tmp27, tmp28, tmp29] = callback(encodeChannel(items1, 3, 3), 3);
const tmp26 = callback(encodeChannel(items1, 3, 3), 3);
[tmp31, tmp32, tmp33] = callback(encodeChannel(items2, 3, 3), 3);
if (num7 < arg0 * arg1) {
let encodeChannelResult = encodeChannel(items3, 5, 5);
} else {
encodeChannelResult = [];
}
const tmp21Result = tmp21(encodeChannelResult, 3);
let tmp35 = tmp21Result[1];
const tmp30 = callback(encodeChannel(items2, 3, 3), 3);
const roundResult = round(63 * tmp23);
const tmp38 = round(63 * tmp23) | round(31.5 + 31.5 * tmp27) << 6;
const tmp39 = round(31.5 + 31.5 * tmp31) << 12;
if (arg0 > arg1) {
maxResult = maxResult1;
}
const tmp41 = tmp38 | tmp39 | round(31 * tmp25) << 18 | (num7 < arg0 * arg1) << 23;
const tmp40 = round(31 * tmp25) << 18;
const tmp43 = maxResult | round(63 * tmp29) << 3 | round(63 * tmp33) << 9 | (arg0 > arg1) << 15;
const items4 = [255 & tmp41, tmp41 >> 8 & 255, tmp41 >> 16, 255 & tmp43, tmp43 >> 8];
if (num7 < arg0 * arg1) {
items4.push(round(15 * tmp21Result[0]) | round(15 * tmp21Result[2]) << 4);
const roundResult1 = round(15 * tmp21Result[0]);
}
if (num7 < arg0 * arg1) {
const items5 = [tmp24, tmp28, tmp32, tmp35];
let items6 = items5;
} else {
items6 = [tmp24, tmp28, tmp32];
}
tmp35 = items6[Symbol.iterator]();
const tmp42 = maxResult | round(63 * tmp29) << 3;
}
}
error = new Error("" + arg0 + "x" + arg1 + " doesn't fit in 100x100");
throw error;
};
export { thumbHashToRGBA };
export const thumbHashToAverageRGBA = function thumbHashToAverageRGBA(arg0) {
let num = 1;
if ((arg0[0] | arg0[1] << 8 | arg0[2] << 16) >> 23) {
num = (15 & arg0[5]) / 15;
}
const result = (63 & tmp) / 63;
const diff = (tmp >> 12 & 63) / 31.5 - 1;
const diff1 = result - 0.6666666666666666 * ((tmp >> 6 & 63) / 31.5 - 1);
const result1 = (3 * result - diff1 + diff) / 2;
return { r: max(0, min(1, result1)), g: max(0, min(1, result1 - diff)), b: max(0, min(1, diff1)), a: num };
};
export const thumbHashToApproximateAspectRatio = function thumbHashToApproximateAspectRatio(arg0) {
if (128 & arg0[4]) {
let num = 7;
if (tmp2) {
num = 5;
}
let tmp4 = num;
} else {
tmp4 = 7 & tmp;
}
if (128 & arg0[4]) {
let num2 = 7 & tmp;
} else {
num2 = 7;
if (tmp2) {
num2 = 5;
}
}
return tmp4 / num2;
};
export { rgbaToDataURL };
export const thumbHashToDataURL = function thumbHashToDataURL(arg0) {
const tmp = thumbHashToRGBA(arg0);
return rgbaToDataURL(tmp.w, tmp.h, tmp.rgba);
};