ToyViewer (Ver.3.2)


他の形式のファイルを表示するには

どんな画像ファイルでも ppm形式へのフィルタがあれば、ToyViewerで表示するように設定できます。このためには、以下の形式で "~/.toyviewerrc", あるいは "~/Library/ToyViewer/rc.arch" にフィルタの指定を記述しておきます。ここで、"arch"は i386, あるいは ppc のいずれかのアーキテクチャ名です。フィルタの実行ファイルの格納場所がアーキテクチャごとに異なる、あるいはあるアーキテクチャで動く実行ファイルしかないというような場合、アーキテクチャごとに指定の記述を違ったものにしておくことが可能です。例えば、PowerPCで実行する場合のフィルタ指定はファイル rc.ppc に記述すればよいのです。
	<ext>	<path>	<args> ... 
ここで <ext> は画像ファイルの拡張子、 <path> はフィルタプログラムの絶対パス、 <args> には引数を指定します。引数のどれかは '$' でなければならず、これが読み込みたいファイル名に置き換えられます。<path> の先頭の '~' はホームディレクトリに、'@' は ToyViewer.app/Resources のパスに展開されます。また、行の先頭に '#' を置くとコメントとなります。以下に例を示します。
jfif  @/djpeg $
ras   /usr/local/netpbm/bin/rasttopnm $
sgi   /usr/local/netpbm/bin/sgitopnm $
g3    /usr/local/netpbm/bin/g3topbm -reversebits $
qwe   ~/Unix/bin/qwe2ppm $ -
この方法で指定した変換方法は、ToyViewer.appであらかじめ用意した表示方式に優先します。例えば、gifという拡張子についての指定をファイルに記述しておけば、その指定した方法で変換、表示されます。

また、ImageViewer.app, OmniImageFilter, McFilterなどのフィルタサービスを提供するプログラムがインストールされていれば、これらのプログラムの提供する形式(例えば Mac paint, sun rasterなど)のファイルもオープンできます。ただし、これらの中には正常に機能しないフィルタもありますので注意して下さい。

以上の方法で表示可能になった画像ファイルをオープンするには、メニューの「ファイル/オープン」から指定するか、デスクトップに置いたToyViewer のアイコン上に画像ファイルのアイコンをドラッグ&ドロップします。 アイコンをダブルクリックしても、ToyViewerは起動しませんので注意して下さい。

画像変換フィルタサービス

ToyViewer が ~/Applications や /Local/Applications などの標準的なパスにインストールされていれば、画像変換フィルタサービスが受けられます。
例えば、Preview.appで bie形式、mag形式のファイルをオープンしたり、TextEdit.appの RTFの文書内にこれらの形式のファイルアイコンをドラッグ&ドロップすることができます(変換後の形式は tiffです)。

画像ファイルが壊れているなどの理由でサービスが失敗した場合、サービスを要求したアプリケーションにはエラーを示す小さな代用のイメージが返されます。

また、上記の方法で他の画像形式のフィルタプログラムを ToyViewer から使えるように設定した場合、これらの形式の画像もフィルタサービスから利用できるように設定できます。このためには、~/Library/Servicesに ToyViewer.services というファイルを作成します。
今、前項の例で追加した拡張子の画像ファイルに対してフィルタサービスが使えるようにするためには、ToyViewer.servicesに以下のように記述します。

{
    NSServices = (
        { NSFilter = convertToTIFF;
                NSPortName = ToyViewer;
                NSSendTypes = (NSTypedFilenamesPboardType:jfif,
					NSTypedFilenamesPboardType:ras,
					NSTypedFilenamesPboardType:sgi,
					NSTypedFilenamesPboardType:g3,
					NSTypedFilenamesPboardType:qwe
				);
                NSReturnTypes = (NSTIFFPboardType);
                NSTimeout = 30000;
        }
        );
}
このファイルを作成した後、ToyViewer を起動しなおせば、フィルタサービスが利用できるようになります。
うまくサービスが機能しない場合は、make_services コマンドを Terminal から入力したり、ログインし直したりしてみて下さい。

あなたが研究のためにグレイスケールの生データを頻繁に使うと考えましょう。そのデータは 320x200ピクセルでヘッダ情報はなく、各バイトが1ピクセル(範囲は0-255)を表しています。拡張子は "gs" です。ToyViewerを使うと、このようなデータも容易に表示できます。
まず、以下のような実行可能なシェルスクリプトを作成します(ファイル名はgstoppm.sh)。このシンプルなスクリプトは、pgm形式への変換フィルタとして機能します。
#!/bin/sh
echo "P5 320 200 255"
cat $1
次に、"~/Library/ToyViewer/rc.arch" というファイルを編集して次の行を追加します。
gs      ~/Unix/sh/gstoppm.sh $
もし、"gs"イメージについてフィルタサービスも利用したいならば、"~/Library/Services/ToyViewer.services" を以下のように作成します。
{
    NSServices = (
        { NSFilter = convertToTIFF;
                NSPortName = ToyViewer;
                NSSendTypes = (NSTypedFilenamesPboardType:gs);
                NSReturnTypes = (NSTIFFPboardType);
                NSTimeout = 30000;
        }
        );
}
これで ToyViewer を起動しなおせば、"gs"ファイルをToyViewerで表示できるようになります。

注意

ToyViewer が提供している cjpeg, djpeg は、コメントが読み書きできるように改良されたプログラムです。他のプログラムで置き換えると正常に動作しなくなります。

複数ユーザで同一のカスタマイズを利用するには

上記の方法は、個人ユーザのカスタマイズ方法です。
ToyViewer.app が /Local/Applications などにあって、複数のユーザで共有している場合、 新しい画像形式の情報は "ToyViewer.app/Resources/filters" に書き加えて下さい。 また、フィルタサービスを利用するには、 "/Local/Library/Services/ToyViewer.services" というファイルに定義を書くとよいでしょう。