AI 图片边缘 JPEG 伪影怎么消除:5 步导出干净版

高对比边缘出现块状伪影、渐变带状、阴影色阶断裂。根因是 VAE 位深加上糟糕的导出。换 fp16-fix VAE 并改用 PNG。

SDXL 渲染或 inpaint 合成完,发现输出在高对比边缘有块状 8x8 JPEG 伪影、渐变区(天空、皮肤)出现可见的色阶带、阴影区有颜色量化。50% 缩放预览看不出来,100% 一看就崩。原因通常是两层叠加:VAE 解码引入了位深问题(尤其是 SDXL 默认的 fp16 VAE)、再加上 JPEG 导出对已经脆弱的输出再压一次。

修法:换一个更稳的 VAE(SDXL fp16-fix 或 0.9.fp32)、高质量场景一律导 PNG、必须用 JPEG 时 quality 拉到 95+ 并关掉色度子采样。

常见原因

按命中率从高到低:

1. SDXL 默认 fp16 VAE 的 NaN bug

原版 SDXL VAE 在 fp16 GPU 上会在部分像素产生 NaN,表现为色阶带、色洞、边缘伪影。这是一个已知 bug,Hugging Face 上的 sdxl-vae-fp16-fix 修了它。

如何判断:只在 SDXL 出问题,SD 1.5 同样工作流正常。色阶带集中在天空、渐变、阴影区。

2. JPEG 导出 quality 80 以下

很多工具默认(Photoshop “Save for Web” 中等、Telegram、Twitter)会把图重新压到 70-80。每条边缘都会产生 8x8 方块伪影。

如何判断:100% 看任意一条锐边,能看到 8x8 网格图案就是 JPEG 量化。

3. 色度子采样 4:2:0

大多数 JPEG 默认用 4:2:0 色度子采样,把颜色通道分辨率砍半。红蓝边缘(口红、霓虹、夕阳)特别容易糊和漂移。

如何判断:红蓝边缘糊且偏移、绿白边缘锐利。

4. 合成前先放大

如果你把低质量 JPEG 放大后再贴进渲染(或合成两张渲染),放大器会把伪影放大。

如何判断:源图原分辨率没伪影,放大后才出现。

5. inpaint mask 边缘不匹配

硬边 inpaint mask 在重绘区域和原图交界处会留下可见接缝。看着像 JPEG 边缘,实际是 denoise 不匹配。

如何判断:伪影完全沿着你的 inpaint mask 形状走。

最短修复路径

Step 1:换 SDXL VAE

从 Hugging Face 下载 sdxl_vae_fp16_fix.safetensors(stabilityai/sdxl-vae 或 madebyollin/sdxl-vae-fp16-fix),放到:

Automatic1111: stable-diffusion-webui/models/VAE/
ComfyUI: ComfyUI/models/vae/
Forge: webui/models/VAE/

工作流里显式选这个 VAE,不要选 “automatic” 或 “Baked VAE”。同 Prompt 重跑——色阶带和边缘伪影应该立刻消失。

如果实在用不了 fp16-fix,退一步把 VAE 解码切到 fp32(Automatic1111 加 --no-half-vae)。慢一点但稳。

Step 2:导出改 PNG,别用 JPEG

最终交付、任何对画质有要求的场景:

Automatic1111: Settings > Saving images > File format: png
ComfyUI: 用 Save Image 节点,默认就是 PNG
Photoshop: File > Export > Export As > PNG (24-bit)
Affinity: File > Export > PNG

PNG 无损。永远不会出现 JPEG 方块伪影。文件大 3-5 倍,但 1024x1024 这个体积完全 OK。

Step 3:必须 JPEG 时 quality 拉到 95+

网页上传限制、邮件这类必须 JPEG 的场景:

Photoshop: File > Export > Save for Web > JPEG Quality 95+,chroma "4:4:4 progressive"
Affinity: Export > JPEG > Quality 95,"No chroma subsampling"
ImageMagick CLI: convert input.png -quality 95 -sampling-factor 1x1 output.jpg
Squoosh.app: MozJPEG, quality 92, 关闭色度子采样

色度子采样这个开关比 quality 滑块对色彩伪影影响更大。

Step 4:高分辨率出图再降采样

先 1024x1024 渲染,用保颗粒的放大器升到 2048 或 4096,再降采样到交付尺寸:

渲染: 1024x1024
放大: 4x_NMKD-Siax 升到 4096x4096
降采样: 双线性降到目标尺寸(1920x1920 或 1080x1080)
导出: PNG 或 JPEG quality 95

降采样能把放大残留的小伪影平均掉。

Step 5:软化 inpaint mask 边缘

如果伪影沿着 inpaint mask 走:

Mask blur: 8-16 像素(之前 2-4)
Mask padding: 32 像素
Inpaint denoise: 0.4(比 0.6+ 更容易和周围纹理对齐)
"Inpaint area":融合用 "whole picture",外科手术式修补用 "Only masked"

更宽的 mask blur 让 denoise 梯度过渡更长,藏住接缝。

预防建议

  • SDXL 默认 VAE 永远用 sdxl-vae-fp16-fix,别信内置的
  • Automatic1111 / Forge 默认导出格式设成 PNG,只在单图导出时切 JPEG
  • 在乎画质的 AI 图永远不要走 Twitter / Facebook / WhatsApp 二次上传,它们都会重压
  • 客户交付永远同时给 PNG(母版)和 JPEG quality 95(预览)
  • 养成习惯:每张最终图出货前先 100% 缩放检查一遍

相关阅读

标签: #ai-image #排查 #postprocess #vae