Windowsの可逆画像圧縮:LocalFluxの「検証済みロスレス」とは
Windowsの検証済み可逆画像圧縮を、92%小さくなったGIF、完全コピーになったPNG、LocalFlux 1.0.7の実測データで解説します。
この記事の内容
内容を変えずに画像ファイルを小さくしたい場合、単にLossless(ロスレス)という設定を選ぶだけでは十分ではありません。新しいファイルが同じ内容を表していることを確認し、同一性を証明できないときに安全な判断をする必要があります。
LocalFlux 1.0.7は安全側に倒す方式を採用しています。PC上で最適化候補を作成し、形式ごとの内容とメタデータの条件を検証します。変更後の候補を公開するのは、検証に合格し、かつ元より小さい場合だけです。検証できない場合や小さくならない場合は、元ファイルを完全にコピーし、_optimized付きの新しい出力として保存します。
完全コピーにも、読み取り可能な元ファイルと書き込み可能な保存先が必要です。デコード、検証、書き込みのエラーで処理が失敗することもあるため、各ファイルの状態を確認してください。
C:\tmpに置いた合成ファイルで両方の結果を確認しました。
- 冗長性を持たせた12フレームのGIFは、658,785バイトから54,329バイトになり、604,456バイト(91.8%)削減されました。12フレームすべての描画結果と遅延値が一致しました。
- すでに最適化済みのPNGは8,290バイトのままでした。入力と出力のSHA-256が同一で、バイト単位の完全コピーでした。
これは2つの動作を示すために作った合成ファイルの実測値です。一般的な画像で同じ削減率になることを保証するものではありません。
すぐに試す手順
- LocalFluxを開き、圧縮を選びます。
- 対応するJPEG、TIFF、静止PNG/WebP、GIF、APNG、SVGを追加します。
- オプションを開き、Lossless(ロスレス)を選びます。
- 最適化を実行します。
- 各行でロスレス確認済みと、削減結果または最適化済みを確認します。
LocalFluxは元ファイルを残し、_optimized付きの新しいファイルを作成します。処理はWindows PC上で実行され、Web変換サービスへファイルをアップロードしません。

画面は2026年10月に、LocalFlux 1.0.10.0の記録されたリリースソースから再構築したビルドで撮り直しました。過去の測定値とダウンロード資料は、元のテスト範囲のまま残しています。撮影記録: 1
2026年10月の再確認では、10言語で生成した計20ファイルが、過去のGIF・PNG出力とバイト単位で一致しました。GIFは各100 msの12フレームで、描画結果とループ設定が一致しています。GIFの遅延値10は10/100秒を意味します。画面のKB表示は1024バイト単位(KiB)です。この確認は2つの合成サンプルに限られ、すべての形式やメタデータ項目を検証したものではありません。 2026-10
新しい画面ではタブ名が英語で表示されています:Lossless(ロスレス)、Preset(プリセット)、Target size(目標サイズ)。
「検証済みロスレス」の意味
変更された候補は、次の3条件を満たす必要があります。
- 形式に応じた内容検証に合格すること。デコード後のピクセル、TIFFの全ページ、アニメーションの全描画フレーム、タイミング、寸法などが対象です。
- その処理ルートで保持対象となる埋め込みメタデータが維持されること。
- 候補が実際に元ファイルより小さいこと。
どれか1つでも満たさない場合、変更された候補は採用されません。LocalFluxは出力先に元のバイト列を復元し、最適化済みと表示します。見た目が同じように見える未証明の変更より、完全コピーを優先します。
形式ごとの検証内容
| 形式 | LocalFlux 1.0.7での主な検証 |
|---|---|
| JPEG | デコード後のピクセル署名とAPP/COMメタデータ。値の一致を証明できなければ完全コピーになります。 |
| 静止PNG | ピクセルと、対応する色・EXIF・XMP・テキスト・物理解像度メタデータ。 |
| 静止WebP | デコード後のピクセルと対応メタデータチャンク。 |
| TIFF | 全ページ、ピクセル、ページ形状、対応タグ。未確認タグがある場合は完全コピーを選びます。 |
| GIF | 合成後の全描画フレーム、遅延、ループ回数、保持対象の拡張ブロック。 |
| APNG | フレームごとの正規化ハッシュ、タイミング、フレーム数、ループ、PNGメタデータ。 |
| SVG | ロスレスモードではバイト単位でコピーします。 |
ここでの「検証済み」は、明示された条件を確認したという意味です。あらゆるコンテナのすべての性質を無制限に証明するという意味ではありません。
個人情報を使わないテスト環境
当時Microsoft Storeで公開されていたLocalFlux 1.0.7.0を使用しました。個人写真、顧客ファイル、ユーザー名を含むフォルダーは使っていません。元の1.0.7テストでは次のフォルダーを使用しました。新しい画面撮影では C:\tmp\LocalFluxBlogRefresh を使用しています。
C:\tmp\LocalFlux-lossless-proof-v107\input
GIFには、1920 × 1080の同一フルフレームを12枚入れています。これは意図的な構成です。期待する描画内容を明確にしたまま、フレーム間最適化で大きな削減が可能なケースを作れます。小さなPNGは削減できない場合の対照データです。
LocalFluxで実行する
ファイルを追加し、圧縮モードを確認してオプションを開きます。Lossless(ロスレス)を選ぶと、実行ボタンが最適化に変わります。
このテストでは安全に共有をオフにします。目的が異なるためです。
- Lossless(ロスレス)は、対応する内容とメタデータの保持を目指します。
- 安全に共有は、共有用コピーから個人メタデータを意図的に削除します。
出力が出力: 元のファイルと同じフォルダーの場合、新しいファイルは入力の隣に保存されます。たとえばimage.pngからimage_optimized.pngが作られます。元ファイルは上書きされませんが、重要なデータには別途バックアップが必要です。
結果1:検証に合格し、小さくなったファイル
| 測定項目 | 入力 | 出力 |
|---|---|---|
| 正確なサイズ | 658,785バイト | 54,329バイト |
| フレーム数 | 12 | 12 |
| 寸法 | 1920 × 1080 | 1920 × 1080 |
| フレーム遅延 | 12個すべて100 ms | 12個すべて100 ms |
| 削減 | 該当なし | 604,456バイト(91.8%) |

入力と出力のSHA-256は異なります。圧縮コンテナのバイト配置が変わったためです。これはロスレス検証と矛盾しません。描画後の全フレーム署名は一致しました。ファイルハッシュの違いはバイト表現が変わったことを示し、内容検証は対応するアニメーション条件が保持されたことを示します。
91.8%は一般的なGIFの目安ではありません。同じフルフレームを12回繰り返した、非常に冗長なテストファイルです。
結果2:完全コピーへのフォールバック
8,290バイトのPNGでは、より小さく検証可能な候補が得られませんでした。LocalFluxは次のように表示しました。
ロスレス確認済み · 8.1 KB → 8.1 KB · 最適化済み
入力と出力のSHA-256は同一でした。
F287BBCE8EB98A9F19416DCE1A74A759F3AC8DDA69ADB338022CB1B8F90BD937
したがって出力は完全コピーです。最適化済みは失敗ではありません。検証に合格する、より小さな表現がなかったという安全な完了結果です。
プリセット、目標サイズ、ロスレスの違い
| 方法 | 主な目的 |
|---|---|
| プリセット | 見た目の品質とサイズを調整します。形式や設定により内容を意図的に変える場合があります。 |
| 目標サイズ | 品質や寸法を調整し、指定バイト数以下を試みます。達成できない場合もあります。 |
| ロスレス | 検証に合格した変更だけを公開します。完全コピーも正しい結果です。 |
Web配信用コピーで見た目の調整を許容できるならプリセット、アップロード上限には目標サイズ、検証済みの保持を最優先するならロスレスを選びます。
公開している検証資料
よくある質問
すべてのファイルが小さくなりますか?
いいえ。小さく検証可能な候補がない場合、最適化済みとして完全コピーが作成されます。
元ファイルは上書きされますか?
このテスト手順では上書きされません。新しい_optimizedファイルが作られます。
EXIFや位置情報は削除されますか?
ロスレスは保持を目的とします。個人メタデータを削除する場合は安全に共有を使い、公開前に実際のファイルを確認してください。
オフラインで動作しますか?
対応する最適化はPC上で実行され、変換サーバーへ入力を送信しません。Microsoft Storeのインストール、ライセンス、更新にはネットワークが使われる場合があります。
まとめ
LocalFlux 1.0.7のテストでは、合成GIFが検証対象のアニメーション条件を保ったまま91.8%小さくなりました。すでに効率的なPNGは0%削減で完全コピーになりました。どちらも正しい結果です。一方は冗長性を削減し、もう一方は不要または未証明の変更を拒否しています。