gazou-compressor.jp

スクリーンショットのアンチエイリアス対策:グリッドフィットと整数縮小の実務

フォントのアンチエイリアス(AA)1px罫線は、撮影と縮小の設計次第で崩れます。整数グリッドに合わせ、 整数比で縮小し、用途に応じてPNG/ロスレス/有損WebPを選べば、読みやすさと軽さを両立できます。

関連
文字にじみの基礎は 文字にじみ対策 を参照。

1.5 グリッド合わせの具体策

export const i = (n:number)=>Math.round(n);

TL;DR

3.5 CLI ヘルパー(比較/最適化)

# 差分でAA崩れを可視化
magick compare -metric rmse A.png B.png diff.png || true
# PNG を16色パレットに(UI向け)
pngquant --force --quality=80-100 --speed 1 -o out.png in.png

1. 背景:なぜAAが崩れるのか

整数グリッドの効用
1px罫線/ピクセルアイコンは整数グリッドで描くとAAが乗りません。

6. QA:実機/ブラウザ差の最終確認

2. 撮影レシピ:DPRと整数スケール

  1. UIの表示幅を実測し、1x/2x等の整数DPRで表示。
  2. クリップ範囲は 整数px で切り出し(clip座標/幅高は四捨五入禁止)。
  3. 出力はPNG(必要に応じてパレット減色)。
// クリップ矩形を整数に丸める
export function clampRect(r:{x:number;y:number;width:number;height:number}){
  return { x: Math.round(r.x), y: Math.round(r.y), width: Math.round(r.width), height: Math.round(r.height) };
}

3. 縮小レシピ:整数比優先

4. 形式選択:PNG/ロスレス/有損WebP

文字/罫線主体はPNGパレットやロスレスWebPが有利。写真混在はWebP有損85%±5%を起点に比較。

# 比較用にPNG(パレット16色)とWebP85を出力
pngquant --quality=80-100 --speed 1 --force --output out.png in.png
cwebp -q 85 in.png -o out.webp

4.5 実例:小アイコン/細字の最短手順

  1. UIを1xまたは2xの整数DPRで表示(ズーム依存なし)。
  2. クリップ座標/幅高を整数pxに丸めて撮影。
  3. 最終サイズに整数比で縮小(1/2優先。次点で2/3)。
  4. 形式は PNGパレットWebP 85% を比較し、小さくて読める方を採用。
判断基準
100%と150%表示で1px罫線とa/eなどの細部が潰れていないこと。潰れるなら撮影スケールか縮小比を見直します。

5. 実装と配信(LCP/CLS対策)

6. 公開前チェック

FAQ

FAQ(拡張)

1ページズームで2xは整数スケール?
レンダリング後の拡大なので非推奨。DPR/レイアウト幅側で調整。
21px線が消える/太るのはなぜ?
小数座標でサンプルされるとAAが強くなり見かけが変わります。
3SVGは常に安全?
レンダラ差やヒントが影響するため、整数座標の設計は依然重要です。

実装・配信

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事

トピック/更新日の近いコンテンツ