74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
import { ThumbImageBuffer } from 'agora-electron-sdk';
|
|
|
|
export default (input: any) => {
|
|
const keyStr =
|
|
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
let output = '';
|
|
let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
let i = 0;
|
|
|
|
while (i < input.length) {
|
|
chr1 = input[i++];
|
|
chr2 = i < input.length ? input[i++] : Number.NaN; // Not sure if the index
|
|
chr3 = i < input.length ? input[i++] : Number.NaN; // checks are needed here
|
|
|
|
enc1 = chr1 >> 2;
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
enc4 = chr3 & 63;
|
|
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
} else if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
output +=
|
|
keyStr.charAt(enc1) +
|
|
keyStr.charAt(enc2) +
|
|
keyStr.charAt(enc3) +
|
|
keyStr.charAt(enc4);
|
|
}
|
|
return output;
|
|
};
|
|
|
|
export const thumbImageBufferToBase64 = (target?: ThumbImageBuffer) => {
|
|
if (!target) {
|
|
return '';
|
|
}
|
|
|
|
const canvas = document.createElement('canvas');
|
|
const ctx = canvas.getContext('2d');
|
|
if (!ctx) return '';
|
|
|
|
const width = (canvas.width = target.width!);
|
|
const height = (canvas.height = target.height!);
|
|
|
|
const rowBytes = width * 4;
|
|
for (let row = 0; row < height; row++) {
|
|
const srow = row;
|
|
const imageData = ctx.createImageData(width, 1);
|
|
const start = srow * width * 4;
|
|
for (let i = 0; i < rowBytes; i += 4) {
|
|
imageData.data[i] = target.buffer![start + i + 2]!;
|
|
imageData.data[i + 1] = target.buffer![start + i + 1]!;
|
|
imageData.data[i + 2] = target.buffer![start + i]!;
|
|
imageData.data[i + 3] = target.buffer![start + i + 3]!;
|
|
}
|
|
// if (process.platform === 'win32') {
|
|
// for (let i = 0; i < rowBytes; i += 4) {
|
|
// imageData.data[i] = target.buffer![start + i + 2]!;
|
|
// imageData.data[i + 1] = target.buffer![start + i + 1]!;
|
|
// imageData.data[i + 2] = target.buffer![start + i]!;
|
|
// imageData.data[i + 3] = target.buffer![start + i + 3]!;
|
|
// }
|
|
// } else {
|
|
// for (let i = 0; i < rowBytes; ++i) {
|
|
// imageData.data[i] = target.buffer![start + i]!;
|
|
// }
|
|
// }
|
|
ctx.putImageData(imageData, 0, row);
|
|
}
|
|
|
|
return canvas.toDataURL('image/png');
|
|
};
|