概要
- ChromeのJPEGデコード最適化が アイコン描画の違い の原因
- 部分IDCTスケーリング による効率的な縮小処理
- 高周波情報 が縮小時に主に失われる特徴
- Chromeは Skiaとlibjpeg-turbo で処理を実施
- アイコンやロゴには JPEG非推奨 という教訓
ChromeのJPEGデコード最適化とアイコン描画の違い
-
ChromeとFirefox で同じロゴ画像を表示した際の見た目の違い
- Chromeでは画像が 太く見える 現象
- SVG画像に差し替えると問題が解消
-
画像縮小時の一般的な処理
- JPEGを完全にデコードし、縮小する直感的な方法
- 例:2000×2000のJPEGを20×20で表示する場合、 無駄なメモリ消費
- 元画像の多くの情報が縮小時に失われる
-
縮小時に失われる情報の特徴
- 主に 高周波情報 (細かいディテール)が消える
- 例:木の葉や樹皮の細部は縮小すると単純な色の塊になる
-
JPEGの画像データ保存方法
- 画像を 8×8ブロック に分割し、周波数領域に変換(DCT)
- 低周波成分 =単色、 高周波成分 =チェッカーボード状
- 各パターンの量を 係数(coefficient) として保存
-
1/8スケールでのJPEG描画
- 8×8ブロックが縮小後は 1ピクセル になる
- 低周波成分 のみ必要、高周波成分は省略可能
- 係数の一部のみ使うことで 高速・省メモリ にデコード可能
- この手法は partial IDCT scaling (部分IDCTスケーリング)と呼ばれる
Chrome/SkiaのJPEG縮小処理の仕組み
-
Chromeは画像デコード・描画をSkiaに委任
- Skiaは libjpeg-turbo を利用
- 部分IDCTスケーリング により低周波成分だけをデコード
- 8分の1など、 8の分数単位 で縮小可能
- さらに必要な場合は従来のダウンサンプリングも実施
-
現象の理由
- 小さいサイズで表示時、 定数成分のみ が残り、エッジの柔らかさやグラデーションが失われる
- そのためChromeでは画像が 太く・単純化 されて見える
JPEG最適化の教訓と推奨
- JPEGは写真向けフォーマット
-
Joint Photographic Experts Group の名が示す通り、写真に最適化
-
アイコンやロゴなど 細部や輪郭重視の用途には不向き
-
SVGやPNGなど 非圧縮・ベクター形式 推奨
-
Chromeの最適化による描画差異の発生理由
-
JPEGの縮小最適化手法の技術的背景
-
適切な画像フォーマット選択の重要性
-