chikoski@
const res = await fetch("some.jpg");
const buffer = await res.arrayBuffer();
const view = new DataView(buffer);
/*
Take 4bytes from the first byte of the buffer
and interprete as unsigned integer
*/
const value = view.getUint32(0);
const value = view.getUint32(0, true); // Little endian
const x = Number.MAX_SAFE_INTEGER;
console.log(`x + 0 = ${x + 0}`);
console.log(`x + 1 = ${x + 1}`);
console.log(`x + 2 = ${x + 2}`);
const buffer = new ArrayBuffer(4);
const u32array = new Uint32Array(buffer);
const u16array = new Uint16Array(buffer);
const u8array = new Uint8Array(buffer);
console.log(`u32array.length = ${u32array.length}`);
console.log(`u16array.length = ${u1yarray.length}`);
console.log(`u8array.length = ${u8array.length}`);
const buffer = new ArrayBuffer(4);
const u32array = new Uint32Array(buffer);
const u8array = new Uint8Array(buffer);
u8array[0] = 0x00;
u8array[1] = 0x00;
u8array[2] = 0xFF;
u8array[3] = 0xFF;
const value = u32array[0];
console.log(`value = ${value.toString(16)}`);
const READ = 0b100;
const WRITE = 0b010;
const EXECUTE = 0b001;
const flag = 5;
console.log(`Can read?: ${flag & READ != 0}`);
console.log(`Can write?: ${flag & WRITE != 0}`);
console.log(`Can execute?: ${flag & EXECUTE != 0}`);
const READ = 0b100;
const WRITE = 0b010;
const EXECUTE = 0b001;
const flag = READ | EXECUTE;
console.log(`Can read?: ${flag & READ != 0}`);
console.log(`Can write?: ${flag & WRITE != 0}`);
console.log(`Can execute?: ${flag & EXECUTE != 0}`);
const dimension = {
width: 240,
height: 180
};
const code = dimension.width & 8 | dimension.height;
const width = code &; 0xFF;
const height = code >> 8;
const buffer = new ArrayBuffer(4);
const u8array = new Uint8Array(buffer);
const i8array = new Int8Array(buffer);
const u32array = new Uint32Array(buffer);
const i32array = new Int32Array(buffer);
u8array[0] = 0x00;
u8array[1] = 0x00;
u8array[2] = 0xFF;
u8array[3] = 0xFF;
console.log(`u8array[3] = ${u8array[3]} / i8array[3] = ${i8array[3]}`);
console.log(`u32array[0] = ${u32array[0} / i32array[0] = ${i32array[0]}`);
const rgba = [255, 192, 192, 255];
const code = rgba[0] << 24 | rgba[1] << 16 | rgba[2] << 8 | rgba[3];
const decoded = [code >> 24, code >> 16 & 0xFF, code >> 8 & 0xFF, code & 0xFF];
// [-1, 192, 192, 255]
const decodedv2 = [code >> 24 & 0xFF, code >> 16 & 0xFF, code >> 8 & 0xFF, code & 0xFF];
const decodedv3 = [code >>> 24, code >>> 16 & 0xFF, code >>> 8 & 0xFF, code & 0xFF];
Name | Marker Identifier | Description |
---|---|---|
SOI | 0xFFDB |
Sart of iamge |
DQT | 0xFFDB |
Quantization table |
SOF0 | 0xFFc0 |
Start of frame |
DHT | 0xFFc4 |
Huffman table |
SOS | 0xFFDA |
Sart of scan |
EOI | 0xFFC0 |
End of iamge |
APP0 | 0xFFE0 |
JFIF application segment |
APP1 | 0xFFE1 |
EXIF |
Offset(bytes) | Length(bytes) | Description |
---|---|---|
0 | 2 | Marker |
2 | 2 | Length |
4 | N | Segment data |