QQ小程序 圖像盲水印

2020-07-10 15:42 更新

圖像盲水印將水印信息以不可見的形式添加到原圖信息中,您可對疑似被盜取的資源進(jìn)行盲水印提取,驗(yàn)證圖片歸屬。

功能特性

開通后,每個(gè)賬戶擁有三千次免費(fèi)額度,超出后進(jìn)行計(jì)費(fèi)。為您提供半盲、全盲和文字盲水印三種類型,您可根據(jù)需要進(jìn)行選擇:

水印類型 特性 適用場景
半盲水?。╰ype1) 抗攻擊性強(qiáng),但提取水印需原圖
小圖(640x640以下)使用 全盲水?。╰ype2)
提取方便,提取水印僅需水印圖 無需對比原圖 批量添加,批量校驗(yàn)
文字水印(type3) 可直接將文字信息添加至圖片中 終端信息添加

適用場景

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

您可對圖片資源增加半盲水印,在發(fā)現(xiàn)惡意攻擊方盜取您的資源后將疑似被盜取圖取回,并與相應(yīng)原圖進(jìn)行盲水印提取操作,若能夠得到有效水印圖即可證明資源歸屬。

上傳查重

為解決部分用戶使用其他用戶資源重復(fù)上傳相同信息的問題(如房產(chǎn)圖、汽車圖、商品圖等),您可在用戶上傳圖片資源前先進(jìn)行全盲水印提取,若提取到水印圖信息則證明該圖片來自之前已有資源,并進(jìn)行相應(yīng)操作(如提醒用戶請勿重復(fù)上傳資源);若不存在全盲水印則添加全盲水印,保護(hù)圖片資源不被其他用戶下載后重復(fù)上傳。

資源防泄露

對于內(nèi)部分享的圖片資源,您可通過文字盲水印將訪問方的信息在請求圖片時(shí)添加至圖片中,當(dāng)資源泄露后可通過流傳出的資源圖提取出盲水印,進(jìn)而得到泄露方信息。 注意:您不僅在云函數(shù)中可以使用該擴(kuò)展能力,也可以在客戶端使用,文件讀寫權(quán)限策略與云存儲一致,減去您額外的權(quán)限管理工作。

前置要求

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

使用說明

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

圖片下載時(shí)添加盲水印與添加普通水印操作相同,只需在圖片訪問鏈接后使用 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ù) 類型 必選 描述
type Int 盲水印類型,有效值:1 半盲;2 全盲;3 文字
image String 水印圖片地址,需要經(jīng)過 URL 安全的 Base64 編碼。 當(dāng) type 為1或2時(shí)必填,type 為3時(shí)無效。 須同時(shí)滿足 3 個(gè)條件:1. 水印圖片存儲在當(dāng)前環(huán)境的云存儲中2. 將您的文件訪問域名中 tcb.qcloud.la 替換為 picsh.myqcloud.com 即可,如:examplebucket-1250000000.picsh.myqcloud.com 3. URL 必須以 http:// 開始
text String 盲水印文字,需要經(jīng)過 URL 安全的 Base64 編碼。當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無效。

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

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

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

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


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


// 注冊云開發(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
})
// 注冊云開發(fā)擴(kuò)展
cloud.registerExtension(extCI);

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

參數(shù)說明

參數(shù) 類型 是否必須 說明
extensionName String 擴(kuò)展名,傳CloudInfinite
options Object 擴(kuò)展參數(shù),說明見下方

options參數(shù)

名稱 類型 是否必須 說明
action String 操作類型,傳:WaterMark
cloudPath String 文件的絕對路徑,與 cloud.uploadFile 中一致
fileContent ArrayBuffer或Buffer 文件內(nèi)容, 有值,表示上傳時(shí)處理圖像;為空,則處理已經(jīng)上傳的圖像
operations Object 盲水印處理參數(shù)

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

|名稱|類型|是否必須|說明| |rules|Array.<Rule對象>|是|處理樣式|

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

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

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

參數(shù) 類型 必選 描述
mode Int 操作類型,固定為3,添加水印
type Int 盲水印類型,有效值:1 半盲;2 全盲;3 文字,必須跟添加盲水印時(shí)的 type 類型一致
image String 盲水印圖片地址,當(dāng)前環(huán)境云存儲中的路徑
text String 盲水印文字,當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無效。

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

參數(shù) 類型 必選 描述
mode Int 操作類型,固定為4,提取水印
type Int 盲水印類型,有效值:1 半盲;2 全盲;3 文字,必須跟添加盲水印時(shí)的 type 類型一致
image String 圖片地址,當(dāng) type 為1或2時(shí)必填,type為3時(shí)無效。 type 為1時(shí),為未帶盲水印的原圖圖片地址;type 為2時(shí),為已經(jīng)添加盲水印的圖地址
text String 盲水印文字,當(dāng) type 為3時(shí)必填,type 為1或2時(shí)無效

返回內(nèi)容 返回內(nèi)容

參數(shù)名稱 類型 描述
UploadResult Object 原圖信息

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

參數(shù)名稱 類型 描述
ProcessResults Object 圖片處理結(jié)果

ProcessResults 節(jié)點(diǎn)內(nèi)容: |節(jié)點(diǎn)名稱|類型|描述| |Object|Object|每一個(gè)圖片處理結(jié)果|

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

節(jié)點(diǎn)名稱 類型 描述
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"
})


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


// 用戶選擇圖片
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
})


// 注冊云開發(fā)擴(kuò)展
cloud.registerExtension(extCI);


let fileContent = imageBuffer; // Buffer格式圖像內(nèi)容

您可以根據(jù)需要選擇在【客戶端】或【云函數(shù)】中使用,再按照如下代碼調(diào)用:

async function addWaterMark() {
  try {
    const opts = {
      rules:
      [
        {
          // 處理結(jié)果的文件路徑,如以’/’開頭,則存入指定文件夾中,否則,存入原圖文件存儲的同目錄
          fileid: "/watermark/demo.jpeg",
          rule: { // 添加水印處理規(guī)則
            mode: 3,
            type: 3,
            text: 'tcb' // 支持?jǐn)?shù)字[0 - 9]及英文大小寫[A - Z,a - z]
          }
        }
      ]
    }
    const res = await cloud.invokeExtension("CloudInfinite", { // 小程序里使用qq.cloud.invokeExtension
      action:'WaterMark',
      cloudPath: "demo.jpeg", // 存儲圖像的絕對路徑,與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", // 存儲圖像的絕對路徑,與cloud.uploadFile中一致
      operations:opts
    });
    console.log(JSON.stringify(res.data, null, 4));
  } catch (err) {
    console.log(JSON.stringify(err, null, 4));
  }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號