|
@@ -0,0 +1,76 @@
|
|
|
+'use strict'
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+require = require('esm')(module)
|
|
|
+const fs = require('fs-extra')
|
|
|
+const yargs = require('yargs')
|
|
|
+const path = require('path')
|
|
|
+
|
|
|
+const { getImage } = require('./server/routes/getImage')
|
|
|
+const { cutImage } = require('./server/routes/getImageExtracts')
|
|
|
+
|
|
|
+
|
|
|
+ * @typedef {Object} CliObject
|
|
|
+ * @property {String} sceneName Input scene. Must be in the `./images` directory
|
|
|
+ * @property {String} [outputDir] Directory where to output extracts. Defaults to the extracts directory
|
|
|
+ * @property {String} [extractConfigX=4] Horizontal extracting configuration. Defaults to 4
|
|
|
+ * @property {String} [extractConfigY=4] Vertical extracting configuration. Defaults to 4
|
|
|
+ * @property {String} $0 The script name or node command
|
|
|
+ */
|
|
|
+
|
|
|
+ * @constant
|
|
|
+ * @type {CliObject}
|
|
|
+ */
|
|
|
+const cli = yargs
|
|
|
+ .usage('Cut a scene using provided configuration.')
|
|
|
+ .usage('Usage: node generateExtracts.js --sceneName=<sceneName> --quality=<quality> [--extractConfigX=<extractConfigX=4>] [--extractConfigY=<extractConfigY=4>] [--outputDir=<outputDir>]')
|
|
|
+ .example('node generateExtracts.js --sceneName=cuisine01 --quality=150 --extractConfigX=4 --extractConfigY=5 --outputDir=extracts')
|
|
|
+ .option('sceneName', {
|
|
|
+ demandOption: true,
|
|
|
+ describe: 'Input scene. Must be in the `./images` directory',
|
|
|
+ type: 'string'
|
|
|
+ })
|
|
|
+ .option('quality', {
|
|
|
+ demandOption: true,
|
|
|
+ describe: 'Scene quality to choose.',
|
|
|
+ type: Number
|
|
|
+ })
|
|
|
+ .option('extractConfigX', {
|
|
|
+ demandOption: false,
|
|
|
+ describe: 'Horizontal extracting configuration. Defaults to 4.',
|
|
|
+ type: Number,
|
|
|
+ default: 4
|
|
|
+ })
|
|
|
+ .option('extractConfigY', {
|
|
|
+ demandOption: false,
|
|
|
+ describe: 'Vertical extracting configuration. Defaults to 4.',
|
|
|
+ type: Number,
|
|
|
+ default: 4
|
|
|
+ })
|
|
|
+ .option('outputDir', {
|
|
|
+ demandOption: false,
|
|
|
+ describe: 'Directory where to output extracts. Defaults to the extracts directory.',
|
|
|
+ type: 'string'
|
|
|
+ })
|
|
|
+ .help('h')
|
|
|
+ .alias('h', 'help')
|
|
|
+ .wrap(yargs.terminalWidth())
|
|
|
+ .argv
|
|
|
+
|
|
|
+
|
|
|
+const setup = async () => {
|
|
|
+ const { sceneName, quality, extractConfigX, extractConfigY, outputDir } = cli
|
|
|
+ console.log(sceneName, quality, extractConfigX, extractConfigY, outputDir)
|
|
|
+
|
|
|
+ const image = await getImage(sceneName, quality)
|
|
|
+
|
|
|
+
|
|
|
+ const extracts = await cutImage(image, extractConfigX, extractConfigY)
|
|
|
+ console.log(extracts)
|
|
|
+
|
|
|
+
|
|
|
+ if (outputDir)
|
|
|
+ await Promise.all(extracts.map(x => fs.move(x.path, path.resolve(outputDir, path.basename(x.path)))))
|
|
|
+}
|
|
|
+setup()
|