メモログ

Primitiveの変換をまとめて行う

Primitive を使って画像を変換すると、だいたい一回目ではしっくりこない。だから何回か画像を変えたりモードを変えてみたりとか色々試すのだけど、これがなかなか面倒くさい。一回の実行にも時間がかかるから待っている間に実行していたことを忘れてしまったりする。だから一回の Primitive の実行で全てのモードのパターンを出力するためのスクリプトを用意してみた。primitive_bulkという名前で npm に公開している。個人的にはほとんど使っていないオプションもあるけど、一応 primitive のすべてのオプションを渡せるようにしている。名前はそのうち変えるかもしれない。

実行はprimitive_bulk -i photo.jpgみたいにする。primitive では出力先(-o)を指定する必要があるが、primitive_bulk では指定がない場合は photo.jpg と同じディレクトリに出力ファイルを作成する。これが地味に便利。-mの指定がない場合は、mode の 0 から 8 まで全ての種類を出力する。primitive の処理そのものは 8 回繰り返すのと同じだから、だいぶ重いし時間もそれなりにかかる。でも実行して時が経つのを待つだけなので、だいぶ気は楽になった。

内容的には特に言うほどのことはしていない。commander.jsを使って引数をパースして

program
  .version(pkg.version)
  .option("-i, --input <file")
  .option("-o, --output <file>")
  .option("-n, --num <string>")
  .option("-m, --mode <string>")
  .option("--rep <number>")
  .option("--nth <number>")
  .option("-r, --resize <number>")
  .option("-s, --size <number>")
  .option("-a, --alpha <number>")
  .option("--bg <string>")
  .option("-v, --verbose <string>")
  .option("--vv <string>")
  .option("-f, --format <string>")
  .option("-d, --dist <dist>")
  .option("--fname <string>")
  .option("--sync")
  .parse(args);

オプションを用途にあわせて調整した上で、child_processを使って primitive を実行しているだけである。

  const childProcess = require('child_process');
  ...

  for (const key in options) {
    args.push('-' + key, options[key]);
  }

  const cp = childProcess.spawn('primitive', args);

単純なんだけど、手作業の回数が減らすことができて気分はだいぶ良い。

以上。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。