對于存儲在Bucket中的圖片,您可以使用圖片盲水印功能, 支持為圖片添加文字盲水印和解析盲水印。
功能簡介
通過圖片盲水印技術,您可以在不影響原圖視覺效果的前提下,向圖片中嵌入不可見的文字信息。如需獲取水印內容,可使用解析盲水印接口獲取。即使圖片經過一定程度的攻擊(裁剪、旋轉、縮放、涂鴉、換色等),仍可以正確解析水印內容。
使用場景
鑒權追責:判斷己方的圖片是否被惡意攻擊者盜取。
上傳查重:判斷用戶上傳的圖片是否來自已存在的資源庫。
資源防泄漏:通過流傳的資源圖片中嵌入的盲水印得到泄漏方的相關信息。
前提條件
已開通智能媒體管理(IMM)服務。具體操作,請參見開通產品。
已綁定IMM項目。通過OSS控制臺綁定的具體操作,請參見快速入門。通過API綁定的具體操作,請參見AttachOSSBucket。
注意事項
圖片盲水印僅支持JPG、PNG、BMP、WebP、TIFF格式。
圖片盲水印不支持純黑、純白圖片,以及分辨率過低(<200px * 200px,非嚴格參數)的圖片。
僅支持為圖片添加文字水印。
添加盲水印為同步處理(x-oss-process)方式,解析盲水印為異步處理(x-oss-async-process)方式。
參數說明
添加盲水印
操作名稱:image/blindwatermark
參數 | 是否必須 | 描述 | 取值范圍 |
content | 否 | 文字水印的Base64編碼。 | Base64編碼之前水印字符串的最大長度限制為256個字符。 |
s | 否 | 水印添加強度,強度越高,添加水印后的圖像抵抗攻擊性能越強,但引起的失真越明顯。 |
|
q | 否 | 攜帶水印信息的輸出圖片的存儲質量。質量越高,圖片尺寸越大,水印解析質量越高。 說明 僅輸入圖片格式為jpg時生效。 | 默認值為90,取值范圍為70~100。 |
添加圖片盲水印時也會用到sys/saveas
參數。更多信息,請參見另存為。
解析盲水印
操作名稱:image/deblindwatermark
參數 | 是否必須 | 描述 | 取值范圍 |
s | 否 | 水印提取等級,等級增大,耗時越長,提取效果越好。 |
|
t | 否 | 嵌入的水印類型。 | text:文字。 |
解析盲水印時也會用到notify
參數。更多信息,請參見消息通知。
水印編碼步驟
將內容編碼成Base64。
將結果中的部分編碼替換。
將結果中的加號(+)替換成短劃線(-)。
將結果中的正斜線(/)替換成下劃線(_)。
將結果中尾部的所有等號(=)省略。
使用示例
添加盲水印
操作名稱:image/blindwatermark
推薦通過base64url encoder對文字水印的內容等參數進行編碼。
使用阿里云SDK
以下僅列舉常見SDK添加圖片盲水印的代碼示例。如需使用其他SDK添加圖片盲水印的代碼示例,請參見SDK簡介。
Java
要求使用3.17.4及以上版本的Java SDK。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
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 {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。
// 本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。
EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如sourceDir/source.jpg
String sourceImage = "sourceDir/source.jpg";
// 創建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
StringBuilder sbStyle = new StringBuilder();
Formatter styleFormatter = new Formatter(sbStyle);
// 指定水印內容
String content = "阿里云版權所有";
// 添加盲水印
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;
// 指定處理后圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如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("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
要求使用Python SDK 2.18.4及以上版本。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
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.Base64;
public class Demo {
public static void main(String[] args) throws IOException {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。
// 本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。
EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "your-bucket-name";
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如sourceDir/source.jpg
String sourceImage = "sourceDir/source.jpg";
// 創建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 指定水印內容
String content = "阿里云版權所有";
byte[] encodedContentBytes = Base64.getUrlEncoder().withoutPadding().encode(content.getBytes(StandardCharsets.UTF_8));
String encodedContentStr = new String(encodedContentBytes, StandardCharsets.UTF_8);
String style = "image/blindwatermark,content_" + encodedContentStr;
// 指定處理后圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如targetDir/target.jpg。
String targetImage = "targetDir/target.jpg";
String encodedTargetImageStr = Base64.getUrlEncoder().withoutPadding().encodeToString(targetImage.getBytes(StandardCharsets.UTF_8));
String bucketNameEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes(StandardCharsets.UTF_8));
StringBuilder sbStyle = new StringBuilder();
sbStyle.append(style)
.append("|")
.append("sys/saveas")
.append(",o_").append(encodedTargetImageStr)
.append(",b_").append(bucketNameEncoded);
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();
}
}
}
}
Go
要求使用Go SDK 3.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實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定原圖所在Bucket的名稱。
bucketName := "srcbucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
handleError(err)
return
}
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如sourceDir/source.jpg。
sourceImageName := "sourceDir/source.jpg"
// 指定用于存放處理后圖片的Bucket名稱,該Bucket需與原圖所在Bucket在同一地域。
targetBucketName := "destbucket"
// 指定處理后圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如targetDir/target.jpg。
targetImageName := "targetDir/target.jpg"
// 指定水印內容
content := "阿里云版權所有"
// 生成圖片盲水印
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
要求使用PHP SDK 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");
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填寫Bucket名稱,例如examplebucket。
$bucket = "examplebucket";
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如sourceDir/source.jpg。
$object = "sourceDir/source.jpg";
// 指定處理后圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如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);
// 如果目標圖片不在指定Bucket中,需上傳圖片到目標Bucket。
// $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");
$content = "阿里云版權所有";
// 圖片盲水印
$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并保存到當前Bucket。
$result = $ossClient->processObject($bucket, $object, $process);
// 打印處理結果。
print_r($result);
} catch (OssException $e) {
echo "Error: " . $e->getMessage();
}
?>
其他語言使用方法請參見另存為。
使用REST API
如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。關于公共請求頭Authorization的計算方法請參見簽名版本4(推薦)。
您可以通過在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: AuthorizationValue
// 水印內容為“阿里云版權所有”,水印強度為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
解析盲水印
操作名稱:image/deblindwatermark
使用阿里云SDK
以下僅列舉常見SDK解析圖片盲水印的代碼示例。如需使用其他SDK解析圖片盲水印的代碼示例,請參見SDK簡介。
Java
要求使用3.17.4及以上版本的Java SDK。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
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 {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。
// 本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。
EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "target_bucket_name";
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶文件完整訪問路徑,例如sourceDir/source.jpg
String sourceKey = "targetDir/target.jpg";
// MNS消息的主題
String topic = "imm-blindwatermark-test";
// 創建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
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("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
要求使用Python SDK 2.18.4及以上版本。
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為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名稱。
bucket_name = 'taget_bucket_name'
# 指定水印圖文件名稱。
source_key = 'targetDir/target.jpg'
# 指定MNS消息的topic。
topic = 'imm-blindwatermark-test'
# 指定Bucket實例,所有文件相關的方法都需要通過Bucket實例來調用。
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
要求使用Go SDK 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.WithCredentialsProvider(provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定Bucket名稱。
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)
}
}
func handleError(err error) {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(-1)
}
PHP
要求使用PHP SDK 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");
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// 指定Bucket名稱。
$bucketName = 'target_bucket_name'; // 注意這里的拼寫錯誤,應該是 'target_bucket_name' 而不是 'taget_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);
echo "Request ID: " . $result['request_id'] . "\n";
} catch (OssException $e) {
echo "Error: " . $e->getMessage() . "\n";
}
?>
其他語言使用方法請參見異步處理。
使用REST API
如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。關于公共請求頭Authorization的計算方法請參見簽名版本4(推薦)。
您可以通過在PostObject接口中添加圖片縮放參數的方式來處理圖片。更多信息請參見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: AuthorizationValue
// 解析上一步中添加的水印,消息topic為doc-images。
x-oss-async-process=image/deblindwatermark|sys/notify,topic_ZG9jLWltYWdlcw