本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

圖片盲浮水印

更新時間:2024-11-19 20:03

通過圖片盲浮水印技術,您可以在不影響原圖視覺效果的前提下,向圖片中嵌入不可見的文字資訊。使用解析盲浮水印功能,可以恢複出圖片中的浮水印資訊。盲浮水印圖片經過壓縮、縮放、裁剪、旋轉、色彩變換等攻擊後,仍然可以提取出浮水印內容。

功能簡介

圖片盲浮水印功能示範示意圖如下:

image

使用限制

  • 僅支援文字浮水印,浮水印內容最多支援256個字元。

  • 圖片格式僅支援 jpg、png、bmp、tiff 和 webp。圖片的長寬最小為 80px,最大為 10000px。

  • 圖片盲浮水印可抵抗一定程度的攻擊,可抵抗的攻擊手段包括截屏、裁剪、JPEG壓縮、縮放、換色、飽和度變換、色調變換、亮度變換、少量塗鴉。

  • 圖片盲浮水印不支援純黑或純白圖片,以及解析度過低(<200px * 200px,非嚴格參數)的圖片。同時,圖片的短邊與長邊的比例應大於1:2。

應用情境

  • 鑒權追責:判斷己方的圖片資源是否被惡意攻擊方盜取。

  • 上傳查重:判斷使用者上傳的圖片資源是否來自已存在的資產庫。

  • 資源防泄漏:通過流傳的資源圖片中嵌入的盲浮水印得到泄漏方的相關資訊。

前提條件

  • 已建立並擷取AccessKey。具體操作,請參見建立AccessKey

  • 已開通OSS服務、建立儲存空間並上傳檔案到儲存空間。具體操作,請參見控制台上傳檔案

  • 已開通Intelligent Media Management服務。具體操作,請參見開通產品

  • 已通過Intelligent Media Management控制台建立專案。具體操作,請參見建立專案

說明

您也可以調用API介面建立專案。具體操作,請參見CreateProject - 建立專案

您可以調用ListProjects - 查詢所有專案資訊介面列出指定地區下已建立的所有專案資訊。

使用方法

添加圖片盲浮水印

調用EncodeBlindWatermark介面為圖片添加盲浮水印。

圖片資訊

  • IMM專案名稱:test-project

  • 待檢測圖片的儲存地址:oss://test-bucket/test-object.jpg

  • 圖片樣本:

image

請求樣本

{
  "ProjectName": "test-project",
  "SourceURI": "oss://test-bucket/test-object.jpg",
  "TargetURI": "oss://test-bucket/blindwatermark-object.jpg",
  "Content": "阿里雲著作權",
}

返回樣本

{
  "RequestId": "4FACCDBE-6D15-4E02-9924-1CC5FAF2A9B3",
}

範例程式碼

以Python SDK為例,添加圖片盲浮水印的完整範例程式碼如下。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> imm20200930Client:
        """
        使用AK&SK初始化帳號Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        # 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        # 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 請參考 https://api.aliyun.com/product/imm
        config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        encode_blind_watermark_request = imm_20200930_models.EncodeBlindWatermarkRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/test-object.jpg',
            target_uri='oss://test-bucket/blindwatermark-object.jpg',
            content='阿里雲著作權'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            client.encode_blind_watermark_with_options(encode_blind_watermark_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        encode_blind_watermark_request = imm_20200930_models.EncodeBlindWatermarkRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/test-object.jpg',
            target_uri='oss://test-bucket/blindwatermark-object.jpg',
            content='阿里雲著作權'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            await client.encode_blind_watermark_with_options_async(encode_blind_watermark_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

建立解析盲浮水印任務

調用CreateDecodeBlindWatermarkTask介面建立解析盲浮水印任務,任務完成後,可通過GetDecodeBlindWatermarkResult介面或從非同步訊息中擷取盲浮水印結果。

重要

任務開始執行後,任務資訊只儲存7天,超過7天則無法再擷取。您可以通過以下幾種方式及時擷取任務資訊:

圖片資訊

  • IMM專案名稱:test-project

  • 待檢測圖片的儲存地址:oss://test-bucket/blindwatermark-object.jpg

  • 圖片樣本:

image

請求樣本

{
  "ProjectName": "test-project",
  "SourceURI": "oss://test-bucket/blindwatermark-object.jpg",
}

返回樣本

{
  "TaskId": "DecodeBlindWatermark-23dee5ea-d890-4f82-9357-fa6ad027b2a9",
  "RequestId": "79DD63F2-B72D-0E53-97AA-8B98C1758DBF",
  "EventId": "073-1oOm1dJjEUrCnQz0oFqtEwO7rJr"
}

範例程式碼

以Python SDK為例,解析盲浮水印任務的完整範例程式碼如下。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> imm20200930Client:
        """
        使用AK&SK初始化帳號Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        # 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        # 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 請參考 https://api.aliyun.com/product/imm
        config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_decode_blind_watermark_task_request = imm_20200930_models.CreateDecodeBlindWatermarkTaskRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/blindwatermark-object.jpg'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            client.create_decode_blind_watermark_task_with_options(create_decode_blind_watermark_task_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_decode_blind_watermark_task_request = imm_20200930_models.CreateDecodeBlindWatermarkTaskRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/blindwatermark-object.jpg'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            await client.create_decode_blind_watermark_task_with_options_async(create_decode_blind_watermark_task_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])
  • 本頁導讀 (1, M)
  • 功能簡介
  • 使用限制
  • 應用情境
  • 前提條件
  • 使用方法
  • 添加圖片盲浮水印
  • 建立解析盲浮水印任務
文檔反饋