UNPKG

mdx-m3-viewer

Version:

A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.

68 lines (56 loc) 1.91 kB
/** * Detects if the given object is a PNG source. */ export function isPng(object: any) { if (object instanceof ArrayBuffer && object.byteLength > 8) { let bytes = new Uint8Array(object, 0, 8); // PNG starts with [89 50 4E 47 0D 0A 1A 0A] if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47 && bytes[4] === 0x0d && bytes[5] === 0x0a && bytes[6] === 0x1a && bytes[7] === 0x0a) { return true; } } return false; } /** * Detects if the given object is a JPG source. */ export function isJpeg(object: any) { if (object instanceof ArrayBuffer) { let bytes = new Uint8Array(object); let l = bytes.length; // JPG starts with [FF D8] and ends with [FF D9]. if (bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[l - 2] === 0xff && bytes[l - 1] === 0xd9) { return true; } } return false; } /** * Detects if the given object is a GIF source. */ export function isGif(object: any) { if (object instanceof ArrayBuffer && object.byteLength > 6) { let bytes = new Uint8Array(object, 0, 6); // GIF starts with [47 49 46 38 37 61] or [47 49 46 38 39 61]. if (bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x38 && (bytes[4] === 0x37 || bytes[4] === 0x39) && bytes[5] === 0x61) { return true; } } return false; } /** * Detects if the given object is a WebP source. */ export function isWebP(object: any) { if (object instanceof ArrayBuffer && object.byteLength > 12) { let bytes = new Uint8Array(object, 0, 12); // WebP starts with [52 49 46 46] followed by the file size - 8 followed by [57 45 42 50]. if (bytes[0] === 0x52 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x46 && bytes[8] === 0x57 && bytes[9] === 0x45 && bytes[10] === 0x42 && bytes[11] === 0x50) { return true; } } return false; }