UNPKG

tauri-g-icons

Version:

CLI para gerar ícones de apps a partir de uma imagem PNG, criando PNGs redimensionados, .ico e .icns

78 lines (60 loc) 1.7 kB
#!/usr/bin/env node import { Jimp } from "jimp"; import icongen from "icon-gen"; import path from "node:path"; import fs from "node:fs"; function showHelp() { console.log(` tauri-g-icons - CLI para gerar ícones de apps a partir de uma imagem PNG Uso: tauri-g-icons <caminho/para/imagem.png> <caminho/destino/para/ícones> Exemplo: tauri-g-icons ./image.png ./icons/x2 Opções: -h, --help Mostra esta mensagem `); } async function prepareOutputDir(rawPath) { let outDir = path.resolve(rawPath); if (fs.existsSync(outDir)) { const stats = fs.statSync(outDir); if (!stats.isDirectory()) { throw new Error(`O caminho de saída "${outDir}" existe mas não é um diretório.`); } } else { fs.mkdirSync(outDir, { recursive: true }); } return outDir; } async function generateIcons(inputPath, rawOutputDir) { const outputDir = await prepareOutputDir(rawOutputDir); console.log({ inputPath, outputDir }); const read = await Jimp.read(inputPath); const pngSizes = [32, 128, 256]; for (const size of pngSizes) { await read.clone() .resize({ w: size, h: size }) .write(path.join(outputDir, `${size}x${size}.png`)); } await icongen(inputPath, outputDir, { report: true, ico: { name: "app", sizes: [16, 24, 32, 48, 64, 128, 256], }, icns: { name: "app", sizes: [16, 32, 64, 128, 256, 512, 1024], }, }); console.log("Ícones gerados em:", outputDir); } const input = process.argv[2]; const output = process.argv[3]; if (!input || !output || input === '-h' || input === '--help') { showHelp(); process.exit(0); } generateIcons(input, output).catch((err) => { console.error("Erro ao gerar ícones:", err.message || err); });