サムネイルのキャッシュ

Susieプラグイン対応やリサイズ対応などの利便性から、X-Finderの特徴の一つだったサムネイル表示(縮小版・並べて表示等)だが、
11-1-1から、一旦描画されたサムネイルが保存されるキャッシュ機能が実装*1され、その使用用途が大きく広がった。

キャッシュを有効にするには"ツール"→"詳細オプション"→"最小キャッシュサイズ"の値を"1"以上にすればよい。
("0"だとキャッシュ無効、"-1"だと逐一以前作成したキャッシュを削除する)

キャッシュの恩恵

サムネイル描画の高速化

OSが標準で表示できる画像に加え、Susieプラグインを使用して対応する画像ファイルや動画ファイル、CADデータ等もサムネイル作成できるのはX-Finderの便利な機能の一つだったが、以前はフォルダを読み込む度に逐一サムネイルを作成していたため、サムネイル作成に時間がかかるファイル(大きな画像や動画ファイル等)が含まれるフォルダだと描画にかなり時間がかかっていた。

キャッシュの実装により、こうしたサムネイル作成に要した時間がなくなったため、今まで描画終了まで待たされる時間が長かったフォルダでは特にその効果を実感することができる。

サムネイルの変更

サムネイルのキャッシュはそのファイルのNTFS代替データストリーム(Alternate Data Streams)に"thumbnail.jpg"として保存されている。
(Alternate Data Streamsについてはこちらこちらを参照)
このため、参照される"thumbnail.jpg"を変更することにより、サムネイルとして表示される画像を各自で設定することができる。

β版の11-2-33より"Thumbnail:"コマンドができたため、サムネイルの変更は非常にお手軽になった。(上記を意識しなくても簡単に操作できるようになった)

サムネイルを独自に設定・変更

Alternate Data Streamsの"thumbnail.jpg"がそのファイルのサムネイルとなるので、"thumbnail.jpg"さえ設定すればどんなファイルでもサムネイルを変更可能だし、通常サムネイルが表示されないファイルやフォルダにもサムネイルを付けることができる。


以下はビルトインコマンドの"Thumbnail:"を使用して"thumbnail.jpg"を任意のファイルに変更するランチャ。任意のファイルのフルパスをクリップボードにコピーしてから実行する。

サムネイルを設定する
[パス]
Thumbnail: %clipboard% "%focused%:thumbnail.jpg"
[動作]
実行


このランチャでサムネイルを変更したところ。"Water Lilies"は実際の画像とは異なるサムネイルを表示している。
(プレビューで表示されているのが実際の画像)

サムネイル用の画像を作成するには、ImageMagick等も利用できる。
以下はImageMagickのconvert.exeを利用してフォーカスされた画像から160x160のサムネイル用画像を作成するランチャ。

サムネイル用画像thumb.jpgを出力する
[パス]
..convert.exe %focused% -resize 160x160 -size 160x160 xc:#E6FFE6 +swap -gravity center -composite thumb.jpg
[動作]
実行

実際に動作させると、この画像がこう変わる。空白を埋める色も指定できるので、ウインドウの背景色と統一しておくと違和感なく表示できると思う。

キャッシュはタブを更新しただけでは作成し直されないので、描画に失敗したファイルのサムネイルを個別に作成し直すときには"Thumbnail:Delete"を使用してキャッシュを削除するとよい。(上記のランチャで設定したサムネイルを削除したいときにも使用)

選択したファイルのサムネイルを削除する
[パス]
Thumbnail:Delete %Selected%
[動作]
実行

以下ではサムネイルの設定の具体的な活用例について書いていく。

――関係するコマンド
  • Thumbnail:Create 〜・・・〜のサムネイルキャッシュを作成する
  • Thumbnail:Delete 〜・・・〜のサムネイルキャッシュを削除する
  • Thumbnail: A B C,D・・・・Aを基にして、CxDの大きさのjpgファイルBを作成する
動画ファイルに好きなシーンのサムネイルをつける

システム標準の機能やMediaPlayer Susie Plug-inを使用すれば対応する動画ならサムネイルも一応作成することができるが、細かなシーンの指定等をすることはできない。
(以下では、サムネイルサイズ:160x120の例で記述していく)

 だが、キャプチャ機能がある動画再生ソフトで好みのシーンをキャプチャし、上述のランチャで変換してそのファイルのサムネイルにすれば、好みのシーンをサムネイルにして管理することができる。


とはいっても一々動画をチェックしてサムネイルを選択するのは非常に時間がかかるので、ここでは動画のサムネイルを作るやつ*2でサムネイル一覧の画像を作成し、Bitmap Knifeで任意の領域を選択するといった方法でサムネイル用元画像を用意するランチャを紹介する。

サムネイル用画像を選択する
[パス]
...MovieThumbGenWin32.exe -c=4 -r=4 -w=160 -h=120 -f=png -q=90 -b=FFFFFF "%focused%" "*thumbnail.png" -o
Confirm:"確認","%focused%thumbnail.pngからサムネイルを選びます"
...BmpKnife.exe "%focused%thumbnail.png"
[動作]
実行

実際に使用すると、こんな感じ。

  1. DOS窓が消えてサムネイルの元ファイルの作成が終わったことを確認しOKをクリック
  2. Bitmap KnifeでXFのサムネイルサイズを入力し、サムネイルを選択
  3. クリップボードにコピーしてjpg保存

以上でサムネイルサイズのjpgファイルが用意できるので、上述のランチャでサムネイルに設定すればよい。

Bitmap Knifeは事前にSusieプラグインのフォルダを指定しないとPNGが読めないので注意。

また、別のツールを使ってより簡単にサムネイルの設定を行う方法もある。以下はそのランチャ。

サムネイル用画像を選択する
[パス]
...MovieThumbGenWin32.exe -c=4 -r=3 -w=160 -h=120 -f=png -q=96 -b=FFFFFF "%focused%" C:\temp\temp.png -o
...T13_595.lnk
Confirm:"確認","サムネイルを設定"
Thumbnail: C:\temp\thumb.png "%focused%:thumbnail.jpg"
[動作]
実行

実際に使用すると、こんな感じ。

T13_595.lnkはT13_595.jarのショートカット。実行には前もってJavaの導入が必要。
上記ランチャの実行前にT13_595.jarを実行し、入力ファイルの欄に「C:\temp\temp.png」、サムネイルサイズ(上記の例なら160,120)、
実行コマンドの欄に「"〜i_view32.exe" "%img%" "/convert=C:\temp\thumb.png"」を入力しておく。

シーンを選ばずに複数のシーンを並べたサムネイルを作成してその画像を動画のサムネイルにしたい場合は、下記のような内容のbatファイルを作成してbatファイルに動画を送るランチャを設定し、動画ファイルを選択して実行すればよい。
ランチャを実行するとサムネイル作成→サムネイル変更→リスト更新まで自動で行える。

複数の動画ファイルにサムネイルを設定する"thumb.bat"(160x120用)
[thumb.bat]
@echo off
:thumb
if "%~1"=="" goto :ed
...MovieThumbGenWin32.exe -c=2 -r=2 -w=80 -h=60 -q=95 -b=FFFFFF %1 C:\temp\thumb.jpg -o
Type C:\temp\thumb.jpg > "%~1:thumbnail.jpg"
shift
goto thumb

:ed
...XF.exe Refresh:2
goto :eof

実行後の画面はこんな感じになる。

IEのお気に入りにそのページのサムネイルをつける


IEのお気に入りにサムネイルをつければ、視覚的にお気に入りを管理できるようになる。これは特に普段あまり見ないページの内容を把握するのに非常に有効だと思う。

以下は CrenaHtml2jpgで任意のページのサムネイルを作成、IEのお気に入り(urlファイル)のサムネイルをその画像に変更するランチャ。(サムネイルサイズは160x120に設定)

X-FinderでのWebブラウジングを禁止していると動作しないので注意

インターネットショートカットのサムネイルをそのページから作成した画像にする
[パス]
0:%focused%
...\crena\CrenaHtml2jpg.exe -u%current% -o...\crena\temp.jpg -fjpeg -w640x480 -s160x120 -q92 -d72 -t25
Confirm:"確認","サムネイルを設定します"
Close:
Thumbnail: ...\crena\temp.jpg "%focused%:thumbnail.jpg"
[動作]
実行

確認ダイアログの背後のタブでページの描画が終わったくらいのタイミングでOKをクリックするとうまく動作すると思う。

フォルダのサムネイルをそのフォルダの最新画像にする

XPのexplorerには、フォルダ直下の画像最大4枚をそのフォルダのサムネイルにする機能があり、さらに、フォルダ直下に"folder.jpg"というファイルをおくことでその画像1枚のみをサムネイルとして指定できる機能がある。

以下はその機能を利用してフォーカスしたフォルダのサムネイルをそのフォルダ直下の最新画像1枚のものにするランチャ。

あらかじめ、"ツール"→"詳細オプション"の"システムで表示するファイル"に"*.folder"を記述しておくなどして、エクスプローラの機能でフォルダのサムネイルを表示するようにしておく必要がある。

フォルダのサムネイルを最新画像にする
[パス]
2:Open:
Open: *.jpg;*.png;*.gif;*.bmp
Sort:-更新日時
Thumbnail: "%Focused%" "%current%\folder.jpg"
Close:
Thumbnail:Delete %focused%
[動作]
実行・新規タブ

上のランチャをこの状態で実行すると、こうなる。

画像ファイルをまとめた圧縮ファイルに好きな画像のサムネイルをつける

ファイル数の増加やサブフォルダの増加を避けるために、画像ファイル等をフォルダに分類するのではなくzip等の圧縮フォルダにまとめて管理するといった方法があるが、圧縮フォルダは専用のViewerソフトがないと中身を確認できない。
上述のランチャでサムネイルを設定すれば中身を見た目で判別できるが、圧縮フォルダを解凍→フォルダ内の画像ファイルからサムネイルを作成する・・というのは結構手間がかかる。

以下ではHamanaImageMagickを併用して閲覧中の書庫ファイル内の画像からサムネイル用のJPGファイルを作成する方法を紹介する。


Hamanaの設定は上の画面のようにする。
任意のキーやマウス操作に外部アプリケーションの実行を割り当て、"プログラムと引数"には上述の「imagemagickのconvert,exeを利用してサムネイル用JPGを作成する」ランチャの内容を割り当てる。(具体的には以下の内容)

..convert.exe "$F" -resize 96x96 -size 96x96 xc:#FFFFFF +swap -gravity center -composite C:\temp\hamana.png

ここでは、Homeキーを押すと「サムネイル表示中に選択したファイルを、96x96のサイズにアスペクト比を保持したままリサイズして空白を白で塗りつぶし、"C:\temp\hamana.jpg"として出力する」動作を行うようにしている。

出力されたファイルを確認し、サムネイルを変更したいファイルをフォーカスして以下のランチャを実行すれば書庫にサムネイルをつける作業は終了する。

サムネイルを設定する
[パス]
Thumbnail: C:\temp\hamana.png "%focused%:thumbnail.jpg"
[動作]
実行

また、Imagemagickの機能を利用して以下のような画像を表紙用に作成することもできる。

このときのパスの内容は以下のとおり。

..convert.exe" "$F" -resize 160x120 -matte -virtual-pixel transparent -channel A -blur 0x12 -level 0,50% C:\temp\hamana.png
画像ファイルをまとめた圧縮ファイルの先頭画像をそのサムネイルにする

上述した圧縮ファイルの中身を確認する作業さえわずらわしいときのため、以下では複数ファイルを対象として、それぞれの圧縮ファイルの先頭画像を自動的にそのサムネイルにする方法を紹介する。
用意するのは下記の内容のbatファイル、Portable版の7-ZIP、Xnview付属のnconvert.exeである。
実行前に"C:\temp"フォルダを作成しておく必要がある。

複数の圧縮ファイルに先頭画像サムネイルを設定する"archivethumb.bat"(160x120用)
[archivethumb.bat]
@echo off
set path="7z.exeのフォルダのパス";"nconvert.exeのフォルダのパス";%path%
:thumb
if "%~1"=="" goto :ed
7z x %1 -oC:\temp\tmp *.jpg *.png *.bmp *.gif -r -aoa
cd /d C:\temp\tmp
dir /b /s /o *.jpg *.png *.bmp *.gif>temp.txt
find /N /V "" < temp.txt >nlist.txt
for /F "tokens=1,* delims=[]" %%A in (nlist.txt) do if %%A LEQ 1 echo %%B>>pic1.txt
for /F "delims=" %%A in (pic1.txt) do nconvert -quiet -32bits -out jpeg -o "c:\temp\thumb.jpg" -ratio -rtype lanczos -resize 160 120 "%%A"
Type c:\temp\thumb.jpg > "%~1:thumbnail.jpg"
rmdir C:\temp\tmp /q /s
shift
goto thumb

:ed
..XF.exe Refresh:2
goto :eof

対象ファイルを"archivethumb.bat"に送るランチャを実行すれば、圧縮フォルダにサムネイルがついていくのが確認できると思う。
7-Zipが解凍できる形式なら全て実行可能。


また、対応形式がzipのみに限られるがより高速に動作する別のツールを使用した"archivethumb2.bat"は以下のとおり。
ここでは画像のリサイズにIrfanviewを使用している。

複数のzipファイルに先頭画像サムネイルを設定する"archivethumb2.bat"(160x120用)
[archivethumb2.bat]
@echo off
:thumb
if "%~1"=="" goto :eof
..T13_036.exe -f %1 -d C:\temp\tmp\ -i 0 -t "..i_view32.exe  /resize=(160,120) /aspectratio /resample /convert=c:\temp\thumb.jpg"
ping 1.0.0.0 -w 800 -n 1
Type c:\temp\thumb.jpg > "%~1:thumbnail.jpg"
rmdir /s /q c:\temp\tmp
shift
goto thumb

"T13_036.exe"の仕様は以下のとおり。
-f 入力ファイル(zip)のパス
-d zipのi番目のファイルを出力するフォルダ(作業フォルダ)
-i zipの何番目のファイルを出力するか
-t ファイル出力後に実行するパス。(<input>は-fで指定したパスを表し、はzipを解凍して出来たファイルのパス。)


または、こちらで公開されているSetFolderThumbnail.jsを使用して下記のようなランチャを実行すると、OSがフォルダとして扱えるファイル類に対して上記と同様な動作となる。

複数の圧縮ファイルやフォルダに先頭画像サムネイルを設定する
[パス]
1:Include:JScript SetFolderThumbnail.js /r SetSelectedFolderThumbnail
[動作]
実行
文書ファイルやプレゼン用ファイルに印刷イメージ画像のサムネイルをつける

PRTGAPHを利用して印刷イメージ画像を作成し、イメージカッター等で内容がわかるようにサムネイルサイズの画像を作成する。

*1:実装の仕様上NTFSが扱えないOS(98やMe)では使用できないので注意

*2:WMPで再生可能な状態ならFLVファイルやmp4ファイル等、システム標準ではサムネイルを作成できないファイルもサムネイルを作れるソフト