http://jpegclub.org/jpegtran/から最新の win32 jpegtran.exeをダウンロードしたところ、次のことがわかりました。
14500 x 10000 ピクセルの 24 BPP jpeg テスト イメージを用意しました。
- ファイルシステムの圧縮サイズは約7.5 MBです。
- メモリに解凍すると (一部の画像ビューアーを使用)、約450 MBに膨らみます。
ロスレス ローテーション中の jpegtran.exe コマンド ライン ツールのメモリ消費を監視する (180) プロセスが最大900 MBのメモリを消費していることがわかります。
このようなjpeg ロスレス変換では、画像ファイルをメモリにデコードする必要はなく、代わりに、エンコードされたファイル自体に対して数学的変換を実行するだけで、メモリのフットプリントを非常に低く保つことができると想定していました。
次のうちどれが正しいですか?
- この特定のツールの実装におけるいくつかのバグ
- 私が逃したいくつかの設定スイッチ
- 私の最後にいくつかの誤解があります(つまり、jpegロスレス変換も画像をメモリにデコードする必要がありますか?)
- 「画像をメモリにデコードする」よりもさらに多くのメモリを消費する「数学演算」
編集:
JasonD の回答によると、理由は後者のようです。だから私は私の質問を拡張します:
これらの操作を小さなチャンクで実行できる実装はありますか(高いメモリ使用量を避けるため)? それとも、常に全体的に行う必要があり、それを回避する方法はありませんか?
PS:
独自のコーデック/アルゴリズムを実装する予定はありません。代わりに、私の要件を満たす実装があるかどうかを尋ねています。または、少なくとも理論的には可能であれば。