すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ブラインドウォーターマーク

最終更新日:Nov 09, 2025

ブラインドウォーターマークを使用すると、Object Storage Service (OSS) バケットに保存されているイメージにブラインドテキストウォーターマークを追加し、これらのブラインドウォーターマークをデコードできます。

概要

ブラインドウォーターマークは、非表示のテキスト情報をイメージに埋め込むことができるウォーターマーク技術です。 ウォーターマークのコンテンツを取得する場合は、image/deblindwatermark 操作を使用してウォーターマークをデコードできます。 トリミング、サイズ変更、落書き、色の変更など、イメージが特定の程度の攻撃を受けても、ウォーターマークのコンテンツは正しくデコードできます。

シナリオ

  • 認証と説明責任: 悪意のある攻撃者によってイメージが盗まれたかどうかを判断できます。

  • 重複画像の検出:不可視ウォーターマークは、アップロードする画像がリソースライブラリに既に存在するかどうかを検出するために使用できます。

  • リソースリーク防止:不可視ウォーターマークは、不正な画像を配布するソースを追跡するために使用できます。これは、画像の著作権を保護します。

使用方法

  • ブラインドウォーターマークの追加: 同期処理には x-oss-process パラメーターを使用します。 ウォーターマークを追加した後、イメージを新しいファイルとして保存する必要があります。

  • ブラインドウォーターマークのデコード: 非同期処理には、x-oss-async-process パラメーターを使用します。デコードされたテキストウォーターマークは、非同期メッセージに含まれます。

前提条件

  • IMM が 有効化されている。

  • バケットが IMM プロジェクトにバインドされています。 OSS コンソールで OSS バケットを IMM プロジェクトにバインドする方法の詳細については、「使用開始」をご参照ください。 IMM API を使用してバケットを IMM プロジェクトにバインドする方法の詳細については、「AttachOSSBucket」をご参照ください。

  • 不可視ウォーターマークのデコードでは、ウォーターマーク付き画像を含むバケットが、ソース画像と同じリージョンにあり、画像のウォーターマークに使用された IMM プロジェクトにバインドされている。

不可視ウォーターマークを追加する

操作: image/blindwatermark

ウォーターマークのエンコーディング手順

  1. コンテンツを Base64 エンコードします。

  2. 結果のエンコーディングの一部を置き換えることができます。

    • プラス記号(+)をハイフン(-)に置き換えます。

    • スラッシュ(/)をアンダースコア(_)に置き換えます。

    • Base64 エンコードされたコンテンツの末尾にあるすべての等号(=)を省略します。

Java

OSS SDK for Java V3.17.4 以後が必要です。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GenericResult;
import com.aliyun.oss.model.ProcessObjectRequest;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Formatter;

public class Demo {
    public static void main(String[] args) throws IOException {
        // リージョンのエンドポイントを指定します。この例では、中国 (杭州) リージョンのエンドポイントを使用しています。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。
        String region = "cn-hangzhou";
        // プロジェクトコードにアクセス認証情報をハードコードしないことをお勧めします。そうしないと、アクセス認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        // この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // ソース画像が保存されているバケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";

        // ソース画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: sourceDir/source.jpg。
        String sourceImage = "sourceDir/source.jpg";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            StringBuilder sbStyle = new StringBuilder();
            Formatter styleFormatter = new Formatter(sbStyle);

            // ウォーターマークコンテンツを指定します。
            String content = "Copyrighted by Alibaba Cloud";
            // 不可視ウォーターマークを追加します。
            byte[] encodedContentBytes = java.util.Base64.getEncoder().encode(content.getBytes(StandardCharsets.UTF_8));
            String encodedContentStr = new String(encodedContentBytes, StandardCharsets.UTF_8);
            String styleType = "image/blindwatermark,content_" + encodedContentStr;

            // 処理済み画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: targetDir/target.jpg。
            String targetImage = "targetDir/target.jpg";
            styleFormatter.format("%s|sys/saveas,o_%s,b_%s",
                    styleType,
                    java.util.Base64.getEncoder().encodeToString(targetImage.getBytes(StandardCharsets.UTF_8)),
                    java.util.Base64.getEncoder().encodeToString(bucketName.getBytes(StandardCharsets.UTF_8)));

            System.out.println(sbStyle.toString());
            ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
            GenericResult processResult = ossClient.processObject(request);

            BufferedReader reader = new BufferedReader(new InputStreamReader(processResult.getResponse().getContent(), StandardCharsets.UTF_8));
            StringBuilder responseContent = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                responseContent.append(line).append("\n");
            }

            reader.close();
            processResult.getResponse().getContent().close();
            System.out.println(responseContent.toString());
        } catch (OSSException oe) {
            System.err.println("OSSException が発生しました。これは、リクエストが OSS に到達したものの、何らかの理由でエラー応答で拒否されたことを意味します。");
            System.err.println("エラーメッセージ:" + oe.getErrorMessage());
            System.err.println("エラーコード:" + oe.getErrorCode());
            System.err.println("リクエスト ID:" + oe.getRequestId());
            System.err.println("ホスト ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.err.println("ClientException が発生しました。これは、クライアントが OSS と通信しようとしているときに、ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。");
            System.err.println("エラーメッセージ:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

OSS SDK for Python V2.18.4 以後が必要です。

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# ソース画像が保存されているバケットの名前を指定します。
source_bucket_name = 'source_bucket_name'
# 出力画像を保存するバケットの名前を指定します。バケットは、ソース画像が保存されているバケットと同じリージョン内にある必要があります。
taget_bucket_name = 'taget_bucket_name'
# ソース画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: sourceDir/source.jpg。
source_image_name = 'sourceDir/source.jpg'

# バケットインスタンスを作成します。すべてのオブジェクト関連の操作を呼び出すには、バケットインスタンスを使用する必要があります。
bucket = oss2.Bucket(auth, endpoint, source_bucket_name)

# ウォーターマークコンテンツを指定します。
content = 'Copyrighted by Alibaba Cloud'

# 不可視ウォーターマークを追加します。
style = "image/blindwatermark,content_{0}".format(oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(content))))

# 出力画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: targetDir/target.jpg。
target_image_name = 'targetDir/target.jpg'
process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
    oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_image_name))),
    oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(taget_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result)

Go

OSS SDK for Go V3.0.2 以後が必要です。

package main

import (
	"encoding/base64"
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// OSSClient インスタンスを作成します。
	// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
	client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// ソース画像が保存されているバケットの名前を指定します。
	bucketName := "srcbucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		handleError(err)
		return
	}

	// ソース画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: sourceDir/source.jpg。
	sourceImageName := "sourceDir/source.jpg"

	// 保存先バケットの名前を指定します。保存先バケットは、ソースバケットと同じリージョンに配置する必要があります。
	targetBucketName := "destbucket"

	// 処理済み画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: targetDir/target.jpg。
	targetImageName := "targetDir/target.jpg"

	// ウォーターマークコンテンツを指定します。
	content := "Copyrighted by Alibaba Cloud"

	// 不可視ウォーターマークを追加します。
	encodedContent := base64.URLEncoding.EncodeToString([]byte(content))
	style := fmt.Sprintf("image/blindwatermark,content_%s", encodedContent)

	process := fmt.Sprintf("%s|sys/saveas,o_%s,b_%s", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))

	result, err := bucket.ProcessObject(sourceImageName, process)
	if err != nil {
		handleError(err)
	} else {
		fmt.Println(result)
	}
}

func handleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}

PHP

OSS SDK for PHP V2.7.0 以後が必要です。

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// ソース画像が保存されているバケットの名前を指定します。例: examplebucket。
$bucket = "examplebucket";

// ソース画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: sourceDir/source.jpg。
$object = "sourceDir/source.jpg";

// 処理済み画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: targetDir/target.jpg。
$save_object = "targetDir/target.jpg";

function base64url_encode($data)
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

try {
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);

    // ソースバケットにソース画像が存在しない場合は、ソースバケットに画像をアップロードする必要があります。
    // $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");

    $content = "Copyrighted by Alibaba Cloud";
    // 不可視ウォーターマークを追加します。
    $encodedContent = base64url_encode($content);
    $style = "image/blindwatermark,content_$encodedContent";

    $process = $style .
               '|sys/saveas,' .
               'o_' . base64url_encode($save_object) .
               ',b_' . base64url_encode($bucket);

    // 処理済み画像を example-new.png として現在のバケットに保存します。
    $result = $ossClient->processObject($bucket, $object, $process);
    // 結果を表示します。
    print_r($result);
} catch (OssException $e) {
    echo "Error: " . $e->getMessage();
}
?>

他の言語の SDK の使用方法については、「sys/saveas」をご参照ください。

不可視ウォーターマークをデコードする

操作: image/deblindwatermark

Java

OSS SDK for Java V3.17.4 以後が必要です。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.GenericResult;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Demo {
    public static void main(String[] args) throws IOException {
        // リージョンのエンドポイントを指定します。この例では、中国 (杭州) リージョンのエンドポイントを使用しています。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。
        String region = "cn-hangzhou";
        // プロジェクトコードにアクセス認証情報をハードコードしないことをお勧めします。そうしないと、アクセス認証情報が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        // この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // ソース画像が保存されているバケットの名前を指定します。例: examplebucket。
        String bucketName = "target_bucket_name";

        // ソース画像の名前を指定します。画像がバケットのルートディレクトリに保存されていない場合は、画像のフルパスを指定する必要があります。例: sourceDir/source.jpg。
        String sourceKey = "targetDir/target.jpg";

        // Simple Message Queue (SMQ) トピック。
        String topic = "imm-blindwatermark-test";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 指定された画像からウォーターマークを抽出します。
            String style = "image/deblindwatermark,s_low,t_text";
            String encodedTopic = Base64.getUrlEncoder().withoutPadding().encodeToString(topic.getBytes(StandardCharsets.UTF_8));
            String process = String.format("%s|sys/notify,topic_%s", style, encodedTopic);

            AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);

            // 非同期処理操作を呼び出します。
            GenericResult result = ossClient.asyncProcessObject(request);
            System.out.println(result.getRequestId());

        } catch (OSSException oe) {
            System.err.println("OSSException が発生しました。これは、リクエストが OSS に到達したものの、何らかの理由でエラー応答で拒否されたことを意味します。");
            System.err.println("エラーメッセージ:" + oe.getErrorMessage());
            System.err.println("エラーコード:" + oe.getErrorCode());
            System.err.println("リクエスト ID:" + oe.getRequestId());
            System.err.println("ホスト ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.err.println("ClientException が発生しました。これは、クライアントが OSS と通信しようとしているときに、ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。");
            System.err.println("エラーメッセージ:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

OSS SDK for Python V2.18.4 以後が必要です。

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# ウォーターマーク付き画像を含むバケットの名前を指定します。
bucket_name = 'taget_bucket_name'
# ウォーターマーク付き画像の名前を指定します。
source_key = 'targetDir/target.jpg'
# Simple Message Queue (SMQ) トピックを指定します。
topic = 'imm-blindwatermark-test'

# バケットインスタンスを作成します。すべてのオブジェクト関連の操作を呼び出すには、バケットインスタンスを使用する必要があります。
bucket = oss2.Bucket(auth, endpoint, bucket_name)

# 指定された画像からウォーターマークコンテンツを抽出します。
style = 'image/deblindwatermark,s_low,t_text'
process = "{0}|sys/notify,topic_{1}".format(style,
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(topic))).replace('=', ''))

// 非同期処理操作を呼び出します。
result = bucket.async_process_object(source_key, process)
print(result.request_id)

Go

OSS SDK for Go V3.0.2 以後が必要です。

package main

import (
    "encoding/base64"
    "fmt"
    "os"
    "strings"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // OSSClient インスタンスを作成します。
    endpoint := "https://oss-cn-hangzhou.aliyuncs.com"
    client, err := oss.New(endpoint, "", "", oss.WithCredentialsProvider(provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // ウォーターマーク付き画像を含むバケットの名前を指定します。
    bucketName := "target_bucket_name"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        handleError(err)
        return
    }

    // ウォーターマーク付き画像の名前を指定します。
    sourceKey := "targetDir/target.jpg"

    // Simple Message Queue (SMQ) トピックを指定します。
    topic := "imm-blindwatermark-test"

    // 指定された画像からウォーターマークコンテンツを抽出します。
    style := "image/deblindwatermark,s_low,t_text"
    encodedTopic := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(topic)), "=")
    process := fmt.Sprintf("%s|sys/notify,topic_%s", style, encodedTopic)

    // メディア処理操作を呼び出します。
    result, err := bucket.AsyncProcessObject(sourceKey, process)
    if err != nil {
        handleError(err)
    } else {
        fmt.Println(result.RequestID)
    }
}

func handleError(err error) {
    fmt.Fprintf(os.Stderr, "Error: %v\n", err)
    os.Exit(-1)
}

PHP

OSS SDK for PHP V2.7.0 以後が必要です。

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");

// リージョンのエンドポイントを指定します。この例では、中国 (杭州) リージョンのエンドポイントを使用しています。
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';

// ウォーターマーク付き画像を含むバケットの名前を指定します。
$bucketName = 'target_bucket_name';

// ウォーターマーク付き画像の名前を指定します。
$sourceKey = 'targetDir/target.jpg';

function base64_url_encode($input) {
    return strtr(base64_encode($input), '+/', '-_');
}

try {
    // OSSClient インスタンスを作成します。
    $client = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

    // Simple Message Queue (SMQ) トピックを指定します。
    $topic = 'imm-blindwatermark-test';

    // 指定された画像からウォーターマークコンテンツを抽出します。
    $style = 'image/deblindwatermark,s_low,t_text';
    $encodedTopic = str_replace('=', '', base64_url_encode($topic));
    $process = sprintf('%s|sys/notify,topic_%s', $style, $encodedTopic);

    // メディア処理操作を呼び出します。
    $result = $client->asyncProcessObject($bucketName, $sourceKey, $process);
    echo "Request ID: " . $result['request_id'] . "\n";
} catch (OssException $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

他の言語の SDK の使用方法については、「非同期処理」をご参照ください。

パラメーター

不可視ウォーターマーク

操作: image/blindwatermark

パラメーター

必須

説明

有効値

content

いいえ

テキストウォーターマーク。 値は URL-safe Base64 エンコード文字列である必要があります。 エンコーディングツールを使用してコンテンツをエンコードできます。 たとえば、テキストが Copyright © Alibaba Cloud の場合、エンコードされた値は Q29weXJpZ2h0IKqgIEFsaWJhYmEgQ2xvdWQ です。

Base64 エンコード前のウォーターマーク文字列は、最大 256 文字の長さにすることができます。

s

いいえ

ウォーターマークの強度レベル。強度レベルが高いほど、攻撃に対する耐性は高くなりますが、歪み率も高くなります。

  • low (デフォルト): 低いウォーターマーク強度レベル。

  • medium: 強度は中です。

  • high: 高い強度を示します。

q

いいえ

ウォーターマークが付いた出力画像のストレージ品質。品質が高いほど、画像サイズが大きくなり、ウォーターマークのデコード品質が高くなります。

説明

このパラメーターは、入力画像形式が JPG の場合にのみ有効です。

デフォルト値: 90。有効な値: 70 ~ 100。

sys/saveas パラメーターは、イメージにブラインドウォーターマークを追加するときにも使用されます。 詳細については、「名前を付けて保存」をご参照ください。

不可視ウォーターマークをデコードする

操作: image/deblindwatermark

パラメーター

必須

説明

有効値

s

いいえ

ウォーターマークのフェッチレベルを指定します。 レベルが高いほど時間はかかりますが、より良い結果が得られます。

  • low (デフォルト)

  • medium

  • high: 高いレベルを指定します。

t

いいえ

埋め込まれたウォーターマークのタイプを指定します。

Text: テキスト。

notify パラメーターは、ブラインドウォーターマークをデコードするときにも使用されます。 詳細については、「通知」をご参照ください。

関連 API

ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。API を直接呼び出すには、コードに署名計算を含める必要があります。Authorization ヘッダーの計算方法については、「(推奨) Authorization ヘッダーに V4 署名を含める」をご参照ください。不可視ウォーターマークと不可視ウォーターマークのデコードは POST リクエストを開始し、リクエストパラメーターはリクエスト本文に配置する必要があります。

不可視ウォーターマークを追加する

PostObject 操作に x-oss-process パラメーターを追加することで、イメージを処理できます。 詳細については、「PostObject」をご参照ください。

POST /example.jpg?x-oss-process   HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue

// ウォーターマークのコンテンツは "Alibaba Cloud copyright"、ウォーターマークの強度は low、出力イメージの品質は 90 です。 ウォーターマーク付きイメージは oss://image-demo/outobjprefix.jpg として保存されます。
x-oss-process=image/blindwatermark,content_QWxpYmFiYSBDbG91ZCBjb3B5cmlnaHQ,s_low,q_90|sys/saveas,b_aW1hZ2UtZGVtbw,o_b3V0b2JqcHJlZml4LmpwZw

不可視ウォーターマークをデコードする

PostObject API にイメージスケーリングパラメーターを追加することで、イメージを処理できます。 詳細については、「PostObject」をご参照ください。

POST /outobjprefix.jpg?x-oss-async-process HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue

// 前の手順で追加されたウォーターマークをデコードします。トピックは doc-images です。
x-oss-async-process=image/deblindwatermark|sys/notify,topic_ZG9jLWltYWdlcw

使用上の注意

  • 不可視ウォーターマークは、JPG、PNG、BMP、WebP、および TIFF 画像のみをサポートしています。

  • 画像の最小幅と高さは 80 ピクセルです。画像の最大幅と高さは 10,000 ピクセルです。

  • 短辺と長辺の比率は 1:2 より大きくなければなりません。

  • 不可視ウォーターマークは、純白または純黒の画像、または解像度が低すぎる画像 (たとえば、200 × 200 ピクセル未満の画像) はサポートしていません。

  • 画像に追加できるのは、テキストウォーターマークのみです。

  • 匿名アクセスはサポートされていません。