image-in-browser
Version:
Package for encoding / decoding images, transforming images, applying filters, drawing primitives on images on the client side (no need for server Node.js)
99 lines • 2.92 kB
JavaScript
export function readUshort(buff, p) {
return buff[p] | (buff[p + 1] << 8);
}
export function writeUshort(buff, p, n) {
buff[p] = n & 255;
buff[p + 1] = (n >> 8) & 255;
}
export function readUint(buff, p) {
return (buff[p + 3] * (256 * 256 * 256) +
((buff[p + 2] << 16) | (buff[p + 1] << 8) | buff[p]));
}
export function writeUint(buff, p, n) {
buff[p] = n & 255;
buff[p + 1] = (n >> 8) & 255;
buff[p + 2] = (n >> 16) & 255;
buff[p + 3] = (n >> 24) & 255;
}
export function readASCII(buff, p, l) {
let s = '';
for (let i = 0; i < l; i++)
s += String.fromCharCode(buff[p + i]);
return s;
}
export function writeASCII(data, p, s) {
for (let i = 0; i < s.length; i++)
data[p + i] = s.charCodeAt(i);
}
export function pad(n) {
return n.length < 2 ? `0${n}` : n;
}
export function readUTF8(buff, p, l) {
let s = '';
let ns = undefined;
for (let i = 0; i < l; i++)
s += `%${pad(buff[p + i].toString(16))}`;
try {
ns = decodeURIComponent(s);
}
catch (e) {
return readASCII(buff, p, l);
}
return ns;
}
export function writeUTF8(buff, p, str) {
const strl = str.length;
let i = 0;
for (let ci = 0; ci < strl; ci++) {
const code = str.charCodeAt(ci);
if ((code & (0xffffffff - (1 << 7) + 1)) === 0) {
buff[p + i] = code;
i++;
}
else if ((code & (0xffffffff - (1 << 11) + 1)) === 0) {
buff[p + i] = 192 | (code >> 6);
buff[p + i + 1] = 128 | ((code >> 0) & 63);
i += 2;
}
else if ((code & (0xffffffff - (1 << 16) + 1)) === 0) {
buff[p + i] = 224 | (code >> 12);
buff[p + i + 1] = 128 | ((code >> 6) & 63);
buff[p + i + 2] = 128 | ((code >> 0) & 63);
i += 3;
}
else if ((code & (0xffffffff - (1 << 21) + 1)) === 0) {
buff[p + i] = 240 | (code >> 18);
buff[p + i + 1] = 128 | ((code >> 12) & 63);
buff[p + i + 2] = 128 | ((code >> 6) & 63);
buff[p + i + 3] = 128 | ((code >> 0) & 63);
i += 4;
}
else {
throw new Error('Invalid UTF-8 code point');
}
}
return i;
}
export function sizeUTF8(str) {
const strl = str.length;
let i = 0;
for (let ci = 0; ci < strl; ci++) {
const code = str.charCodeAt(ci);
if ((code & (0xffffffff - (1 << 7) + 1)) === 0) {
i++;
}
else if ((code & (0xffffffff - (1 << 11) + 1)) === 0) {
i += 2;
}
else if ((code & (0xffffffff - (1 << 16) + 1)) === 0) {
i += 3;
}
else if ((code & (0xffffffff - (1 << 21) + 1)) === 0) {
i += 4;
}
else
throw new Error('Invalid UTF-8 character');
}
return i;
}
//# sourceMappingURL=bin.js.map