本文主要介绍图像盲水印功能,该功能可以为图像添加盲水印,也可以对水印进行提取验证。
您可对图片资源增加半盲水印,在发现恶意攻击方盗取您的资源后将疑似被盗取图取回,并与相应原图进行盲水印提取操作,若能够得到有效水印图即可证明资源归属。
为解决部分用户使用其他用户资源重复上传相同信息的问题(如房产图、汽车图、商品图等),您可在用户上传图片资源前先进行全盲水印提取,若提取到水印图信息则证明该图片来自之前已有资源,并进行相应操作(如提醒用户请勿重复上传资源);若不存在全盲水印则添加全盲水印,保护图片资源不被其他用户下载后重复上传。
对于内部分享的图片资源,您可通过文字盲水印将访问方的信息在请求图片时添加至图片中,当资源泄露后可通过流传出的资源图提取出盲水印,进而得到泄露方信息。
CustomEnv
。将原图以 demo.png 命名、水印图以 mark.png 命名上传到当前环境的云存储中。
{
"name": "image_watermark_demo",
"version": "1.0.0",
"description": "图像盲水印示例",
"main": "index.js",
"dependencies": {
"@cloudbase/extension-ci": "^0.1.0",
"tcb-admin-node": "^1.22.0"
},
"author": "tcb",
"license": "ISC"
}
**注意:
替换代码中的${CustomEnvId}
为当前环境的真实 ID。
"use strict";
exports.main = async (event, context, callback) => {
const extCi = require("@cloudbase/extension-ci");
const tcb = require("tcb-admin-node");
tcb.init({
env: "${CustomEnvId}",
});
tcb.registerExtension(extCi);
async function addWaterMark() {
try {
const opts = {
rules: [
{
fileid: "/watermark_demo.png",
rule: {
// 添加水印处理规则
mode: 3,
type: 2,
image: "mark.png", // 黑底白色图片,不超过原图的1/8
},
},
],
};
const res = await tcb.invokeExtension("CloudInfinite", {
action: "WaterMark",
cloudPath: "demo.png", // 存储图像的绝对路径,与tcb.uploadFile中一致
operations: opts,
});
console.log(JSON.stringify(res.data, null, 4));
} catch (err) {
console.log(JSON.stringify(err, null, 4));
}
}
await addWaterMark();
async function getWaterMark() {
try {
const opts = {
rules: [
{
fileid: "/watermark_demo_mark.png", // 结果图像
rule: {
// 提取水印处理规则
mode: 4,
type: 2,
image: "mark.png",
},
},
],
};
const res = await tcb.invokeExtension("CloudInfinite", {
action: "WaterMark",
cloudPath: "watermark_demo.png", // 水印图像
operations: opts,
});
console.log(JSON.stringify(res.data, null, 4));
} catch (err) {
console.log(JSON.stringify(err, null, 4));
}
}
await getWaterMark();
callback(null, {
code: 0,
msg: "OK",
});
};
单击页面右上角【测试】>【运行测试】运行云函数。
单击左侧导航栏中的【云存储】,查看处理结果。
说明:
更多信息可参见 图像盲水印介绍。
本文出自 云开发团队