合肥那页光伏运维方案上线前两小时,我盯着浏览器里刚渲染出来的水印发了三分钟呆。

水印那条细白线,卡在合肥经开区光伏运维中心实拍图的接缝里。2026年4月17日拍的,时间戳还带着现场灰蒙蒙的光线感。Three.js 的 perspective 没锁死,viewport 一换,重绘就偏了0.3像素——底纹斜角和背景图对不齐,白线就钻出来了。

修完才想起来,这行日期根本不是我填的。它从 EXIF 里读出来,自动校准时区,再经 NTP 同步过毫秒级时间戳。连白线都是活的。

图库里存着苏州,客户要的是园区

翻旧项目库时撞见个尴尬事:标着“苏州半导体封装”的 Banner 图,实际拍自慕尼黑某 Fab 厂外景;写“西安冷链物流”的主图,冷凝机组铭牌上印着 “Carrier 30XW-240”。而西安本地仓用的是格力 GMV800WL/E3。

图很清晰。问题不在分辨率。在它说的不是同一套话。

Excel 表格里还躺着“苏州市高新区”字段,合同却早改成“苏州工业园区”。法务台压着地址变更单三天没同步,图库里上百张图的水印就卡在旧地名上。

上周合肥页光调图耗掉 1.8 小时。搜 “photovoltaic maintenance”,Pexels 前三页全是欧美工人戴手套拧螺丝。没有一张拍到双面组件背面的接线盒,也没有一张含国产逆变器铭牌。我们不是缺图,是缺“对得上”的图。

PS 批处理脚本跑得稳。但每次执行前都得手动改城市字段。漏改一个“西安”,水印就打成“西安市雁塔区(2025.12)”,而客户招标文件写的还是“西咸新区能源金贸区”。地理标签、时间戳、设备型号,三处全在打架。

semiconductor factory cleanroom China

现在图源自己报户口,不靠关键词喊

输入不再是“写个光伏页”。是 industry: '光伏运维', city: '合肥'

Qwen2.5-72B 接口一调,直接吐出四段带锚点的 Markdown:技术架构层、本地合规层(自动关联 GB/T 22239-2026 第5.3.2条)、实施周期层、运维响应层。每段末尾的条款跳转标记,点开就是原文 PDF 的精确页码。

图的部分不靠关键词。CLIP-ViT-L/14 模型直接啃像素——Pexels 返回 200 张图,它秒筛掉所有含 “office desk”、“handshake”、“smiling team” 语义的图像。这些图再高清,也和合肥现场无关。

剩下的图进第二道关:Pexels v2.1 API 的地理围栏校验,参数是 geo_filter=31.86,117.28,10km。不是匹配“合肥”两个字,是拿图源元数据里的 GPS 坐标哈希值,跟这个经纬度半径比对。只有实打实拍自合肥城区 10 公里内的图,才进选片池。

水印层用 Three.js WebGL 渲染。滚动时文字保持透视不变形,横屏切竖屏也不错位。三行微文本里,“服务覆盖:苏州工业园区(2026.05 实时签约)”的日期戳,由 NTP 服务器每分钟同步一次;“本页图源:Pexels 认证工业实景图库”随每次 HTTP 请求刷新 image_id 哈希值;最后一行日期与地点,直接从 EXIF 的 GPS 时间戳与地理标签里抽出来。

后台日志按 ISO 27001 审计要求存档:每一帧水印的生成参数、调用的 API 版本、校验通过的哈希值,全留痕。水印本身成了可验证的数字凭证,不是贴纸。

Three.js watermark overlay on web page

删掉本地 PS 脚本那天,CMS 真正开始呼吸

Webhook 回调地址收到 JSON 后,5 秒内返回含水印 HTML 片段。Pexels 直链经 Cloudflare Workers 自动注入 Referer 白名单与 JWT Token,失效图源自动回退至 CDN 缓存版本。

输出内容已通过 WordPress Elementor 4.7.2、Webflow CMS 2026.Q2 及 SaaS 平台 v3.1.8 的兼容性测试——连 <picture><source type="image/webp"> 都做了 fallback。

有些自动化只是把人工步骤藏得更深。这次不一样。

水印里嵌的经纬度不是静态字符串——它从图源元数据里实时提取,地理哈希值在入库前就校验过一致性;日期戳更不是本地时间戳,而是每秒跟 NTP 服务器对一次时钟。

水印这事,真不是加个半透明logo就完事的——它得让访客一眼认出“这图来自Pexels”,又不抢解决方案页本身的风头。上周给教育SaaS客户生成「在线课堂场景页」时,我们把水印位置从右下角挪到左上角15%透明度的Pexels字标,配图加载后自动叠加带行业关键词的微文案(比如“Pexels · 教育科技实拍”),反而让客户觉得“这图是专为我挑的”,不是套模板。