[小ネタ] アルファマップを生成するRoswellスクリプト

小ネタ。アルファマップを生成するRoswellスクリプトを作成したメモです。

Three.jsのように、透過画像を表示するためには(画像自体のアルファ値は無視して)アルファマップと呼ばれる、透過具合をグレースケールで表した画像(黒が完全透過で白が完全不透明)を要求するものがあります。

このアルファマップを一々手で作成するのは面倒なので、元画像(PNG)のアルファ値を読み取ってアルファマップを生成するスクリプトを書いてみました。こんな感じに使います。

$ ./create-alpha-map.ros -i ab.png -o ab-alpha.png

Before (ab.png):

f:id:eshamster:20170812024633p:plain

After (ab-alpha.png):

f:id:eshamster:20170812024555p:plain


スクリプト自体は40行程度の簡単なものです。

Create an alpha map png from a png file

画像処理ライブラリであるopticlコマンドライン引数処理ライブラリであるCL-CLIのおかげで、思いの外簡単に書けた次第です。今回はどちらも基本的な部分しか使っていませんが…。

CL-CLIについて何点か。サブコマンドの定義など高度な機能も持っているようですが、基本的には上記のようにオプションを定義したリスト(*options*)を作成してcl-cli:parse-cliに渡すだけです。ちょっとした注意点として、この関数はコマンドライン引数の1要素目にコマンド自体が入ることを想定しているようですが、Roswellのargvには含まれていないので適当に空文字を追加しています((cl-cli:parse-cli (cons "" argv) *options*))。

また、cl-cli:helpで下記のように自動でヘルプを生成してくれるのも嬉しいです。

$ ./create-alpha-map.ros

NIL

 [ OPTIONS ]

Global options:
  -i,--input-path    <file>        [Required] Input image file path
  -o,--output-path   <file>        Input image file path (default:
                                   /tmp/temp.png)