Anda dapat menggunakan parameter irisan terindeks untuk memotong gambar sumber yang disimpan di Object Storage Service (OSS) berdasarkan ukuran tertentu dan mengambil gambar yang diperlukan. Topik ini menjelaskan parameter untuk irisan terindeks serta memberikan contoh penggunaannya.
Parameter
Aksi: indexcrop
Tabel berikut menjelaskan parameter yang dapat dikonfigurasi untuk memotong gambar:
Parameter | Deskripsi | Nilai valid |
x | Panjang setiap partisi gambar selama pemotongan horizontal. Hanya salah satu dari parameter x dan y yang dapat ditentukan. | [1, lebar gambar] |
y | Panjang setiap partisi gambar selama pemotongan vertikal. Hanya salah satu dari parameter x dan y yang dapat ditentukan. | [1, tinggi gambar] |
i | Partisi gambar yang ingin Anda pilih setelah pemotongan. | [0, jumlah maksimum partisi) Nilai default adalah 0, yang menentukan partisi pertama. Jika Anda ingin mengembalikan partisi terakhir, lakukan pemotongan terindeks berdasarkan ukuran gambar dan rentang nilai parameter. |
Catatan penggunaan
Jika indeks yang ditentukan melebihi jumlah partisi, gambar sumber akan dikembalikan.
Jika baik x maupun y ditentukan dan nilainya valid, nilai y yang berlaku.
Metode
Potong gambar dengan akses publik-baca atau publik-baca-tulis
Berikut adalah contoh cara memotong gambar bernama example.jpg di bucket oss-console-img-demo-cn-hangzhou di wilayah China (Hangzhou). Gambar tersebut di-hosting di URL berikut:
Potong gambar sepanjang sumbu horizontal:
Konfigurasikan parameter berikut untuk memotong gambar:
Potong gambar sebesar 100 piksel sepanjang sumbu horizontal:
indexcrop,x_100Ambil partisi pertama:
i_0
URL yang digunakan untuk memproses gambar adalah https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/indexcrop,x_100,i_0.

Potong gambar sepanjang sumbu vertikal:
Konfigurasikan parameter berikut untuk memotong gambar:
Potong gambar sebesar 100 piksel sepanjang sumbu vertikal:
indexcrop,y_100Pilih partisi ke-11:
i_10
URL yang digunakan untuk memproses gambar adalah https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/indexcrop,y_100,i_10.
Gambar sumber dikembalikan karena jumlah partisi setelah pemotongan lebih sedikit dari 10.

Potong gambar pribadi
Anda dapat menggunakan SDK OSS dan API OSS untuk memotong gambar pribadi.
Gunakan SDK OSS
Kode sampel berikut menunjukkan cara memotong gambar pribadi menggunakan SDK OSS untuk bahasa pemrograman umum. Untuk informasi lebih lanjut tentang cara memotong gambar pribadi dengan menggunakan bahasa pemrograman lainnya, lihat Ikhtisar.
Java
SDK OSS untuk Java versi 3.17.4 atau lebih baru diperlukan.
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 {
// Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah bucket tempat gambar pribadi disimpan. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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. Jangan masukkan nama bucket dalam jalur lengkap.
String objectName = "example.jpg";
// Tentukan jalur lengkap gambar yang diproses. Contoh: D:\\dest.jpg. Jika gambar dengan nama yang sama sudah ada di jalur tersebut, gambar yang diproses akan menimpa gambar tersebut. Jika tidak, gambar yang diproses akan disimpan di jalur tersebut.
String pathName = "D:\\dest.jpg";
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Potong gambar sebesar 100 piksel sepanjang sumbu horizontal dan pilih partisi pertama.
String image = "image/indexcrop,x_100,i_0";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Tetapkan nama gambar yang diproses menjadi dest.jpg dan simpan di komputer lokal Anda.
// Jika Anda hanya menentukan nama gambar yang diproses seperti dest.jpg tanpa menentukan jalur lokal, gambar yang diproses akan disimpan ke jalur lokal proyek tempat program sampel milik.
ossClient.getObject(request, new File("D:\\dest.jpg"));
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai di OSS, "
+ "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}PHP
SDK OSS untuk PHP versi 2.7.0 atau lebih baru 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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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. Jangan masukkan nama bucket dalam jalur lengkap.
$object = "example.jpg";
// Tentukan jalur lengkap gambar yang diproses. Contoh: D:\\dest.jpg. Jika gambar dengan nama yang sama sudah ada di jalur tersebut, gambar yang diproses akan menimpa gambar tersebut. Jika tidak, gambar yang diproses akan disimpan di jalur tersebut.
// Jika Anda hanya menentukan nama gambar yang diproses seperti dest.jpg tanpa menentukan jalur lokal, gambar yang diproses akan disimpan ke jalur lokal proyek tempat program sampel milik.
$download_file = "D:\\dest.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID wilayah Alibaba Cloud tempat bucket berada.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Potong gambar sebesar 100 piksel sepanjang sumbu horizontal dan pilih partisi pertama.
$image = "image/indexcrop,x_100,i_0";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image);
// Simpan gambar yang diproses ke komputer lokal Anda.
$ossClient->getObject($bucket, $object, $options); Python
SDK OSS untuk Python versi 2.18.4 atau lebih baru diperlukan.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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.
# 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 Alibaba Cloud tempat bucket berada.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama gambar sumber. Jika gambar tidak disimpan di direktori root bucket, Anda harus menyertakan jalur lengkap gambar. Contoh: exampledir/src.gif.
key = 'example.jpg'
# Tentukan nama gambar yang diproses.
new_pic = 'D:\\dest.jpg'
// Potong gambar sebesar 100 piksel sepanjang sumbu horizontal dan pilih partisi pertama.
image = 'image/indexcrop,x_100,i_0'
bucket.get_object_to_file(key, new_pic, process=image)Go
SDK OSS untuk Go versi 3.0.2 atau lebih baru diperlukan.
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 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 instance OSSClient.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan 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 disimpan di direktori root bucket, Anda harus menyertakan jalur lengkap gambar. Contoh: exampledir/src.gif.
sourceImageName := "example.jpg"
// Tentukan nama gambar yang diproses.
targetImageName := "D://dest.jpg"
// Potong gambar sebesar 100 piksel sepanjang sumbu horizontal dan pilih partisi pertama.
image := "image/indexcrop,x_100,i_0"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}Gunakan API RESTful
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, lihat (Direkomendasikan) Sertakan Tanda Tangan V4.
Anda dapat menentukan parameter irisan terindeks saat memanggil operasi GetObject untuk memotong gambar.
GET /oss.jpg?x-oss-process=image/indexcrop,x_100,i_0 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