UNPKG

image-size

Version:
61 lines (56 loc) 1.74 kB
'use strict'; // lib/types/utils.ts new TextDecoder(); var getView = (input, offset) => new DataView(input.buffer, input.byteOffset + offset); var readUInt16LE = (input, offset = 0) => getView(input, offset).getUint16(0, true); // lib/types/ico.ts var TYPE_ICON = 1; var SIZE_HEADER = 2 + 2 + 2; var SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; function getSizeFromOffset(input, offset) { const value = input[offset]; return value === 0 ? 256 : value; } function getImageSize(input, imageIndex) { const offset = SIZE_HEADER + imageIndex * SIZE_IMAGE_ENTRY; return { height: getSizeFromOffset(input, offset + 1), width: getSizeFromOffset(input, offset) }; } var ICO = { validate(input) { const reserved = readUInt16LE(input, 0); const imageCount = readUInt16LE(input, 4); if (reserved !== 0 || imageCount === 0) return false; const imageType = readUInt16LE(input, 2); return imageType === TYPE_ICON; }, calculate(input) { const nbImages = readUInt16LE(input, 4); const imageSize = getImageSize(input, 0); if (nbImages === 1) return imageSize; const images = []; for (let imageIndex = 0; imageIndex < nbImages; imageIndex += 1) { images.push(getImageSize(input, imageIndex)); } return { width: imageSize.width, height: imageSize.height, images }; } }; // lib/types/cur.ts var TYPE_CURSOR = 2; var CUR = { validate(input) { const reserved = readUInt16LE(input, 0); const imageCount = readUInt16LE(input, 4); if (reserved !== 0 || imageCount === 0) return false; const imageType = readUInt16LE(input, 2); return imageType === TYPE_CURSOR; }, calculate: (input) => ICO.calculate(input) }; exports.CUR = CUR;