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 に反映させる方法を採りました。