用 github.com/disintegration/imaging 加水印最稳因其纯 Go 实现、无 CGO 依赖、自动处理预乘 alpha、支持抗锯齿缩放与正确图层叠加避免原生 image 包手动合成导致的发虚、透明度错乱、背景变黑等问题。用 github.com/disintegration/imaging 加水印最稳Go 原生 image 包不支持直接合成水印硬写 RGBA 叠加容易出错、不抗锯齿、不处理透明度。实际项目里imaging 是目前最轻量又可靠的方案——它底层用纯 Go 实现没 CGO 依赖跨平台打包不翻车。常见错误是直接拿 image.Draw 手动覆盖结果水印发虚、alpha 混乱或者 PNG 透明背景变黑。这是因为没做 premultiplied alpha 合成而 imaging 默认就处理好了。水印图必须是 *image.NRGBA 或能转成它的格式比如用 imaging.Clone() 强制转换文字水印别用 draw.Draw 直接画先用 imaging.DrawText 渲染到独立图层再叠加缩放水印时用 imaging.Resize imaging.Lanczos别用 NearestNeighbor否则边缘锯齿明显文字水印位置和透明度怎么调才不糊文字水印不是“写上去”就完事关键在渲染时机和 blend 模式。直接往原图上 DrawText 会破坏原图 alpha 通道正确做法是新建一个同尺寸透明图层只在上面画字再用 imaging.Overlay 叠加。常见问题文字半透明但背景发灰其实是水印图层用了 image.RGBA 而非 NRGBA ——前者 alpha 是 postmultiplied后者才是标准预乘imaging 内部所有合成都按 NRGBA 处理。立即学习“go语言免费学习笔记深入”字体大小建议 ≥12px太小的字用 Lanczos 缩放后依然模糊透明度控制用 imaging.AdjustOpacity参数是 0.0–1.0别传整数位置计算别手算坐标用 imaging.Centered 或 imaging.TopLeft 等锚点常量避免图片尺寸变化时水印偏移PNG/JPEG 水印后文件体积暴增这是编码没关对加完水印立刻 jpeg.Encode 或 png.Encode 得到的文件往往比原图大一倍以上。问题不在水印本身而在编码器默认参数太“保守”JPEG 用 DefaultQuality75PNG 用无压缩的 png.Encoder 配置。 Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西