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

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

最終更新日:Jan 10, 2026

Object Storage Service (OSS) バケットに保存されているイメージに対して、ブラインドウォーターマーク機能を使用して、非表示のテキストウォーターマークを追加および解析できます。

概要

ブラインドウォーターマークを使用すると、画質に影響を与えることなく、非表示のテキスト情報をイメージに埋め込むことができます。ウォーターマークのコンテンツを取得するには、ブラインドウォーターマークの解析操作を使用します。イメージがトリミング、スケーリング、落書き、色交換など、ある程度の攻撃を受けても、ウォーターマークのコンテンツは正しく解析できます。

利用シーン

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

  • 重複アップロードのチェック:アップロードされたイメージがリソースライブラリに既に存在するかどうかを判断します。

  • リソース漏洩の防止:分散されたイメージに埋め込まれたブラインドウォーターマークから、漏洩元に関する情報を取得します。

使用方法

  • ブラインドウォーターマークの追加:同期処理メソッド (x-oss-process) を使用します。ウォーターマークが追加された後、イメージは新しいファイルとして保存されます。

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

前提条件

  • Intelligent Media Management (IMM) サービスが有効化されていること

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

  • ブラインドウォーターマークを解析する場合、イメージを含むバケットは、ウォーターマークを追加したときに使用したバケットと同じリージョンにある必要があります。また、バケットはウォーターマークを追加するために使用したのと同じ IMM プロジェクトにバインドされている必要があります。そうでない場合、ウォーターマークは解析できません。

ブラインドウォーターマークの追加

アクション:image/blindwatermark

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

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

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

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

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

    • 文字列の末尾にあるすべての等号 (=) を省略します。

Java

SDK for Java 3.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 を指定します。たとえば、エンドポイントが oss-cn-hangzhou.aliyuncs.com の場合、リージョンを 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 = "Copyright © Alibaba Cloud";
            // ブラインドウォーターマークを追加します。
            // 修正:URL セーフな Base64 エンコーディングを使用し、パディングを削除します。
            String encodedContentStr = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(content.getBytes(StandardCharsets.UTF_8));
            String styleType = "image/blindwatermark,content_" + encodedContentStr;

            // 処理後のイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、イメージの完全なパスを指定する必要があります。例:targetDir/target.jpg
            String targetImage = "targetDir/target.jpg";
            // 修正:targetImage と bucketName に URL セーフな Base64 エンコーディングを使用し、パディングを削除します。
            styleFormatter.format("%s|sys/saveas,o_%s,b_%s",
                    styleType,
                    java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(targetImage.getBytes(StandardCharsets.UTF_8)),
                    java.util.Base64.getUrlEncoder().withoutPadding().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("Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.");
            System.err.println("Error Message:" + oe.getErrorMessage());
            System.err.println("Error Code:" + oe.getErrorCode());
            System.err.println("Request ID:" + oe.getRequestId());
            System.err.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.err.println("Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.");
            System.err.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

SDK for Python 2.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'
# 処理後のイメージを保存するバケットの名前を指定します。このバケットはソースバケットと同じリージョンにある必要があります。
target_bucket_name = 'target_bucket_name'
# ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、イメージの完全なパスを指定する必要があります。例:sourceDir/source.jpg
source_image_name = 'sourceDir/source.jpg'

# バケットインスタンスを作成します。すべてのファイル関連のメソッドは、バケットインスタンスで呼び出す必要があります。
bucket = oss2.Bucket(auth, endpoint, source_bucket_name)

# ウォーターマークのコンテンツを指定します。
content = 'Copyright © 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(target_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result)

Go

SDK for Go 3.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 インスタンスを作成します。
	// ご利用のエンドポイントをバケットのエンドポイントに設定します。この例では、中国 (杭州) リージョンのバケットのエンドポイントが使用されています。エンドポイントを実際のエンドポイントに設定してください。
	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 := "Copyright © Alibaba Cloud"

	// ブラインドウォーターマークを生成します。ドキュメントの要件に従い、末尾の等号 (=) を削除する必要があります。
	encodedContent := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(content)), "=")
	style := fmt.Sprintf("image/blindwatermark,content_%s", encodedContent)
	// エンコードされたターゲットイメージ名とバケット名からも末尾の等号 (=) を削除する必要があります。
	encodedImageName := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetImageName)), "=")
	encodedBucketName := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetBucketName)), "=")
	process := fmt.Sprintf("%s|sys/saveas,o_%s,b_%s", style, encodedImageName, encodedBucketName)

	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

SDK for PHP 2.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 = "Copyright © 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();
}
?>

他の言語の使用方法の詳細については、「名前を付けて保存」をご参照ください。

ブラインドウォーターマークの解析

アクション:image/deblindwatermark

Java

SDK for Java 3.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.AsyncProcessObjectResult;

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 を指定します。たとえば、エンドポイントが oss-cn-hangzhou.aliyuncs.com の場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";
        // プロジェクトにアクセス認証情報をハードコーディングしないでください。ハードコーディングすると、アクセス認証情報が漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
        // この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数を設定してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // バケット名を指定します。例:examplebucket
        String bucketName = "target_bucket_name";

        // ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、イメージの完全なパスを指定する必要があります。例:sourceDir/source.jpg
        String sourceKey = "targetDir/target.jpg";

        // MNS メッセージの Topic。
        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);
            
            // 非同期ストリーム処理インターフェイスを呼び出します。
            AsyncProcessObjectResult result = ossClient.asyncProcessObject(request);
            System.out.println(result.getRequestId());
            // TaskId を取得して出力し、スプールタスクを追跡します。
            System.out.println(result.getTaskId());
            

        } catch (OSSException oe) {
            System.err.println("Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.");
            System.err.println("Error Message:" + oe.getErrorMessage());
            System.err.println("Error Code:" + oe.getErrorCode());
            System.err.println("Request ID:" + oe.getRequestId());
            System.err.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.err.println("Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.");
            System.err.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

SDK for Python 2.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 = 'target_bucket_name'
# ウォーターマーク付きイメージファイルの名前を指定します。
source_key = 'targetDir/target.jpg'
# MNS メッセージの Topic を指定します。
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)
# OSS API リクエストの一意の ID。追跡とトラブルシューティングに使用されます。
print(result.request_id)
# タスクの一意の ID。スプールタスクの追跡に使用されます。
print(result.task_id)

Go

SDK for Go 3.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.SetCredentialsProvider(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"

    // MNS メッセージの Topic を指定します。
    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) // OSS API リクエストの一意の ID。
        fmt.Println(result.TaskId) // タスクの一意の ID。スプールタスクの追跡に使用されます。
    }
}

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

PHP

SDK for PHP 2.7.0 以降が必要です。

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

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、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);

    // MNS メッセージの Topic を指定します。
    $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);
    
    // 返された JSON 文字列を解析します。
    $decodedResult = json_decode($result, true);
    
    echo "Request ID: " . $decodedResult['RequestId'] . "\n"; // OSS API リクエストの一意の ID。
    echo "TaskId: " . $decodedResult['TaskId'] . "\n"; // タスクの一意の ID。スプールタスクの追跡に使用されます。

} catch (OssException $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

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

パラメーター

ブラインドウォーターマークの追加

アクション:image/blindwatermark

パラメーター

必須

説明

有効な値

content

いいえ

ウォーターマークのテキストは、URL セーフな Base64 でエンコードする必要があります。ウォーターマークエンコーディングツールを使用してテキストをエンコードできます。たとえば、テキストが Alibaba Cloud Copyright の場合、エンコードされたテキストは 6Zi_6YeM5LqR54mI5p2D5omA5pyJ です。

Base64 エンコーディング前のウォーターマーク文字列は、最大 256 文字までです。

s

いいえ

ウォーターマークの強度。強度が高いほど攻撃に対する耐性が向上しますが、イメージの歪みが目立つようになります。

  • low (デフォルト):低強度。

  • medium:中強度。

  • high:高強度。

q

いいえ

出力されるウォーターマーク付きイメージの品質。品質が高いほど、イメージサイズが大きくなり、ウォーターマークの解析品質が向上します。

説明

このパラメーターは、入力イメージが JPG フォーマットの場合にのみ有効です。

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

sys/saveas パラメーターは、イメージにブラインドウォーターマークを追加する際にも使用されます。詳細については、「指定した場所にイメージを保存」をご参照ください。

ブラインドウォーターマークの解析

アクション:image/deblindwatermark

パラメーター

必須

説明

有効な値

s

いいえ

ウォーターマークの抽出レベル。レベルが高いほど時間がかかりますが、より良い結果が得られます。

  • low (デフォルト):低レベル。

  • medium:中レベル。

  • high:高レベル。

t

いいえ

埋め込まれたウォーターマークのタイプ。

Text:テキスト

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

関連 API

アプリケーションで高度なカスタマイズが必要な場合は、REST API リクエストを直接送信できます。REST API リクエストを送信するには、署名を計算するためのコードを手動で記述する必要があります。Authorization リクエストヘッダーの計算方法の詳細については、「署名バージョン4 (推奨)」をご参照ください。ブラインドウォーターマークを追加または解析するには、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_6Zi_6YeM5LqR54mI5p2D5omA5pyJ,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

// 前のステップで追加されたウォーターマークを解析します。メッセージの Topic は doc-images です。
x-oss-async-process=image/deblindwatermark|sys/notify,topic_ZG9jLWltYWdlcw

注意事項

  • ブラインドウォーターマーク機能は、JPG、PNG、BMP、WebP、TIFF フォーマットのイメージのみをサポートします。

  • イメージの最小幅と高さは 80 ピクセルです。最大幅と高さは 10,000 ピクセルです。

  • 短辺と長辺の比率は 1:2 より大きい必要があります。

  • ブラインドウォーターマーク機能は、単色の黒、単色の白、または低解像度のイメージをサポートしていません。たとえば、解像度が 200 × 200 ピクセル未満のイメージは、厳密な制限ではありませんが、サポートされない場合があります。

  • テキストウォーターマークのみがサポートされています。

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