Anda dapat mengubah ukuran gambar menjadi lebih besar atau lebih kecil dengan menambahkan parameter pengubahan ukuran ke permintaan GetObject.
Skenario
Desain web: Menyesuaikan gambar dengan berbagai ukuran layar dan resolusi untuk pengembangan web serta aplikasi seluler.
Media sosial: Memproses gambar yang diunggah pengguna dengan berbagai ukuran menjadi dimensi pratinjau standar.
Pengenalan dan analisis gambar: Mengubah ukuran gambar untuk meningkatkan efisiensi pemrosesan dalam visi komputer dan pembelajaran mesin.
Batasan
Batas | Item | Deskripsi |
Batasan gambar sumber | Format gambar | Gambar sumber dapat berupa format JPG, PNG, BMP, GIF, WebP, TIFF, atau HEIC. |
Ukuran gambar | Gambar sumber tidak boleh melebihi 20 MB. Untuk menyesuaikan batas ukuran gambar sumber, ajukan permintaan di Quota Center. | |
Dimensi gambar | Lebar atau tinggi gambar sumber tidak boleh melebihi 30.000 px. Jumlah total piksel tidak boleh melebihi 250 juta. Catatan Untuk gambar animasi, seperti GIF, jumlah total piksel dihitung sebagai | |
Batasan gambar yang diubah ukurannya | Pengubahan ukuran gambar | Lebar atau tinggi gambar yang diubah ukurannya tidak boleh melebihi 16.384 px. Jumlah total piksel tidak boleh melebihi 16.777.216. |
Metode
Dengan menyertakan parameter ?x-oss-process=image/resize,parame_value dalam permintaan, OSS memproses gambar secara real-time dan mengembalikan hasilnya. image/resize menentukan operasi pengubahan ukuran. parame adalah parameter pengubahan ukuran yang didukung, dan value adalah nilai dari parameter tersebut. Untuk informasi lebih lanjut tentang parameter, lihat Parameter. Anda dapat menggunakan beberapa parameter bersamaan.
Untuk gambar public-read, Anda dapat menambahkan parameter pemrosesan ke URL gambar untuk mengizinkan akses anonim permanen. Untuk gambar privat, Anda dapat memanggil SDK dengan informasi tanda tangan atau API untuk memproses gambar.
Gambar public-read
Tabel berikut menjelaskan cara menambahkan parameter ?x-oss-process=image/resize,parame_value ke URL gambar public-read. Ganti parame_value dengan parameter dan nilai spesifik yang Anda butuhkan.
URL gambar asli | URL gambar dengan parameter pemrosesan |
https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example1.jpg |
Gambar privat
Anda dapat menggunakan SDK OSS untuk menghasilkan URL bertanda tangan dengan parameter pengubahan ukuran gambar. Ini memberikan akses sementara kepada pengguna ke gambar yang telah diproses. Contoh berikut menunjukkan cara menghasilkan URL bertanda tangan dengan parameter ?x-oss-process=image/parame_value untuk gambar privat:
Java
package com.aliyun.oss.demo;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// Setel endpoint. Dalam contoh ini, wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 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, misalnya, examplebucket.
String bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jika gambar tidak berada di direktori root bucket, sertakan jalur lengkap, misalnya, exampledir/exampleobject.jpg.
String objectName = "exampledir/exampleobject.png";
// Tentukan wilayah tempat bucket berada. Dalam contoh ini, wilayah China (Hangzhou) digunakan. Atur Region ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Ubah ukuran gambar. Ganti parame_value dengan parameter dan nilai spesifik. Misalnya, p_50 menunjukkan bahwa gambar diperkecil secara proporsional menjadi 50% dari ukuran aslinya.
String style = "image/resize,parame_value";
// Atur waktu kedaluwarsa URL bertanda tangan menjadi 3.600 detik.
Date expiration = new Date(new Date().getTime() + 3600 );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda mencapai 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();
}
}
}
}Python
# -*- 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 nama bucket.
bucket = 'examplebucket'
# Tentukan endpoint wilayah tempat bucket berada. Dalam contoh ini, wilayah China (Hangzhou) digunakan.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah umum Alibaba Cloud.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, bucket, region=region)
# Tentukan nama gambar sumber. Jika gambar tidak berada di direktori root bucket, sertakan jalur lengkap, misalnya, exampledir/exampleobject.jpg.
key = 'exampledir/exampleobject.png'
# Tentukan waktu kedaluwarsa dalam detik.
expire_time = 3600
# Ubah ukuran gambar. Ganti parame_value dengan parameter dan nilai spesifik. Misalnya, p_50 menunjukkan bahwa gambar diperkecil secara proporsional menjadi 50% dari ukuran aslinya.
image_process = 'image/resize,parame_value'
# Hasilkan URL bertanda tangan yang berisi parameter pemrosesan gambar.
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# Cetak URL bertanda tangan.
print(url)PHP
<?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();
// Setel yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket, misalnya, examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek, misalnya, exampledir/exampleobject.jpg. Jalur lengkap tidak boleh berisi nama bucket.
$object = "exampledir/exampleobject.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Hasilkan URL bertanda tangan yang berisi parameter pemrosesan gambar. URL valid selama 3.600 detik dan dapat diakses di browser.
$timeout = 3600;
$options = array(
// Ubah ukuran gambar. Ganti parame_value dengan parameter dan nilai spesifik. Misalnya, p_50 menunjukkan bahwa gambar diperkecil secara proporsional menjadi 50% dari ukuran aslinya.
OssClient::OSS_PROCESS => "image/resize,parame_value");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("rtmp url: \n" . $signedUrl);Go
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.
// Setel yourEndpoint ke endpoint bucket. Dalam contoh ini, wilayah China (Hangzhou) digunakan. Atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual untuk wilayah lain.
// Setel yourRegion ke wilayah tempat bucket berada. Dalam contoh ini, wilayah China (Hangzhou) digunakan. Atur wilayah ke cn-hangzhou. Tentukan wilayah aktual untuk wilayah lain.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Setel versi tanda tangan.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// Tentukan nama bucket tempat gambar disimpan, misalnya, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan nama gambar. Jika gambar tidak berada di direktori root bucket, sertakan jalur lengkap, misalnya, exampledir/exampleobject.png.
ossImageName := "exampledir/exampleobject.png"
// Hasilkan URL bertanda tangan dan atur waktu kedaluwarsa menjadi 3.600 detik. Maksimum periode validitas adalah 32.400 detik.
// Ubah ukuran gambar. Ganti parame_value dengan parameter dan nilai spesifik. Misalnya, p_50 menunjukkan bahwa gambar diperkecil secara proporsional menjadi 50% dari ukuran aslinya.
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 3600, oss.Process("image/resize,parame_value"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}Berikut adalah contoh URL bertanda tangan yang dihasilkan:
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/exampleobject.png?x-oss-process=image%2Fresize%2Cp_50&x-oss-date=20241111T113707Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI********************%2F20241111%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=6fd07a2ba50bf6891474dc56aed976b556b6fbcd901cfd01bcde5399bf4802cbUntuk informasi lebih lanjut tentang cara menggunakan SDK lainnya untuk mengubah ukuran gambar, lihat Ikhtisar SDK.
Parameter
Aksi: resize
Pengubahan ukuran proporsional
Anda dapat menggunakan parameter p untuk menentukan persentase pengubahan ukuran proporsional.
Parameter | Deskripsi | Nilai |
p | Mengubah ukuran gambar berdasarkan persentase. | [1,1000] Nilai kurang dari 100 memperkecil gambar. Nilai lebih dari 100 memperbesar gambar. |
Jenis pengubahan ukuran proporsional ini tidak didukung untuk gambar animasi.
Pengubahan ukuran berdasarkan dimensi yang ditentukan
Anda dapat menggunakan parameter w dan h untuk menentukan lebar dan tinggi. Anda dapat menggunakan parameter m untuk mengontrol mode pengubahan ukuran untuk tata letak yang berbeda. Untuk mengontrol tepi yang lebih panjang atau lebih pendek dari gambar yang diubah ukurannya, Anda dapat menggunakan parameter l atau s. Untuk memperbesar gambar, Anda harus menambahkan parameter limit_0.
Parameter | Deskripsi | Nilai |
w | Lebar gambar yang diubah ukurannya. | [1,16384] |
h | Tinggi gambar yang diubah ukurannya. | [1,16384] |
m | Mode pengubahan ukuran. |
Untuk informasi lebih lanjut tentang gambar yang diperoleh setelah Anda mengubah ukuran gambar dalam mode berbeda, lihat Metode perhitungan pengubahan ukuran. Catatan Jika Anda mengatur mode pengubahan ukuran |
l | Tepi yang lebih panjang dari gambar yang diubah ukurannya. Catatan Tepi yang lebih panjang adalah yang lebih besar antara lebar dan tinggi. Misalnya, jika gambar sumber adalah 100 px × 200 px, tepi yang lebih panjang adalah 200 px dan tepi yang lebih pendek adalah 100 px. | [1,16384] |
s | Tepi yang lebih pendek dari gambar yang diubah ukurannya. | [1,16384] |
limit | Menentukan apakah akan mengubah ukuran gambar jika resolusi gambar target lebih tinggi daripada resolusi gambar sumber. Penting Secara default, jika gambar target lebih besar daripada gambar sumber, gambar sumber dikembalikan. Untuk memperbesar gambar, Anda harus menambahkan parameter |
Catatan Untuk gambar animasi, Anda hanya dapat memperkecilnya dengan menentukan lebar dan tinggi. Pengubahan ukuran proporsional ke bawah dan pengubahan ukuran ke atas tidak didukung. |
color | Warna untuk padding saat mode pengubahan ukuran diatur ke pad. | Nilai warna RGB. Contoh: 000000 untuk hitam dan FFFFFF untuk putih. Nilai default: FFFFFF (putih) |
Jika Anda hanya menentukan lebar atau tinggi untuk pengubahan ukuran:
Jika mode pengubahan ukuran adalah `lfit`, `mfit`, atau `fixed`, gambar diubah ukurannya secara proporsional. Misalnya, jika gambar sumber adalah 256 px × 144 px dan Anda mengubah tingginya menjadi 100 px, lebarnya akan diubah menjadi 178 px.
Jika mode pengubahan ukuran adalah `pad` atau `fill`, gambar diubah ukurannya ke dimensi yang ditentukan. Misalnya, jika gambar sumber adalah 256 px × 144 px dan Anda mengubah tingginya menjadi 100 px, lebarnya juga akan diubah menjadi 100 px.
Jika Anda hanya menentukan parameter
lataus, gambar diubah ukurannya berdasarkan tepi yang ditentukan, dan tepi lainnya disesuaikan secara otomatis berdasarkan rasio aspek gambar sumber. Dalam hal ini, parametermtidak berlaku.Jika Anda menentukan kedua parameter
ldans, gambar diubah ukurannya sambil mempertahankan rasio aspek. Dalam hal ini, parametermberlaku. Jika Anda tidak menentukan mode pengubahan ukuran, mode defaultlfitdigunakan.
Metode perhitungan pengubahan ukuran
Ukuran gambar sumber | Parameter pengubahan ukuran | Mode Penskalaan | Ukuran gambar yang diubah ukurannya |
200 px × 100 px | 150 px × 80 px | lfit (default) Mengubah ukuran gambar secara proporsional ke ukuran maksimum yang sesuai dalam persegi panjang lebar dan tinggi yang ditentukan. | 150 px × 75 px
|
mfit Mengubah ukuran gambar secara proporsional ke ukuran minimum yang melampaui persegi panjang lebar dan tinggi yang ditentukan. | 160 px × 80 px
| ||
fill Mengubah ukuran gambar secara proporsional ke ukuran minimum yang melampaui persegi panjang lebar dan tinggi yang ditentukan, lalu memotong gambar ke dimensi yang ditentukan. | 150 px × 80 px
| ||
pad Mengubah ukuran gambar secara proporsional ke ukuran maksimum yang sesuai dalam persegi panjang lebar dan tinggi yang ditentukan, lalu menambahkan padding dengan warna untuk memenuhi dimensi yang ditentukan. | 150 px × 80 px
| ||
fixed Memaksa gambar diubah ukurannya ke lebar dan tinggi yang ditentukan. Jika rasio aspek berbeda dari gambar sumber, gambar akan terdistorsi. | 150 px × 80 px
|
Jika mode pengubahan ukuran adalah `lfit` atau `mfit` dan rasionya adalah desimal, nilainya dibulatkan ke bilangan bulat terdekat.
Contoh
Penagihan
Saat Anda mengubah ukuran gambar, biaya berikut akan dikenakan. Untuk detail harga dari item yang dapat ditagih, lihat Harga OSS.
API
Item yang dapat ditagih
Deskripsi
GetObject
Permintaan GET
Anda akan dikenakan biaya permintaan berdasarkan jumlah permintaan yang berhasil.
Lalu lintas keluar melalui Internet
Jika Anda memanggil operasi GetObject menggunakan endpoint publik, seperti oss-cn-hangzhou.aliyuncs.com, atau endpoint akselerasi, seperti oss-accelerate.aliyuncs.com, Anda akan dikenakan biaya untuk lalu lintas keluar melalui Internet berdasarkan ukuran data.
Pengambilan objek IA
Jika objek IA diambil, Anda akan dikenakan biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.
Pengambilan objek Arsip dalam bucket dengan akses real-time diaktifkan
Jika Anda mengambil objek Arsip dalam bucket dengan akses real-time diaktifkan, Anda akan dikenakan biaya pengambilan data Arsip berdasarkan ukuran objek Arsip yang diambil.
Biaya akselerasi transfer
Jika Anda mengaktifkan akselerasi transfer dan menggunakan endpoint akselerasi untuk mengakses bucket Anda, Anda akan dikenakan biaya akselerasi transfer berdasarkan ukuran data.
Operasi API Terkait
Jika aplikasi Anda memiliki persyaratan kustomisasi tinggi, Anda dapat langsung memanggil API REST. Ini memerlukan Anda untuk menulis kode secara manual untuk menghitung tanda tangan. Untuk informasi lebih lanjut tentang cara menghitung header Authorization untuk permintaan publik, lihat Signature V4 (direkomendasikan).
Anda dapat memproses gambar dengan menambahkan parameter pengubahan ukuran gambar ke operasi GetObject. Untuk informasi lebih lanjut, lihat GetObject.
GET /oss.jpg?x-oss-process=image/resize,p_50 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue


















