事情本身不复杂,线索都在日志里。给生成的商品图加了可见角标和不可见水印,运营把图裁成 4:3 再压缩上传,水印检测脚本返回未检出,无法证明图是平台生成的。

第一反应是「检测前没做与嵌入时一致的缩放归一」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。可见角标在裁切时被直接切掉。也可能是频域水印强度设为 0.3,压缩后被量化抹平。

不容易想到的是,图片经过二次编码,色度子采样破坏了水印块。

上来先用原图跑一次检测确认基线

python -c "from imwatermark import WatermarkDecoder;d=WatermarkDecoder('bytes',32);print(d.decode('orig.png','dwtDct'))"

提高嵌入强度后重测抗裁切能力

python -c "from imwatermark import WatermarkEncoder;e=WatermarkEncoder();e.set_watermark('bytes',b'plat2026');e.encode('orig.png','wm.png','dwtDctSvd')"

然后按固定中心区域裁剪再检测

python -c "from PIL import Image;im=Image.open('crop.jpg');w,h=im.size;im.crop((int(w*0.1),int(h*0.1),int(w*0.9),int(h*0.9))).save('center.png')"

等前面都确认过,再把检出率写进上传流程的回归脚本

python wm_regression.py --dir samples/ --min-hits 0.9

恢复的判定其实很直接。在裁剪 20% 并压缩到质量 75 后仍能检出原始标识,100 张回归样本检出率 96%,低于阈值的图被拒绝入库。

水印强度与画质是此消彼长的关系,先在真实后处理链路上测检出率,再决定强度,别只看原图能不能解出来。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189