2012年3月9日金曜日

OptiPNGをシェルに統合

OptiPNGはPNG画像を再構築して劣化なしに小さくするソフトウェアです。
他にも機能がありますがPNGの最適化を右クリックメニューに追加してみました。

OptiPNGをシェルに統合
  1. C:\Windows\System32optipng.exe を配置します。

  2. レジストリキーを作成します。

    HKCU\Software\Classes\SystemFileAssociations\.png\Shell\OptiPNG\Command

    Commandキーの既定を設定
  3. Command の既定の値を、optipng.exe "%1"にして完成です。

複数のPNGファイルを一度に処理することもできます。

このままでも充分実用可能ですが、-preserve (Windowsの属性を維持する) -strip all (チャンクを削除) オプションを追加して、 メニューの表示とアイコンで体裁を整えてみました。

PNGの最適化
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\SystemFileAssociations\.png\Shell\OptiPNG]
@="PNGの最適化"
"Icon"="imageres.dll,-113"

[HKEY_CURRENT_USER\Software\Classes\SystemFileAssociations\.png\Shell\OptiPNG\Command]
@="optipng.exe -strip all -preserve \"%1\""


OptiPNGキーの既定の値でメニューを好きな表示にできます。

上書きせずに元のファイルを残すには、-backup オプションを付けます。
例 : optipng.exe -backup "%1"
ファイルに変更がない場合はバックアップは作成されません。

その他のオプションについては、ダウンロードしたZipファイルの中にあるドキュメントに載っていますので、必要に応じて設定できます。

元に戻すには今回追加したキーや値を削除します。



SystemFileAssociationsキー以下はシステム全体の関連づけの設定でHKCRにありますが、なるべく安全に制限なくカスタマイズするためにHKCUに変更を加えています。(HKCR ,HKCU ,HKLM の関係)
システム全体の設定がログインユーザーの設定上にあるのは変則的なのですが、理由があります。

Windowsをインストールしたばかりの状態ならば、このように設定できます。

[HKEY_CURRENT_USER\Software\Classes\pngfile\Shell\OptiPNG\Command]
@="optipng.exe \"%1\""


ですが、これはたぶん動作しません。
新しくインストールしたプログラムが関連づけの道順を変更してしまう為です。

関連づけで最も優先されるのは、ユーザーが設定した既定のプログラムで以下のキーのProgid値です。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice

しかし何が設定されているのか分かりませんし、存在しないかもしれません。

その次に優先されるシステム全体の設定なら、全ての環境に適用できます。

HKEY_CLASSES_ROOT\SystemFileAssociations\.pngに設定すれば良いのですが、できる限りシステムの設定を変更しないように、HKEY_CURRENT_USER(ログインユーザーのみの設定)に書き込み、HKEY_CLASSES_ROOTに反映させる方法を採りました。