AutoImageCompresserの制作

2020-02-22 oss windows desktopapp

OGP

背景

聞く話によると、VRChatのスクリーンショットは モバイル回線/OneDrive等で同期する事に対して重すぎるらしい。

VRChatのスクリーンショットは基本的に1920x1080でPNG。 色情報に対してのエントロピーが高いVRChatの画像は実に1.5-2.5MB有る。

これが複数枚となると、なるほど。納得せざるを得ない。 「そもそも色情報に対してのエントロピーの高いデータはJPGで圧縮するべき」 という議論すらあるだろう。

そこで、 「同期ソフトウェアの前段で非可逆圧縮や解像度変更を行うソフトウェア」 を入れようと考えた。

また、汎用性の為以下を指定可能にすればよいだろう。

  • 入力 (glob)/出力フォルダ
  • 圧縮フォーマット (PNG/JPG)
    • 圧縮品質 (JPGのみ)
  • 横最大px長, 縦最大px長, 最大辺最大px長
  • 動作モード (常駐/差分更新/両方)

実装

差分更新が要件に有るため、 DirectoryのListを得てその差分を取る様な実装ではなく、 fsnotifyの様にファイルシステムと密に居られる実装が良いだろう。

また背景より、Windowsのみがターゲットで有るため、 プラットフォーム依存なフレームワークに依存できる。

その為、FileSystemEventHandlerが使えるC#で書いた。

(ref: System.IO FileSystemEventHandler Microsoft Docs )

また、煩雑なGUIを追加したくない為、iniで設定を管理する。

VRChat用の設定  default.configure.ini を標準で持たせた。

使い方

 yanorei32/autoimagecompresser

Special thanks

Idea, Logo: @FUMI23_VRC