All Products
Search
Document Center

Object Storage Service:Watermark gambar

Last Updated:Apr 30, 2026

Anda dapat menambahkan watermark ke gambar dan file yang disimpan di Object Storage Service (OSS) untuk melindungi kepemilikan serta mencegah replikasi dan penggunaan tanpa izin.

Skenario

  • Perlindungan hak cipta: Watermark pada gambar Anda menunjukkan kepemilikan hak cipta dan mencegah penggunaan tanpa izin.

  • Promosi merek: Watermark yang berisi logo atau nama merek Anda pada gambar, video, atau dokumen meningkatkan kesadaran merek.

  • Pencegahan pemalsuan: Watermark pada dokumen resmi, sertifikat, atau laporan mencegah perubahan tidak sah dan mengurangi risiko pemalsuan.

  • Mencegah pencurian gambar: Menambahkan watermark mencegah pencurian gambar karena gambar daring mudah disalin dan dipublikasikan ulang.

  • Kepatuhan hukum: Beberapa undang-undang atau kontrak mengharuskan Anda menambahkan watermark ke konten tertentu sebelum dipublikasikan.

Catatan

  • Anda dapat menggunakan object URL, OSS SDK, atau operasi API untuk mengonfigurasi parameter IMG yang digunakan untuk memproses gambar. Pada contoh ini, object URL digunakan. Anda hanya dapat menggunakan object URL untuk mengonfigurasi parameter IMG pada gambar dengan akses public-read. Jika ingin mengonfigurasi parameter IMG untuk gambar privat, gunakan OSS SDK atau operasi API. Untuk informasi selengkapnya, lihat Metode pemrosesan gambar.

  • Gambar watermark harus disimpan di bucket saat ini. Untuk menggunakan gambar daring atau lokal, unggah terlebih dahulu ke bucket saat ini.

  • Watermark gambar saat ini hanya mendukung format berikut: JPG, PNG, BMP, WebP, dan TIFF.

  • Anda dapat menambahkan hingga tiga watermark gambar berbeda ke satu gambar. Watermark tersebut tidak boleh saling tumpang tindih sepenuhnya.

  • Watermark teks tidak mendukung karakter Tionghoa Tradisional.

Parameter

action: watermark

Tabel berikut menjelaskan parameter-parameter tersebut.

  • Parameter dasar

    Parameter

    Wajib

    Deskripsi

    Nilai

    t

    Tidak

    Menentukan opasitas watermark gambar atau teks.

    [0, 100]

    Bawaan: 100 (sepenuhnya buram).

    g

    Tidak

    Menentukan posisi referensi watermark pada gambar.

    • nw: kiri atas

    • north: tengah atas

    • ne: kanan atas

    • west: tengah kiri

    • center: tengah

    • east: tengah kanan

    • sw: kiri bawah

    • south: tengah bawah

    • se (bawaan): kanan bawah

    Untuk detailnya, lihat diagram posisi referensi di bawah.

    x

    Tidak

    Menentukan offset horizontal dari tepi gambar. Parameter ini hanya berlaku ketika g diatur ke nw, west, sw, ne, east, atau se.

    [0, 4096]

    Bawaan: 10

    Unit: piksel (px)

    y

    Tidak

    Menentukan offset vertikal dari tepi gambar. Parameter ini hanya berlaku ketika g diatur ke nw, north, ne, sw, south, atau se.

    [0, 4096]

    Bawaan: 10

    Unit: piksel (px)

    voffset

    Tidak

    Parameter ini berlaku ketika g diatur ke west, center, atau east, dan menggeser watermark secara vertikal.

    [-1000, 1000]

    Bawaan: 0

    Unit: piksel (px)

    fill

    Tidak

    Menentukan apakah watermark gambar atau teks akan di-tiling (diulang) di seluruh gambar sumber.

    Catatan

    Untuk menggunakan fitur watermark berulang pada watermark gambar, ajukan permintaan di Quota Center.

    • 1: Mengulang watermark gambar atau teks di seluruh gambar sumber.

    • 0 (bawaan): Tidak mengulang watermark di seluruh gambar sumber.

    padx

    Tidak

    Menentukan jarak horizontal antara watermark berulang yang berdekatan. Parameter ini hanya berlaku ketika fill diatur ke 1.

    [0, 4096]

    Bawaan: 0

    Unit: piksel (px)

    pady

    Tidak

    Menentukan jarak vertikal antara watermark berulang yang berdekatan. Parameter ini hanya berlaku ketika fill diatur ke 1.

    [0, 4096]

    Bawaan: 0

    Unit: piksel (px)

    Offset horizontal, offset vertikal, dan offset vertikal dari garis tengah menyesuaikan posisi watermark tunggal dan tata letak watermark berulang.

    Diagram berikut menunjukkan posisi referensi dan nilai-nilainya.origin

  • Parameter watermark gambar

    Parameter

    Wajib

    Deskripsi

    Nilai

    image

    Ya

    Menentukan jalur lengkap objek yang akan digunakan sebagai watermark gambar. Jalur lengkap objek harus dikodekan dalam bentuk URL-safe Base64 agar transmisi melalui URL berjalan dengan benar. Untuk informasi selengkapnya, lihat Pengkodean Base64 yang aman untuk URL. Misalnya, jika gambar watermark panda.png berada di direktori image, Anda harus mengkodekan jalur lengkap image/panda.png menggunakan URL-safe Base64 sehingga menghasilkan aW1hZ2UvcGFuZGEucG5n.

    Catatan

    Gambar watermark harus berupa objek yang disimpan di bucket yang sama.

    String yang dikodekan dalam bentuk URL-safe Base64.

  • Parameter pra-pemrosesan gambar watermark

    Anda dapat menggunakan semua parameter dari aksi resize, custom crop, indexed slice, rounded corners, dan rotate untuk memproses gambar watermark sebelumnya. Selain itu, pra-pemrosesan gambar watermark juga mendukung parameter penskalaan P:

    Parameter

    Deskripsi

    Nilai

    P

    Menyesuaikan ukuran watermark gambar berdasarkan persentase dimensi gambar sumber. Misalnya, jika Anda mengatur parameter ini ke 10 dan gambar sumber berukuran 100 × 100 piksel, maka gambar watermark diskalakan menjadi 10 × 10 piksel. Jika gambar sumber diubah menjadi 200 × 200 piksel, watermark akan diskalakan menjadi 20 × 20 piksel.

    [1, 100]

  • Parameter watermark teks

    Parameter

    Wajib

    Deskripsi

    Nilai

    text

    Ya

    Menentukan konten teks watermark. Teks harus dikodekan dalam bentuk URL-safe Base64. Untuk informasi selengkapnya, lihat Pengkodean Base64 yang aman untuk URL.

    String teks tidak boleh melebihi 64 byte sebelum dikodekan Base64.

    type

    Tidak

    Menentukan font watermark teks. Nama font harus dikodekan dalam bentuk URL-safe Base64.

    Untuk daftar font yang didukung beserta nilai kodenya, lihat tabel jenis font dan pengkodeannya.

    Bawaan: wqy-zenhei (dikodekan sebagai d3F5LXplbmhlaQ)

    color

    Tidak

    Menentukan warna watermark teks.

    Nilai warna heksadesimal RGB. Contohnya, 000000 untuk hitam dan FFFFFF untuk putih.

    Bawaan: 000000 (hitam)

    size

    Tidak

    Menentukan ukuran font watermark teks.

    (0, 1000]

    Bawaan: 40

    Unit: piksel (px)

    shadow

    Tidak

    Menentukan opasitas bayangan watermark teks.

    [0, 100]

    Bawaan: 0 (tanpa bayangan).

    rotate

    Tidak

    Menentukan sudut rotasi searah jarum jam untuk teks.

    [0, 360]

    Bawaan: 0 (tanpa rotasi).

    Tabel berikut mencantumkan jenis font yang tersedia beserta nilai kodenya untuk parameter type.

    Nilai parameter

    Deskripsi

    Nilai terkode

    wqy-zenhei

    WenQuanYi Zen Hei

    d3F5LXplbmhlaQ

    wqy-microhei

    WenQuanYi Micro Hei

    d3F5LW1pY3JvaGVp

    fangzhengshusong

    Fangzheng Shusong

    ZmFuZ3poZW5nc2h1c29uZw

    fangzhengkaiti

    Fangzheng Kaiti

    ZmFuZ3poZW5na2FpdGk

    fangzhengheiti

    Fangzheng Heiti

    ZmFuZ3poZW5naGVpdGk

    fangzhengfangsong

    Fangzheng Fangsong

    ZmFuZ3poZW5nZmFuZ3Nvbmc

    droidsansfallback

    DroidSansFallback

    ZHJvaWRzYW5zZmFsbGJhY2s

  • Parameter watermark teks dan gambar

    Parameter

    Wajib

    Deskripsi

    Nilai

    order

    Tidak

    Menentukan urutan tampilan watermark teks dan gambar.

    0 atau 1

    • 0 (bawaan): Watermark gambar berada di depan.

    • 1: Watermark teks berada di depan.

    align

    Tidak

    Menentukan penyelarasan watermark teks dan gambar.

    0, 1, atau 2

    • 0: Watermark disejajarkan di atas.

    • 1: Watermark disejajarkan di tengah.

    • 2 (bawaan): Watermark disejajarkan di bawah.

    interval

    Tidak

    Menentukan jarak antara watermark teks dan gambar.

    [0, 1000]

    Bawaan: 0

    Unit: piksel (px)

Pengkodean watermark

Untuk menambahkan watermark, Anda harus mengkodekan parameter seperti konten teks, font, dan nama gambar menggunakan pengkodean URL-safe Base64. Ikuti langkah-langkah berikut:

  1. Kodekan konten sebagai Base64.

  2. Ganti karakter-karakter berikut dalam string hasil:

    • Ganti setiap tanda plus (+) dengan tanda hubung (-).

    • Ganti setiap garis miring (/) dengan garis bawah (_).

    • Hapus semua tanda sama dengan (=) di akhir.

Gunakan penyandi base64url untuk mengkodekan parameter seperti konten teks, warna teks, font, dan nama gambar watermark.

Penting

Konten terkode ini hanya berlaku untuk parameter tertentu dalam operasi watermark. Jangan gunakan konten terkode ini dalam string signature (Signature).

Metode

Gambar publik

Anda dapat menambahkan watermark ke gambar dengan akses public-read atau public-read-write dengan menambahkan parameter Image Processing (IMG) langsung ke URL gambar.

Contoh 1: Tambahkan watermark teks

Contoh ini menggunakan gambar example.jpg dari bucket oss-console-img-demo-cn-hangzhou-3az di wilayah China (Hangzhou). URL untuk mengakses gambar tersebut adalah https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.jpg.原图

Contoh berikut menunjukkan cara menambahkan watermark teks ke gambar example.jpg:

Contoh 2: Tambahkan watermark gambar

Contoh berikut menunjukkan cara menambahkan watermark gambar ke gambar example.jpg:

Contoh 3: Tambahkan watermark teks dan gambar

Contoh ini menunjukkan cara menambahkan watermark teks dan gambar ke gambar example.jpg:

Dengan menggabungkan nilai terkode untuk panda.png dan "Hello World" dari contoh sebelumnya, Anda dapat membuat URL berikut untuk pemrosesan gambar: https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,text_SGVsbG8gV29ybGQ.图片处理5

Gambar privat

Anda dapat menggunakan Alibaba Cloud SDK atau REST API untuk menambahkan watermark ke gambar privat.

Alibaba Cloud SDKs

Bagian berikut menyediakan contoh kode untuk menambahkan watermark menggunakan Alibaba Cloud SDK umum. Untuk contoh kode dalam bahasa lain, lihat Ikhtisar.

Java

Diperlukan Alibaba Cloud SDK for Java versi 3.17.4 atau lebih baru.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Tentukan endpoint. Pada contoh ini, digunakan endpoint wilayah China (Hangzhou). Sesuaikan dengan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan wilayah tempat bucket Anda berada, misalnya cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan jalur lengkap objek. Jalur lengkap tidak boleh mengandung nama bucket.
        String objectName = "src.jpg";
        // Tentukan jalur tujuan file lokal, misalnya D:\\localpath\\example-new.jpg. File akan dibuat atau ditimpa.
        String pathName = "D:\\dest.jpg";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya saat instance OSSClient tidak lagi diperlukan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Tambahkan watermark teks "Hello World" ke gambar.
            String image = "image/watermark,text_SGVsbG8gV29ybGQ";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(image);
            // Simpan gambar yang telah diproses ke mesin lokal Anda sebagai example-new.jpg.
            // Jika Anda hanya menentukan nama file (misalnya, example-new.jpg) tanpa jalur lengkap, file akan disimpan ke direktori lokal proyek.
            ossClient.getObject(request, new File("D:\\dest.jpg"));
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, artinya permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, artinya klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

Diperlukan Alibaba Cloud SDK for PHP versi 2.7.0 atau lebih baru.

<?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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek, misalnya exampledir/exampleobject.jpg. Jalur lengkap tidak boleh mengandung nama bucket.
$object = "src.jpg";
// Tentukan jalur tujuan file lokal, misalnya D:\\localpath\\example-new.jpg. File akan dibuat atau ditimpa.
// Jika Anda hanya menentukan nama file (misalnya, example-new.jpg) tanpa jalur lengkap, file akan disimpan ke direktori lokal proyek.
$download_file = "D:\\dest.jpg";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // Tentukan ID wilayah general-purpose.
        "region" => "cn-hangzhou"
    );
$ossClient = new OssClient($config);

// Tambahkan watermark teks "Hello World" ke gambar.
$image = "image/watermark,text_SGVsbG8gV29ybGQ";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $image);

// Simpan gambar yang telah diproses ke mesin lokal Anda.
$ossClient->getObject($bucket, $object, $options);                           

Python

Diperlukan Alibaba Cloud SDK for Python versi 2.18.4 atau lebih baru.

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

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah general-purpose.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama gambar sumber. Jika gambar tidak berada di direktori root bucket, Anda harus menentukan jalur lengkapnya, misalnya exampledir/example.jpg.
key = 'src.jpg'
# Tentukan nama untuk gambar yang telah diproses.
new_pic = 'D:\\dest.jpg'

# Tambahkan watermark teks "Hello World" ke gambar.
image = 'image/watermark,text_SGVsbG8gV29ybGQ'
bucket.get_object_to_file(key, new_pic, process=image)

Go

Diperlukan Alibaba Cloud SDK for Go versi 3.0.2 atau lebih baru.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

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

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 instance OSSClient.
	// Tentukan endpoint bucket Anda. Pada contoh ini, digunakan endpoint wilayah China (Hangzhou). Sesuaikan dengan endpoint aktual Anda.
	client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
	if err != nil {
		HandleError(err)
	}

	// Tentukan nama bucket tempat gambar sumber disimpan. Contoh: examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}

	// Tentukan nama gambar sumber. Jika gambar tidak berada di direktori root bucket, Anda harus menentukan jalur lengkapnya, misalnya exampledir/example.jpg.
	sourceImageName := "src.jpg"
	// Tentukan nama untuk gambar yang telah diproses.
	targetImageName := "D://dest.jpg"
	// Tambahkan watermark teks "Hello World" ke gambar.
	image := "image/watermark,text_SGVsbG8gV29ybGQ"
	err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
	if err != nil {
		HandleError(err)
	}
}

REST API

Untuk aplikasi yang sangat kustom, Anda dapat memanggil REST API secara langsung. Hal ini mengharuskan Anda menghitung signature secara manual dalam kode Anda. Untuk informasi selengkapnya, lihat Signature V4 (Direkomendasikan).

Anda dapat memberi watermark pada gambar dengan menambahkan parameter watermark ke operasi GetObject.

GET /oss.jpg?x-oss-process=image/watermark,w_100 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e

FAQ

Menggunakan gambar daring atau lokal sebagai watermark

Saat menggunakan IMG untuk menambahkan watermark gambar, gambar watermark harus berada di bucket yang sama dengan gambar sumber. Untuk menggunakan gambar daring atau lokal sebagai watermark, Anda harus mengunggahnya terlebih dahulu ke bucket gambar sumber.

Error "Font content is too large"

Saat menambahkan watermark teks dengan IMG, teks dibatasi hingga 64 karakter. Setiap karakter Tionghoa dihitung sebagai tiga karakter. Jika Anda menerima error "font content is too large", perpendek teks tersebut dan coba lagi. Untuk informasi selengkapnya, lihat Contoh 1: Tambahkan watermark teks.

Kegagalan watermark gambar pada objek privat

Mengakses objek privat memerlukan URL dengan signature. Anda tidak dapat menambahkan parameter IMG langsung ke URL bertanda tangan ini. Sebagai gantinya, untuk memproses objek privat, Anda harus menyertakan parameter IMG saat menghasilkan signature. Untuk informasi selengkapnya, lihat Hasilkan URL objek bertanda tangan yang menyertakan parameter IMG.

Warna latar belakang untuk watermark gambar

No.

Mengakses gambar dengan URL bertanda tangan

Mengakses objek privat memerlukan URL dengan signature. Anda tidak dapat menambahkan parameter IMG langsung ke URL bertanda tangan ini. Sebagai gantinya, untuk memproses objek privat, Anda harus menyertakan parameter IMG saat menghasilkan signature. Untuk informasi selengkapnya, lihat Image Processing (Java SDK V1).

Mengatur watermark secara vertikal

Ya. Untuk mengatur watermark secara vertikal, Anda dapat menggunakan beberapa aksi watermark.

Contoh: https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/watermark,text_SGVsbG8gV29ybGQ/watermark,text_SGVsbG8gV29ybGQy,y_60

垂直水印

Mengubah ukuran watermark secara dinamis

IMG tidak mendukung pengubahan ukuran watermark secara dinamis. Sebagai gantinya, Anda harus menerapkan logika kustom di sisi klien atau server untuk mendeteksi dimensi gambar sumber dan menghitung ukuran watermark sebelum memanggil API OSS.

Jumlah maksimum watermark

Anda dapat menambahkan hingga tiga watermark. Untuk menambahkan lebih banyak, ajukan tiket .