@toolsycc/image-convert
Version:
A utility package for converting image formats.
43 lines (42 loc) • 1.53 kB
JavaScript
;
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);
}