Penyisipan watermark buta memungkinkan Anda menambahkan watermark teks buta ke gambar yang disimpan di bucket Object Storage Service (OSS) dan mendekode watermark tersebut.
Ikhtisar
Penyisipan watermark buta adalah teknik watermarking yang menyematkan informasi teks tak terlihat ke dalam gambar. Untuk mendapatkan isi watermark, gunakan aksi image/deblindwatermark untuk mendekode watermark. Isi watermark dapat didekode dengan benar meskipun gambar mengalami serangan seperti pemotongan, pengubahan ukuran, coretan, atau perubahan warna dalam tingkat tertentu.
Skenario
Otentikasi dan akuntabilitas: Memungkinkan Anda menentukan apakah gambar telah dicuri oleh pihak jahat.
Pendeteksian gambar duplikat: Watermark tanpa acuan dapat digunakan untuk mendeteksi apakah gambar yang akan diunggah sudah ada di pustaka sumber daya.
Pencegahan kebocoran sumber daya: Watermark tanpa acuan dapat melacak sumber distribusi gambar tanpa izin, melindungi hak cipta gambar.
Penggunaan
Tambahkan watermark buta: Gunakan parameter
x-oss-processuntuk pemrosesan sinkron. Setelah watermark ditambahkan, simpan gambar sebagai file baru.Dekode watermark buta: Gunakan parameter
x-oss-async-processuntuk pemrosesan asinkron. Watermark teks yang didekode disertakan dalam pesan asinkron.
Prasyarat
IMM telah diaktifkan.
Bucket telah diikat ke proyek IMM. Untuk informasi tentang cara mengikat bucket OSS ke proyek IMM di Konsol OSS, lihat Memulai. Untuk informasi tentang cara mengikat bucket ke proyek IMM menggunakan API IMM, lihat AttachOSSBucket.
Untuk dekode watermark tanpa acuan, bucket yang berisi gambar ber-watermark harus berada di wilayah yang sama dengan gambar sumber dan diikat ke proyek IMM yang digunakan untuk memberi watermark pada gambar.
Tambahkan watermark tanpa acuan
Tindakan: image/blindwatermark
Langkah-langkah penyandian watermark
Enkode konten menggunakan Base64.
Anda dapat mengganti sebagian dari hasil enkode:
Ganti tanda tambah (+) dengan tanda hubung (-).
Ganti garis miring (/) dengan garis bawah (_).
Hapus semua tanda sama dengan (=) di akhir konten yang di-enkode Base64.
Java
OSS SDK for Java V3.17.4 atau lebih tinggi diperlukan.
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 {
// Tentukan titik akhir wilayah. Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Kami menyarankan agar Anda tidak menyematkan kredensial akses dalam kode proyek. Jika tidak, kredensial akses dapat bocor, yang membahayakan keamanan semua sumber daya di akun Anda.
// Dalam contoh ini, kredensial akses diperoleh dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
// Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap citra tersebut. Contoh: sourceDir/source.jpg.
String sourceImage = "sourceDir/source.jpg";
// Buat instans OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Deklarasikan penggunaan algoritma tanda tangan V4 secara eksplisit.
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);
// Tentukan konten watermark.
String content = "Copyrighted by Alibaba Cloud";
// Tambahkan watermark buta.
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;
// Tentukan nama citra yang diproses. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap citra tersebut. Contoh: 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
OSS SDK for Python V2.18.4 atau lebih tinggi diperlukan.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan nama bucket tempat citra sumber disimpan.
source_bucket_name = 'source_bucket_name'
# Tentukan nama bucket tempat Anda ingin menyimpan citra output. Bucket harus berada di wilayah yang sama dengan bucket tempat citra sumber disimpan.
taget_bucket_name = 'taget_bucket_name'
# Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: sourceDir/source.jpg.
source_image_name = 'sourceDir/source.jpg'
# Buat instans bucket. Anda harus menggunakan instans bucket untuk memanggil semua operasi terkait objek.
bucket = oss2.Bucket(auth, endpoint, source_bucket_name)
# Tentukan konten watermark.
content = 'Copyrighted by Alibaba Cloud'
# Tambahkan watermark buta.
style = "image/blindwatermark,content_{0}".format(oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(content))))
# Tentukan nama citra output. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: 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 atau lebih tinggi diperlukan.
package main
import (
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instans OSSClient.
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berlokasi di wilayah China (Hangzhou), atur titik akhir ke 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)
}
// Tentukan nama bucket tempat citra sumber disimpan.
bucketName := "srcbucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
handleError(err)
return
}
// Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: sourceDir/source.jpg.
sourceImageName := "sourceDir/source.jpg"
// Tentukan nama bucket tujuan. Bucket tujuan harus berada di wilayah yang sama dengan bucket sumber.
targetBucketName := "destbucket"
// Tentukan nama citra yang diproses. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: targetDir/target.jpg.
targetImageName := "targetDir/target.jpg"
// Tentukan konten watermark.
content := "Copyrighted by Alibaba Cloud"
// Tambahkan watermark buta.
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 atau lebih tinggi diperlukan.
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan contoh kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket.
$bucket = "examplebucket";
// Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: sourceDir/source.jpg.
$object = "sourceDir/source.jpg";
// Tentukan nama citra yang diproses. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap citra tersebut. Contoh: 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);
// Jika citra sumber tidak ada di bucket sumber, Anda harus mengunggah citra tersebut ke bucket sumber.
// $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");
$content = "Copyrighted by Alibaba Cloud";
// Tambahkan watermark buta.
$encodedContent = base64url_encode($content);
$style = "image/blindwatermark,content_$encodedContent";
$process = $style .
'|sys/saveas,' .
'o_' . base64url_encode($save_object) .
',b_' . base64url_encode($bucket);
// Simpan citra yang diproses sebagai example-new.png ke bucket saat ini.
$result = $ossClient->processObject($bucket, $object, $process);
// Tampilkan hasilnya.
print_r($result);
} catch (OssException $e) {
echo "Error: " . $e->getMessage();
}
?>Untuk informasi tentang cara menggunakan SDK untuk bahasa lainnya, lihat sys/saveas.
Mendekode blind watermark
Tindakan: image/deblindwatermark
Java
OSS SDK for Java V3.17.4 atau lebih tinggi diperlukan.
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 {
// Tentukan titik akhir wilayah. Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah yang dipetakan ke titik akhir. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Sebaiknya jangan melakukan hardcode kredensial akses dalam kode proyek. Jika tidak, kredensial akses dapat bocor, yang akan membahayakan keamanan semua sumber daya di akun Anda.
// Dalam contoh ini, kredensial akses diperoleh dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
// Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket.
String bucketName = "target_bucket_name";
// Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap citra tersebut. Contoh: sourceDir/source.jpg.
String sourceKey = "targetDir/target.jpg";
// Topik Simple Message Queue (SMQ).
String topic = "imm-blindwatermark-test";
// Buat instans OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Deklarasikan secara eksplisit penggunaan algoritma tanda tangan V4.
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Ekstrak watermark dari citra yang ditentukan.
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);
// Panggil operasi pemrosesan asinkron.
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
OSS SDK for Python V2.18.4 atau lebih tinggi diperlukan.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan nama bucket yang berisi citra ber-watermark.
bucket_name = 'taget_bucket_name'
# Tentukan nama citra ber-watermark.
source_key = 'targetDir/target.jpg'
# Tentukan topik Simple Message Queue (SMQ).
topic = 'imm-blindwatermark-test'
# Buat instans bucket. Anda harus menggunakan instans bucket untuk memanggil semua operasi terkait objek.
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# Ekstrak konten watermark dari citra yang ditentukan.
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('=', ''))
# Panggil operasi pemrosesan asinkron.
result = bucket.async_process_object(source_key, process)
print(result.request_id)Go
OSS SDK for Go V3.0.2 atau lebih tinggi diperlukan.
package main
import (
"encoding/base64"
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instans 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)
}
// Tentukan nama bucket yang berisi citra ber-watermark.
bucketName := "target_bucket_name"
bucket, err := client.Bucket(bucketName)
if err != nil {
handleError(err)
return
}
// Tentukan nama citra ber-watermark.
sourceKey := "targetDir/target.jpg"
// Tentukan topik Simple Message Queue (SMQ).
topic := "imm-blindwatermark-test"
// Ekstrak konten watermark dari citra yang ditentukan.
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)
// Panggil operasi pemrosesan media.
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 atau lebih tinggi diperlukan.
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan contoh kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tentukan titik akhir wilayah. Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Tentukan nama bucket yang berisi citra yang diberi watermark.
$bucketName = 'target_bucket_name';
// Tentukan nama citra yang diberi watermark.
$sourceKey = 'targetDir/target.jpg';
function base64_url_encode($input) {
return strtr(base64_encode($input), '+/', '-_');
}
try {
// Buat instans OSSClient.
$client = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// Tentukan topik Simple Message Queue (SMQ).
$topic = 'imm-blindwatermark-test';
// Ekstrak konten watermark dari citra yang ditentukan.
$style = 'image/deblindwatermark,s_low,t_text';
$encodedTopic = str_replace('=', '', base64_url_encode($topic));
$process = sprintf('%s|sys/notify,topic_%s', $style, $encodedTopic);
// Panggil operasi pemrosesan media.
$result = $client->asyncProcessObject($bucketName, $sourceKey, $process);
echo "Request ID: " . $result['request_id'] . "\n";
} catch (OssException $e) {
echo "Error: " . $e->getMessage() . "\n";
}
?>Untuk informasi tentang cara menggunakan SDK untuk bahasa lainnya, lihat Pemrosesan Asinkron.
Parameter
Watermarking tanpa acuan
Tindakan: image/blindwatermark
Parameter | Wajib | Deskripsi | Rentang nilai |
content | Tidak | Watermark teks. Nilainya harus berupa string Base64-encoded yang aman untuk URL. Anda dapat menggunakan alat enkode untuk meng-enkode konten. Misalnya, jika teks adalah | String watermark sebelum di-enkode Base64 dapat memiliki panjang hingga 256 karakter. |
s | Tidak | Tingkat kekuatan watermark. Tingkat kekuatan yang lebih tinggi menunjukkan ketahanan serangan yang lebih tinggi tetapi laju distorsi yang lebih tinggi. |
|
q | Tidak | Kualitas penyimpanan gambar keluaran yang membawa watermark. Kualitas yang lebih tinggi menunjukkan ukuran gambar yang lebih besar dan kualitas dekode watermark yang lebih tinggi. Catatan Parameter ini hanya berlaku jika format gambar input adalah JPG. | Nilai default: 90. Nilai valid: 70 hingga 100. |
Parameter sys/saveas juga digunakan saat Anda menambahkan watermark buta ke gambar. Untuk informasi lebih lanjut, lihat Simpan Sebagai.
Dekode watermark tanpa acuan
Tindakan: image/deblindwatermark
Parameter | Wajib | Deskripsi | Nilai yang valid |
s | Tidak | Menentukan tingkat pengambilan watermark. Tingkat yang lebih tinggi memerlukan waktu lebih lama tetapi menghasilkan hasil yang lebih baik. |
|
t | Tidak | Menentukan jenis watermark yang disematkan. | Text: teks. |
Parameter notify juga digunakan saat Anda mendekode watermark buta. Untuk informasi lebih lanjut, lihat Notifikasi.
API Terkait
Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil API RESTful. Untuk memanggil API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut tentang cara menghitung header Authorization, lihat (Direkomendasikan) Sertakan tanda tangan V4 di header Authorization. Watermarking tanpa acuan dan dekode watermark tanpa acuan memulai permintaan POST, di mana parameter permintaan harus ditempatkan di badan permintaan.
Tambahkan watermark tanpa acuan
Anda dapat memproses gambar dengan menambahkan parameter x-oss-process ke operasi PostObject. Untuk informasi lebih lanjut, lihat PostObject.
Contoh
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
// Isi watermark adalah "Hak Cipta Alibaba Cloud", kekuatan watermark rendah, dan kualitas gambar keluaran adalah 90. Gambar dengan watermark disimpan sebagai oss://image-demo/outobjprefix.jpg.
x-oss-process=image/blindwatermark,content_QWxpYmFiYSBDbG91ZCBjb3B5cmlnaHQ,s_low,q_90|sys/saveas,b_aW1hZ2UtZGVtbw,o_b3V0b2JqcHJlZml4LmpwZwDekode watermark tanpa acuan
Anda dapat memproses gambar dengan menambahkan parameter penskalaan gambar ke API PostObject. Untuk informasi lebih lanjut, lihat PostObject.
Contoh
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
// Mendekode Watermark yang ditambahkan pada langkah sebelumnya. Topiknya adalah doc-images.
x-oss-async-process=image/deblindwatermark|sys/notify,topic_ZG9jLWltYWdlcwCatatan penggunaan
Watermarking tanpa acuan hanya mendukung gambar JPG, PNG, BMP, WebP, dan TIFF.
Lebar dan tinggi gambar minimum adalah 80 piksel. Lebar dan tinggi gambar maksimum adalah 10.000 piksel.
Rasio sisi pendek terhadap sisi panjang harus lebih besar dari 1:2.
Watermarking tanpa acuan tidak mendukung gambar putih polos atau hitam polos, atau gambar dengan resolusi terlalu rendah (misalnya, yang lebih kecil dari 200 × 200 piksel).
Hanya watermark teks yang dapat ditambahkan ke gambar.
Akses anonim tidak didukung.