Gunakan parameter circle untuk memotong gambar yang disimpan di Object Storage Service (OSS) menjadi bentuk lingkaran. Fitur ini berguna untuk menghasilkan foto profil, avatar pengguna, dan gambar mini berbentuk lingkaran secara langsung dari gambar yang tersimpan di OSS—tanpa perlu memproses gambar terlebih dahulu sebelum diunggah.
Untuk gambar publik, tambahkan parameter pemrosesan ke URL objek. Untuk gambar privat, gunakan SDK OSS atau API OSS.
Parameter
Action: circle
| Parameter | Description | Valid value |
|---|---|---|
r | Radius lingkaran, dalam piksel | 1–4096 |
Sebelum memulai
Format output menentukan pengisian latar belakang. Area di luar lingkaran diisi sesuai dengan format output:
| Output format | Background fill |
|---|---|
| PNG, WebP, BMP | Transparan |
| JPG | Putih |
Untuk mendapatkan latar belakang transparan, simpan hasilnya sebagai PNG. Perhatikan bahwa ukuran file PNG lebih besar daripada JPG—pertimbangkan kompromi ini dalam kasus penggunaan yang sensitif terhadap bandwidth.
Pembatasan radius. Jika r melebihi setengah dari sisi terpendek gambar sumber, OSS membatasi radius efektif menjadi: r = (shorter_side - 1) / 2. Dimensi gambar hasil kemudian menjadi r x 2 + 1 piksel pada setiap sisi.
Memotong gambar publik menjadi lingkaran
Untuk gambar dengan akses public-read atau public-read-write, tambahkan parameter kueri x-oss-process langsung ke URL objek. Tidak diperlukan SDK atau panggilan API.
Gambar sumber (view):

Contoh 1: Lingkaran dengan latar putih (JPG)
Atur r menjadi 100 piksel. Area di luar lingkaran berwarna putih karena format output-nya adalah JPG.
https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/circle,r_100
Contoh 2: Lingkaran dengan latar belakang transparan (PNG)
Atur r menjadi 100 piksel dan konversi output ke PNG. Area di luar lingkaran menjadi transparan.
https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/circle,r_100/format,png
Memotong gambar privat menjadi lingkaran
Untuk gambar privat, gunakan SDK OSS atau API OSS untuk menandatangani permintaan dan menerapkan parameter circle. Semua contoh di bawah menggunakan string parameter proses image/circle,r_100.
OSS SDKs
Python
Memerlukan OSS SDK untuk Python 2.18.4 atau versi lebih baru.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket Anda berada.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama objek sumber. Sertakan path lengkap jika objek tidak berada di direktori root.
# Contoh: exampledir/src.jpg
key = 'example.jpg'
# Tentukan path lokal untuk menyimpan gambar yang telah diproses.
new_pic = 'D:\\dest.jpg'
# Potong menjadi lingkaran dengan radius 100 px. Area di luar lingkaran berwarna putih (output JPG).
image = 'image/circle,r_100'
bucket.get_object_to_file(key, new_pic, process=image)Java
Memerlukan OSS SDK untuk Java 3.17.4 atau versi 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 wilayah tempat bucket Anda berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Tentukan nama objek (path lengkap, tidak termasuk nama bucket).
String objectName = "example.jpg";
// Tentukan path lokal untuk menyimpan gambar yang telah diproses.
String pathName = "D:\\dest.jpg";
// Buat instance OSSClient.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Potong menjadi lingkaran dengan radius 100 px. Area di luar lingkaran berwarna putih (output JPG).
String image = "image/circle,r_100";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
ossClient.getObject(request, new File(pathName));
} catch (OSSException oe) {
System.out.println("OSSException: " + oe.getErrorMessage());
System.out.println("Error Code: " + oe.getErrorCode());
System.out.println("Request ID: " + oe.getRequestId());
System.out.println("Host ID: " + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException: " + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Go
Memerlukan OSS SDK untuk Go 3.0.2 atau versi 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() {
// Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
HandleError(err)
}
// Tentukan endpoint wilayah tempat bucket Anda berada.
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.
bucket, err := client.Bucket("examplebucket")
if err != nil {
HandleError(err)
}
// Tentukan nama objek sumber. Sertakan path lengkap jika objek tidak berada di direktori root.
sourceImageName := "example.jpg"
// Tentukan path lokal untuk menyimpan gambar yang telah diproses.
targetImageName := "D://dest.jpg"
// Potong menjadi lingkaran dengan radius 100 px. Area di luar lingkaran berwarna putih (output JPG).
image := "image/circle,r_100"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}PHP
Memerlukan OSS SDK untuk PHP 2.7.0 atau versi 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;
// Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket Anda berada.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket.
$bucket = "examplebucket";
// Tentukan nama objek (path lengkap, tidak termasuk nama bucket).
$object = "example.jpg";
// Tentukan path lokal untuk menyimpan gambar yang telah diproses.
$download_file = "D:\\dest.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Potong menjadi lingkaran dengan radius 100 px. Area di luar lingkaran berwarna putih (output JPG).
$image = "image/circle,r_100";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image
);
$ossClient->getObject($bucket, $object, $options);OSS API
Untuk integrasi kustom yang memerlukan panggilan API langsung, gunakan operasi GetObject dan sertakan x-oss-process sebagai parameter kueri. Kode Anda harus menghitung signature permintaan. Untuk detailnya, lihat GetObject.
GET /oss.jpg?x-oss-process=image/circle,r_100 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************Langkah selanjutnya
Rangkai circle crop dengan operasi pemrosesan gambar lain menggunakan pemisah
|dalamx-oss-process. Misalnya, potong terlebih dahulu menjadi persegi menggunakancrop, lalu terapkancircle. Lihat Image processing.Simpan gambar yang telah diproses secara permanen ke OSS alih-alih mengembalikannya secara inline. Lihat Save processed images.