OptiPNG は PNG 画像を再構築して劣化なしに小さくするソフトウェアです。
他にも機能がありますが PNG の最適化を右クリックメニューに追加する方法を紹介します。
-
C:\Windows\System32 に optipng.exe を配置します。
-
レジストリキーを作成します。
HKCU\Software\Classes\SystemFileAssociations\.png\Shell\OptiPNG\Command
- Command の既定の値を、optipng.exe "%1" にして完成です。
複数のPNGファイルを一度に処理することもできます。
このままでも充分実用可能ですが、-preserve (Windowsの属性を維持する) -strip all (チャンクを削除) オプションを追加して、 メニューの表示とアイコンで体裁を整えてみました。
[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 に反映させる方法を採りました。