gazou-compressor.jp

ディザパターンアーチファクトの診断と抑制テクニック

ディザは 帯域(バンディング)を隠す代償 として粒状感や格子パターンを導入します。Dither Compare とズーム観察で最小副作用を得る診断フローを提示します。

本稿は 症状 → 主因 → 最小修正 → 再評価 のループを最短距離で回すための観察チャート / コマンド / バッチスクリプト / ハイブリッド合成手法を体系化し、UI アイコン / 写真 / イラストで異なる許容度を明示します。

TL;DR

1. 症状と対処表

症状主因対策再評価指標
格子/チェックOrdered (Bayer 8x8)Floyd系 / 色数+16格子周波数ピーク低下
粒状ざらつき過強度拡散--floyd 値低減ΔPSNR -0.2dB 未満
細線滲みエラー過拡散Ordered / マスク線幅維持(px)
高彩度斑点パレット不足色数 +16〜32ΔE95%tile 改善

2. 診断フロー

  1. 200% + 明暗背景で格子/粒状/滲み/斑点分類
  2. 方式固有 vs 色数不足 を判断
  3. 方式切替 → 改善/未改善
  4. 未改善なら色数 +16 step → ΔPSNR/サイズ測定
  5. 局所のみ悪化 → ハイブリッド合成分岐
# Floyd 強度探索 (0.5→0.4→0.3)
for v in 0.5 0.4 0.3; do
  pngquant --floyd=$v --quality=80-90 input.png -o out-fs$v.png
done
# Ordered 比較
magick input.png -ordered-dither o8x8 -colors 128 PNG8:out-ordered.png
# 色数 +16 ステップ
for c in 128 144 160; do
  magick input.png -colors $c -dither FloydSteinberg PNG8:out-fs$c.png
done

2.5 バッチ再評価スクリプト

差分の 客観化 に必要最小: サイズ, ΔPSNR, ΔE95%tile。

// scripts/dither-recheck.ts
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import ArticleNextPrev from '@/components/ArticleNextPrev';
const files = process.argv.slice(2);
console.log('file,variant,size,psnr');
for (const f of files) {
  for (const variant of ['fs128','ordered128','fs144']) {
    if (variant==='fs128') execSync(`magick ${f} -colors 128 -dither FloydSteinberg PNG8:${f}-fs128.png`);
    if (variant==='ordered128') execSync(`magick ${f} -colors 128 -ordered-dither o8x8 PNG8:${f}-ordered128.png`);
    if (variant==='fs144') execSync(`magick ${f} -colors 144 -dither FloydSteinberg PNG8:${f}-fs144.png`);
    const out = `${f}-${variant}.png`;
    const psnr = execSync(`magick compare -metric PSNR ${f} ${out} null: 2>&1 || true`).toString().trim();
    const size = fs.statSync(out).size;
    console.log(`${f},${variant},${size},${psnr}`);
  }
}

3. 合成ワークアラウンド

文字やロゴだけ Ordered + 背景 FS 出力をレイヤ合成するハイブリッドで局所アーチファクトのみ回避。マスク境界は feather 1px

# 背景 FS 出力
magick ui.png -colors 128 -dither FloydSteinberg PNG8:bg.png
# ロゴ Ordered
magick ui.png -colors 128 -ordered-dither o8x8 PNG8:logo.png
# 透過マスク (mask.png)
magick bg.png logo.png mask.png -compose over -composite out-hybrid.png

3.5 UI / 写真 / イラスト判定基準

カテゴリ許容格子許容粒状判定メモ
UI アイコンほぼ 0拡散弱め優先
写真中 (擬態)強度調整優先
イラストOrdered→FS 比較

関連ツール / 深掘り

4. まとめ

観察語彙の標準化 (格子/粒状/滲み/斑点) と最小変更セット (方式切替 / 色数 +16 / 強度弱化 / ハイブリッド) を CSV で履歴化し再発時に再現可能なプロセスへ。

公開日: 2025-09-06編集: gazou-compressor.jp
FAQ

FAQ(よくある質問)

1画像形式の基本方針は?(写真/スクショ/透過)
写真は AVIF / WebP(画質80–85%目安)、UIやスクショはPNG / WebP Lossless、単色ロゴはSVGが基本です。 実装の詳細は srcset/sizes設計ガイド スクショ最適化 を参照してください。
2圧縮しても画質を落とさないコツは?
実表示幅に合わせたリサイズ → 過大ダウンロードを防ぎ、srcset/sizes を 実描画幅に一致させます。画質は写真で 80–85% を起点に、ノイズやエッジを目視確認。 仕上げは /compare で Before/After を見比べるのがおすすめです。
3CLSを悪化させない画像の置き方は?
すべての画像に width/height(または親に aspect-ratio)を与え、広告・埋め込みは 予約サイズを先に確保します。詳しくは CLSゼロ設計ガイド を参照。

gazou-compressor.jp 編集部

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

関連記事

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