diff --git a/cli/main.ts b/cli/main.ts index 5d23fd4..ced4559 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -4,12 +4,12 @@ import { collageModeType, DisplayCollageModeType, displayCollageModeType, - isDisplayCollageModeType, } from "../src/common/collages.ts"; import { denoCollageModes, ProxyImage } from "./collages.ts"; import { CollageConfig } from "../src/common/types.ts"; import { choice, shuffle } from "../src/common/utils.ts"; import { walkSync } from "https://deno.land/std@0.107.0/fs/mod.ts"; +import { parseCollageModes, parseDisplayCollageModes } from "./util.ts"; const args = parse(Deno.args, { alias: { @@ -18,11 +18,14 @@ const args = parse(Deno.args, { o: "output", m: "mode", }, + boolean: ["rr"], default: { w: 640, h: 640, include: "*.png, *.jpg", output: "collage.png", + rl: 3, + rr: true }, }); @@ -61,18 +64,7 @@ const shuffledFiles = shuffle(Array.from(files)); const images: ProxyImage[] = shuffledFiles.map((file) => new ProxyImage(file)); -const allModeKeys: DisplayCollageModeType[] = []; -if (args["mode"]) { - (args["mode"] as string).split(",").map((m) => m.trim()).forEach((m) => { - if (isDisplayCollageModeType(m)) { - allModeKeys.push(m); - } else { - throw Error(`"${m}" is not a valid collage mode.`); - } - }); -} else { - allModeKeys.push(...displayCollageModeType); -} +const allModeKeys = args["mode"] ? parseDisplayCollageModes(args["mode"]) : displayCollageModeType; const canvas = createCanvas(args["width"], args["height"]); const context = canvas.getContext("2d"); @@ -87,9 +79,9 @@ if (modeKey === "recursive") { `Creating a recursive collage, choosing from ${shuffledFiles.length} files...`, ); await denoCollageModes.recursiveDraw(context, images, { - modes: collageModeType, - repeat: true, - level: 3, + modes: args["rm"] ? parseCollageModes(args["rm"]) : collageModeType, + repeat: args["rr"], + level: args["rl"], }); } else { const mode = denoCollageModes.modes[modeKey]; @@ -106,4 +98,4 @@ if (modeKey === "recursive") { const output = args["output"]; console.log(`Saving to "${output}"...`); -await Deno.writeFile(output, canvas.toBuffer()); +await Deno.writeFile(output, canvas.toBuffer()); \ No newline at end of file diff --git a/cli/util.ts b/cli/util.ts new file mode 100644 index 0000000..0444a49 --- /dev/null +++ b/cli/util.ts @@ -0,0 +1,29 @@ +import { CollageModeType, DisplayCollageModeType, isCollageModeType, isDisplayCollageModeType } from "../src/common/collages.ts"; + +export function parseDisplayCollageModes(input: string): DisplayCollageModeType[] { + const result: DisplayCollageModeType[] = []; + + input.split(",").map((m) => m.trim()).forEach((m) => { + if (isDisplayCollageModeType(m)) { + result.push(m); + } else { + throw Error(`"${m}" is not a valid collage mode.`); + } + }); + + return result; +} + +export function parseCollageModes(input: string): CollageModeType[] { + const result: CollageModeType[] = []; + + input.split(",").map((m) => m.trim()).forEach((m) => { + if (isCollageModeType(m)) { + result.push(m); + } else { + throw Error(`"${m}" is not a valid collage mode.`); + } + }); + + return result; +} \ No newline at end of file