Image::Magick と WSH のメモ

16x16 ドットの画像ファイル(複数)から自動で外字登録(Windows)するというありふれたタスクの中で、いくつか問題点にぶつかったのでメモ。

まず、外字は 64x64ドットなので、4倍に拡大する必要がある。Perl でやることにする。そのため、PerlMagick をインストール(サイトにはビルドする必要があると書いてあるが、Windows 用バイナリインストーラで大丈夫。途中に PerlMagick のチェックボックスがあるのでチェック)。

拡大は Resize で。しかし、そのまま実行すると変に補間されてしまう。そこで、blur オプションを指定。< 1 でシャープということだが、0にすると格子状のノイズが入る。よくわからないが、0.2 程度がいいようだ。というわけで、$img->Resize(geometry=>'64x64', blur=>0.2); のようにする。

外字画像の一部に、目で見ると白に見えるが、拡大してよく見ると厳密に白じゃないところがある。これに対処するため、WhiteThreshold を使う。$img->WhiteThreshold(threshold=>'80%'); という感じ。

これを WSH スクリプト(今回は JScript)でペイントから外字エディタに連続コピー。

第5回 WshShellオブジェクトの詳細(1):Windows管理者のためのWindows Script Host入門 - @IT

このサイトが参考になる。

アプリケーションの切り替えには SendKeys での %{TAB}(Alt+Tab) 送信でやろうとしたが、Windows 7 環境で動かすと効かない。そこで AppActivate を使ったが、今度はアクティブにはなるものの、2回目以降、次の SendKeys が送られなくなるという謎の現象が。

この問題は、管理者権限でスクリプトを動作させることで解決できる。アプリケーションと違い、右クリックで「管理者権限で実行」ができないため、コマンドプロンプトを管理者権限で立ち上げ、そこから実行すると楽。