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
JavaScript
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);
});