package loader import ( "image" "image/color" ) // ExtractAlpha 将白色/浅灰背景转换为透明,保留非白色像素 // 用于处理 AI 生成的装饰图(MiniMax 可能不输出透明 PNG) func ExtractAlpha(img image.Image) *image.NRGBA { bounds := img.Bounds() result := image.NewNRGBA(bounds) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { r, g, b, a := img.At(x, y).RGBA() // 将 uint32 (0-65535) 归一化到 0-1 rf := float64(r) / 65535.0 gf := float64(g) / 65535.0 bf := float64(b) / 65535.0 // 亮度 > 90% 的视为白色/浅灰背景,设为透明 luminance := (rf + gf + bf) / 3.0 if luminance > 0.90 { result.SetNRGBA(x, y, color.NRGBA{R: 0, G: 0, B: 0, A: 0}) } else { result.SetNRGBA(x, y, color.NRGBA{ R: uint8(r >> 8), G: uint8(g >> 8), B: uint8(b >> 8), A: uint8(a >> 8), }) } } } return result }