同一套水印代码,800px 图上水印离右下角 20px,2400px 图上看起来几乎贴边,200px 缩略图上水印直接超出画布被裁掉一半。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
base = min(im.width, im.height) margin = int(base * 0.03) wm = watermark.resize((int(base * 0.18), int(base * 0.18 * ratio))) pos = (im.width - wm.width - margin, im.height - wm.height - margin)
偏移量写的是绝对像素,画布尺寸一变,视觉比例就跟着变。小图里 20px 占比过大,大图里又显得太挤。水印自身尺寸也没跟着缩放,字号比例不一致。这一点先确认清楚,后面就不用反复试。
「水印边距换算」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,偏移和水印宽高都按画布短边的百分比算;先算水印缩放后的尺寸 再定位到右下角内缩区域;留出最小边距 防止小图算出来是负数;按 200 800 2400 三档各出一张对比图。
改完照着核一遍,三档尺寸下水印与右下角的视觉间距一致,缩略图上水印完整落在画布内,不再被裁切。
