QQ小程序 圖像盲水印

2020-07-10 15:42 更新

圖像盲水印將水印信息以不可見(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) 可直接將文字信息添加至圖片中 終端信息添加

適用場(chǎng)景

鑒權(quán)追責(zé)

您可對(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)限管理工作。

前置要求

  1. 已經(jīng)開(kāi)通云開(kāi)發(fā)。
  2. 云環(huán)境已安裝圖像安全審核擴(kuò)展,點(diǎn)擊此處 查看安裝情況

使用說(shuō)明

1.下載時(shí)添加水印

圖片下載時(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ú)效。

2.上傳圖片并添加水印及提取水印

  1. 安裝擴(kuò)展 SDK 到項(xiàng)目
    npm install --save @cloudbase/extension-ci@latest

  1. 注冊(cè)擴(kuò)展到Cloud對(duì)象 小程序中

const extCI = require('@cloudbase/extension-ci');


// 初始化環(huán)境
qq.cloud.init({
    env:"test-x1dzi"
})


// 注冊(cè)云開(kāi)發(fā)擴(kuò)展
qq.cloud.registerExtension(extCI);

云函數(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);

  1. 調(diào)用擴(kuò)展 SDK
    Cloud.invokeExtension(extensionName: String, options: Object): Promise

參數(shù)說(shuō)明

參數(shù) 類(lèi)型 是否必須 說(shuō)明
extensionName String 擴(kuò)展名,傳CloudInfinite
options Object 擴(kuò)展參數(shù),說(shuō)明見(jiàn)下方

options參數(shù)

名稱(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ù)

operations節(jié)點(diǎn)內(nèi)容

|名稱(chēng)|類(lèi)型|是否必須|說(shuō)明| |rules|Array.<Rule對(duì)象>|是|處理樣式|

Rule節(jié)點(diǎn)內(nèi)容

名稱(chēng) 類(lèi)型 是否必須 說(shuō)明
fileid String 處理結(jié)果的文件路徑,如以’/’開(kāi)頭,則存入指定文件夾中,否則,存入原圖文件存儲(chǔ)的同目錄
rule String 處理參數(shù)

添加水印處理參數(shù)(rule)取值如下:

參數(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));
  }
}
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)