UNPKG

@toolsycc/image-convert

Version:

A utility package for converting image formats.

43 lines (42 loc) 1.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertToIco = convertToIco; const sharp_1 = __importDefault(require("sharp")); const to_ico_1 = __importDefault(require("to-ico")); /** * Converts an image buffer to an ICO buffer. * Only usable in Node.js (uses sharp). */ async function convertToIco(inputBuffer, options) { if (!Buffer.isBuffer(inputBuffer)) { throw new Error('Input must be a Buffer'); } const { autoOrient = true, stripMetadata = true, sizes = [16, 24, 32, 48, 64, 96, 128, 192, 256], } = options ?? {}; const MIN_SIZE = 16; const MAX_SIZE = 256; for (const size of sizes) { if (size < MIN_SIZE || size > MAX_SIZE) { throw new Error(`Size ${size} is out of range. Must be between ${MIN_SIZE} and ${MAX_SIZE} pixels.`); } } const pngBuffers = await Promise.all(sizes.map(async (size) => { let sharpInstance = (0, sharp_1.default)(inputBuffer); if (autoOrient) { sharpInstance = sharpInstance.rotate(); } return sharpInstance .resize(size, size, { fit: 'cover', kernel: sharp_1.default.kernel.cubic, }) .ensureAlpha() .png({ compressionLevel: 9, }) .toBuffer(); })); return await (0, to_ico_1.default)(pngBuffers); }