30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import { $, sleep, spawn } from "bun";
|
|
|
|
let path = process.argv[2];
|
|
let cur_procs : number = 0;
|
|
const max_procs = (process.argv.length >= 4 && process.argv[3] != undefined) ? +process.argv[3] : 8
|
|
|
|
await $`mkdir -p /tmp/nguhmap`
|
|
for (let zoomlevel = 0; zoomlevel <= 4; ++zoomlevel) {
|
|
let size = 1024 << zoomlevel
|
|
console.log(`Resizing image for zoomlevel ${zoomlevel}: ${size}x${size}`)
|
|
await $`magick ${path} -resize ${size}x${size} /tmp/nguhmap/${zoomlevel - 4}.png`
|
|
let file = `/tmp/nguhmap/${zoomlevel - 4}`
|
|
console.log(`Cutting tiles for zoomlevel ${zoomlevel - 4}`)
|
|
await $`mkdir -p src/tiles/${zoomlevel - 4}`
|
|
for (let rx = 0; rx < 1 << (zoomlevel + 1); rx++) {
|
|
for (let ry = 0; ry < 1 << (zoomlevel + 1) ; ry++) {
|
|
while (cur_procs >= max_procs) {await sleep(200)}
|
|
cur_procs++
|
|
console.log(`region: ${rx - (1 << zoomlevel)}/${ry - (1 << zoomlevel)}`)
|
|
spawn(
|
|
[`magick`, `${file}.png`, `-crop`, `512x512+${rx*512}+${ry*512}`, `src/tiles/${zoomlevel - 4}/${rx - (1 << zoomlevel)}_${ry - (1 << zoomlevel)}.png`],
|
|
{
|
|
onExit: () => {cur_procs--}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
while (cur_procs > 0) {await sleep(1000)}
|
|
await $`rm -rf /tmp/nguhmap`
|