purgetss
Version:
A package that simplifies mobile app creation for Titanium developers.
64 lines (54 loc) • 1.74 kB
JavaScript
/**
* PurgeTSS - gen-android-legacy
*
* Flat ic_launcher.png for pre-adaptive Android (API 21–25, ~3% of users in 2026).
* Composites foreground over background, scaled to legacy launcher sizes.
*
* Legacy densities: mdpi=48, hdpi=72, xhdpi=96, xxhdpi=144, xxxhdpi=192.
*
* @fileoverview Legacy ic_launcher.png × 5 densities
* @author César Estrada
*/
import fs from 'fs'
import path from 'path'
import sharp from 'sharp'
export const LEGACY_DENSITIES = [
{ name: 'mdpi', size: 48 },
{ name: 'hdpi', size: 72 },
{ name: 'xhdpi', size: 96 },
{ name: 'xxhdpi', size: 144 },
{ name: 'xxxhdpi', size: 192 }
]
export async function genAndroidLegacy(masterPng, bgColor, paddingPct, resRoot) {
const generated = []
// Legacy icons have no adaptive mask — they render as drawn. Use ~60% of
// the adaptive padding so the logo fills more of the canvas.
const legacyPadding = Math.floor((paddingPct * 60) / 100)
for (const { name, size } of LEGACY_DENSITIES) {
const inner = Math.floor((size * (100 - 2 * legacyPadding)) / 100)
const dir = path.join(resRoot, `mipmap-${name}`)
fs.mkdirSync(dir, { recursive: true })
const outPath = path.join(dir, 'ic_launcher.png')
const innerLogo = await sharp(masterPng)
.resize({
width: inner,
height: inner,
fit: 'inside',
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.toBuffer()
await sharp({
create: {
width: size,
height: size,
channels: 4,
background: bgColor
}
})
.composite([{ input: innerLogo, gravity: 'center' }])
.png({ compressionLevel: 9 })
.toFile(outPath)
generated.push(outPath)
}
return generated
}