W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
圖像盲水印將水印信息以不可見(jiàn)的形式添加到原圖信息中,您可對(duì)疑似被盜取的資源進(jìn)行盲水印提取,驗(yàn)證圖片歸屬。
開(kāi)通后,每個(gè)賬戶(hù)擁有三千次免費(fèi)額度,超出后進(jìn)行計(jì)費(fèi)。為您提供半盲、全盲和文字盲水印三種類(lèi)型,您可根據(jù)需要進(jìn)行選擇:
水印類(lèi)型 | 特性 | 適用場(chǎng)景 |
---|---|---|
半盲水印(type1) | 抗攻擊性強(qiáng),但提取水印需原圖 | |
小圖(640x640以下)使用 | 全盲水印(type2) | |
提取方便,提取水印僅需水印圖 | 無(wú)需對(duì)比原圖 批量添加,批量校驗(yàn) | |
文字水?。╰ype3) | 可直接將文字信息添加至圖片中 | 終端信息添加 |
您可對(duì)圖片資源增加半盲水印,在發(fā)現(xiàn)惡意攻擊方盜取您的資源后將疑似被盜取圖取回,并與相應(yīng)原圖進(jìn)行盲水印提取操作,若能夠得到有效水印圖即可證明資源歸屬。
為解決部分用戶(hù)使用其他用戶(hù)資源重復(fù)上傳相同信息的問(wèn)題(如房產(chǎn)圖、汽車(chē)圖、商品圖等),您可在用戶(hù)上傳圖片資源前先進(jìn)行全盲水印提取,若提取到水印圖信息則證明該圖片來(lái)自之前已有資源,并進(jìn)行相應(yīng)操作(如提醒用戶(hù)請(qǐng)勿重復(fù)上傳資源);若不存在全盲水印則添加全盲水印,保護(hù)圖片資源不被其他用戶(hù)下載后重復(fù)上傳。
對(duì)于內(nèi)部分享的圖片資源,您可通過(guò)文字盲水印將訪問(wèn)方的信息在請(qǐng)求圖片時(shí)添加至圖片中,當(dāng)資源泄露后可通過(guò)流傳出的資源圖提取出盲水印,進(jìn)而得到泄露方信息。 注意:您不僅在云函數(shù)中可以使用該擴(kuò)展能力,也可以在客戶(hù)端使用,文件讀寫(xiě)權(quán)限策略與云存儲(chǔ)一致,減去您額外的權(quán)限管理工作。
圖片下載時(shí)添加盲水印與添加普通水印操作相同,只需在圖片訪問(wèn)鏈接后使用 watermark 參數(shù)即可。相關(guān)內(nèi)容如下:
watermark/3/type/<type>/image/<imageUrl>/text/<text>
// 例如:http://xxxxx.tcb.qcloud.la/demo.jpeg?watermark/3/type/3/text/dGVuY2VudCBjbG91ZA==
水印參數(shù)取值如:
參數(shù) | 類(lèi)型 | 必選 | 描述 |
---|---|---|---|
type | Int | 是 | 盲水印類(lèi)型,有效值:1 半盲;2 全盲;3 文字 |
image | String | 否 | 水印圖片地址,需要經(jīng)過(guò) URL 安全的 Base64 編碼。 當(dāng) type 為1或2時(shí)必填,type 為3時(shí)無(wú)效。 須同時(shí)滿(mǎn)足 3 個(gè)條件:1. 水印圖片存儲(chǔ)在當(dāng)前環(huán)境的云存儲(chǔ)中2. 將您的文件訪問(wèn)域名中 tcb.qcloud.la 替換為 picsh.myqcloud.com 即可,如:examplebucket-1250000000.picsh.myqcloud.com 3. URL 必須以 http:// 開(kāi)始。 |
text | String | 是 | 盲水印文字,需要經(jīng)過(guò) URL 安全的 Base64 編碼。當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無(wú)效。 |
npm install --save @cloudbase/extension-ci@latest
const extCI = require('@cloudbase/extension-ci');
// 初始化環(huán)境
qq.cloud.init({
env:"test-x1dzi"
})
// 注冊(cè)云開(kāi)發(fā)擴(kuò)展
qq.cloud.registerExtension(extCI);
const cloud = require('qq-server-sdk');
const extCI = require('@cloudbase/extension-ci');
// 初始化環(huán)境
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 注冊(cè)云開(kāi)發(fā)擴(kuò)展
cloud.registerExtension(extCI);
Cloud.invokeExtension(extensionName: String, options: Object): Promise
參數(shù) | 類(lèi)型 | 是否必須 | 說(shuō)明 |
---|---|---|---|
extensionName | String | 是 | 擴(kuò)展名,傳CloudInfinite |
options | Object | 是 | 擴(kuò)展參數(shù),說(shuō)明見(jiàn)下方 |
名稱(chēng) | 類(lèi)型 | 是否必須 | 說(shuō)明 |
---|---|---|---|
action | String | 是 | 操作類(lèi)型,傳:WaterMark |
cloudPath | String | 是 | 文件的絕對(duì)路徑,與 cloud.uploadFile 中一致 |
fileContent | ArrayBuffer或Buffer | 否 | 文件內(nèi)容, 有值,表示上傳時(shí)處理圖像;為空,則處理已經(jīng)上傳的圖像 |
operations | Object | 是 | 盲水印處理參數(shù) |
|名稱(chēng)|類(lèi)型|是否必須|說(shuō)明| |rules|Array.<Rule對(duì)象>|是|處理樣式|
名稱(chēng) | 類(lèi)型 | 是否必須 | 說(shuō)明 |
---|---|---|---|
fileid | String | 是 | 處理結(jié)果的文件路徑,如以’/’開(kāi)頭,則存入指定文件夾中,否則,存入原圖文件存儲(chǔ)的同目錄 |
rule | String | 是 | 處理參數(shù) |
參數(shù) | 類(lèi)型 | 必選 | 描述 |
---|---|---|---|
mode | Int | 是 | 操作類(lèi)型,固定為3,添加水印 |
type | Int | 是 | 盲水印類(lèi)型,有效值:1 半盲;2 全盲;3 文字,必須跟添加盲水印時(shí)的 type 類(lèi)型一致 |
image | String | 否 | 盲水印圖片地址,當(dāng)前環(huán)境云存儲(chǔ)中的路徑 |
text | String | 否 | 盲水印文字,當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無(wú)效。 |
提取水印處理參數(shù)(rule)取值如下:
參數(shù) | 類(lèi)型 | 必選 | 描述 |
---|---|---|---|
mode | Int | 是 | 操作類(lèi)型,固定為4,提取水印 |
type | Int | 是 | 盲水印類(lèi)型,有效值:1 半盲;2 全盲;3 文字,必須跟添加盲水印時(shí)的 type 類(lèi)型一致 |
image | String | 否 | 圖片地址,當(dāng) type 為1或2時(shí)必填,type為3時(shí)無(wú)效。 type 為1時(shí),為未帶盲水印的原圖圖片地址;type 為2時(shí),為已經(jīng)添加盲水印的圖地址 |
text | String | 否 | 盲水印文字,當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無(wú)效 |
返回內(nèi)容 返回內(nèi)容
參數(shù)名稱(chēng) | 類(lèi)型 | 描述 |
---|---|---|
UploadResult | Object | 原圖信息 |
UploadResult 節(jié)點(diǎn)內(nèi)容:
參數(shù)名稱(chēng) | 類(lèi)型 | 描述 |
---|---|---|
ProcessResults | Object | 圖片處理結(jié)果 |
ProcessResults 節(jié)點(diǎn)內(nèi)容: |節(jié)點(diǎn)名稱(chēng)|類(lèi)型|描述| |Object|Object|每一個(gè)圖片處理結(jié)果|
Object 節(jié)點(diǎn)內(nèi)容:
節(jié)點(diǎn)名稱(chēng) | 類(lèi)型 | 描述 |
---|---|---|
Key | String | 文件名 |
Location | String | 圖片路徑 |
Format | String | 圖片格式 |
Width | Int | 圖片寬度 |
Height | Int | 圖片高度 |
Size | Int | 圖片大小 |
Quality | Int | 圖片質(zhì)量 |
WatermarkStatus | Int | 提取盲水印且當(dāng) type 為2時(shí)返回該字段,表示提取到全盲水印的可信度。具體為0-100的數(shù)字,75分以上表示確定有盲水印,60-75表示疑似有盲水印,60以下可認(rèn)為未提取到盲水印 |
調(diào)用示例 在小程序中使用
const extCI = require('@cloudbase/extension-ci');
// 初始化環(huán)境
qq.cloud.init({
env:"test-x1dzi"
})
// 注冊(cè)云開(kāi)發(fā)擴(kuò)展
qq.cloud.registerExtension(extCI);
// 用戶(hù)選擇圖片
qq.chooseImage({
success:res=>{
// 使用文件管理讀取文件內(nèi)容
const fsm = qq.getFileSystemManager();
const filePath = res.tempFilePaths[0];
const cloudPath = `demo.jpeg`;
fsm.readFile({
filePath:filePath,
success:res2=>{
const fileContent = res2.data; // 格式為ArrayBuffer
}
})
}
})
云函數(shù)中使用:
const cloud = require('qq-server-sdk');
const extCI = require('@cloudbase/extension-ci');
// 初始化環(huán)境
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 注冊(cè)云開(kāi)發(fā)擴(kuò)展
cloud.registerExtension(extCI);
let fileContent = imageBuffer; // Buffer格式圖像內(nèi)容
您可以根據(jù)需要選擇在【客戶(hù)端】或【云函數(shù)】中使用,再按照如下代碼調(diào)用:
async function addWaterMark() {
try {
const opts = {
rules:
[
{
// 處理結(jié)果的文件路徑,如以’/’開(kāi)頭,則存入指定文件夾中,否則,存入原圖文件存儲(chǔ)的同目錄
fileid: "/watermark/demo.jpeg",
rule: { // 添加水印處理規(guī)則
mode: 3,
type: 3,
text: 'tcb' // 支持?jǐn)?shù)字[0 - 9]及英文大小寫(xiě)[A - Z,a - z]
}
}
]
}
const res = await cloud.invokeExtension("CloudInfinite", { // 小程序里使用qq.cloud.invokeExtension
action:'WaterMark',
cloudPath: "demo.jpeg", // 存儲(chǔ)圖像的絕對(duì)路徑,與cloud.uploadFile中一致
fileContent, // 該字段可選,文件內(nèi)容:ArrayBuffer|Buffer。有值,表示上傳時(shí)處理圖像;為空,則處理已經(jīng)上傳的圖像
operations:opts
});
console.log(JSON.stringify(res.data, null, 4));
} catch (err) {
console.log(JSON.stringify(err, null, 4));
}
}
async function getWaterMark() {
try {
const opts = {rules: [
{
fileid: "/watermark/demo.jpeg",
rule: { // 提取水印處理規(guī)則
mode: 4,
type: 1,
image: '/tcb.jpeg'
}
}
]}
const res = await cloud.invokeExtension("CloudInfinite", { // 小程序里使用qq.cloud.invokeExtension
action:'WaterMark',
cloudPath: "demo.jpeg", // 存儲(chǔ)圖像的絕對(duì)路徑,與cloud.uploadFile中一致
operations:opts
});
console.log(JSON.stringify(res.data, null, 4));
} catch (err) {
console.log(JSON.stringify(err, null, 4));
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: