Anda dapat mengubah ukuran gambar dengan menambahkan parameter pengubahan ukuran ke permintaan GetObject.
Skenario
-
Desain web: Dalam desain web dan pengembangan aplikasi seluler, gambar disesuaikan untuk berbagai ukuran layar dan resolusi guna memastikan tampilan responsif.
-
Media sosial: Platform memproses gambar yang diunggah pengguna dan mengonversinya ke dimensi standar untuk pratinjau.
-
Pengenalan dan analisis gambar: Dalam visi komputer dan pembelajaran mesin, penskalaan gambar meningkatkan efisiensi pemrosesan.
Batasan
|
Batasan |
Item |
Deskripsi |
|
Batasan gambar sumber |
Format gambar |
Gambar sumber harus dalam format JPG, PNG, BMP, GIF, WebP, TIFF, atau HEIC. |
|
Ukuran file |
Gambar sumber tidak boleh melebihi 20 MB. Untuk menaikkan batasan ini, ajukan permintaan di Quota Center. |
|
|
Lebar dan tinggi |
Lebar atau tinggi gambar sumber tidak boleh melebihi 30.000 px, dan total pikselnya tidak boleh melebihi 250 juta px. Catatan
Untuk gambar animasi, seperti GIF, total piksel dihitung sebagai |
|
|
Batasan gambar hasil skala |
Penskalaan gambar |
Lebar atau tinggi gambar hasil skala tidak boleh melebihi 16.384 px, dan total pikselnya tidak boleh melebihi 16.777.216 px. |
Prosedur
Di OSS, ketika Anda menambahkan parameter ?x-oss-process=image/resize,parameter_value ke URL gambar, OSS memproses gambar secara real time dan mengembalikan hasilnya. image/resize menentukan operasi pengubahan ukuran, di mana parameter adalah parameter pengubahan ukuran yang didukung dan value adalah nilai yang sesuai. Untuk detail semua parameter, lihat Parameter. Anda juga dapat menggabungkan beberapa parameter.
Untuk gambar baca-publik, Anda dapat menambahkan parameter pemrosesan ke URL gambar sehingga hasil pemrosesan dapat diakses secara permanen dan anonim. Jika gambar Anda bersifat privat, Anda harus menggunakan SDK untuk menghasilkan URL yang ditandatangani atau memanggil operasi API guna memproses gambar tersebut.
Gambar baca-publik
Untuk memproses gambar baca-publik, tambahkan parameter ?x-oss-process=image/resize,parameter_value ke URL-nya. Ganti parameter_value dengan parameter dan nilai yang Anda perlukan.
|
URL gambar asli |
URL gambar dengan parameter pengubahan ukuran |
|
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 yang ditandatangani yang mencakup parameter pengubahan ukuran gambar. Hal ini memberikan akses sementara kepada pemegang URL terhadap hasil pemrosesan. Contoh berikut menunjukkan cara menggunakan SDK untuk menghasilkan URL yang ditandatangani dengan parameter ?x-oss-process=image/resize,parameter_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 {
// Contoh ini menggunakan endpoint wilayah China (Hangzhou). Ganti nilainya dengan endpoint aktual.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial dari variabel lingkungan. Pastikan variabel OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi sebelum menjalankan kode.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jika objek tidak berada di direktori root bucket, Anda harus menyertakan path lengkapnya, seperti exampledir/exampleobject.png.
String objectName = "exampledir/exampleobject.png";
// Tentukan ID wilayah tempat bucket berada. Misalnya, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.
String region = "cn-hangzhou";
// 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 {
// Ubah ukuran gambar. Ganti parameter_value dengan parameter dan nilai spesifik. Misalnya, p_50 menskalakan gambar secara proporsional menjadi 50% dari ukuran aslinya.
String style = "image/resize,parameter_value";
// Tentukan waktu kedaluwarsa URL yang ditandatangani. Pada contoh ini, URL yang ditandatangani kedaluwarsa dalam 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("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan 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, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh ini, 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. Contoh ini menggunakan wilayah China (Hangzhou).
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, bucket, region=region)
# Tentukan nama gambar sumber. Jika gambar tidak berada di direktori root bucket, sertakan path lengkapnya, seperti exampledir/exampleobject.jpg.
key = 'exampledir/exampleobject.png'
# Tentukan waktu kedaluwarsa dalam detik.
expire_time = 3600
# Ubah ukuran gambar. Ganti parameter_value dengan parameter dan nilai spesifik. Misalnya, p_50 menskalakan gambar secara proporsional menjadi 50% dari ukuran aslinya.
image_process = 'image/resize,parameter_value'
# Hasilkan URL yang ditandatangani yang mencakup parameter pemrosesan gambar.
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# Cetak URL yang ditandatangani.
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 dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel $endpoint ke endpoint wilayah bucket Anda. Misalnya, untuk bucket di wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek, seperti exampledir/exampleobject.jpg. Path lengkap tidak boleh mengandung 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 yang ditandatangani dengan parameter pemrosesan gambar. URL berlaku selama 3.600 detik dan dapat diakses langsung di browser.
$timeout = 3600;
$options = array(
// Ubah ukuran gambar. Ganti parameter_value dengan parameter dan nilai spesifik. Misalnya, p_50 menskalakan gambar secara proporsional menjadi 50% dari ukuran aslinya.
OssClient::OSS_PROCESS => "image/resize,parameter_value");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("signed 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 dari variabel lingkungan. Sebelum menjalankan kode contoh ini, 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 wilayah bucket Anda. Contoh ini menggunakan https://oss-cn-hangzhou.aliyuncs.com untuk wilayah China (Hangzhou). Gantilah dengan endpoint aktual Anda.
// Setel yourRegion ke wilayah tempat bucket Anda berada. Contoh ini menggunakan cn-hangzhou untuk wilayah China (Hangzhou). Gantilah dengan wilayah aktual Anda.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Setel versi signature.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// Tentukan nama bucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan path lengkap gambar. Jika gambar tidak berada di direktori root bucket, sertakan path lengkapnya (misalnya, exampledir/exampleobject.png).
ossImageName := "exampledir/exampleobject.png"
// Hasilkan URL yang ditandatangani yang berlaku selama 3.600 detik. Periode validitas maksimum adalah 32.400 detik.
// Ubah ukuran gambar. Ganti parameter_value dengan parameter dan nilai spesifik. Misalnya, p_50 menskalakan gambar secara proporsional menjadi 50% dari ukuran aslinya.
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 3600, oss.Process("image/resize,parameter_value"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}
Berikut adalah contoh URL yang ditandatangani 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=6fd07a2ba50bf6891474dc56aed976b556b6fbcd901cfd01bcde5399bf4802cb
Untuk contoh pengubahan ukuran menggunakan SDK lainnya, lihat Referensi SDK.
Parameter
Operasi: resize
Penskalaan proporsional
Parameter p menskalakan gambar berdasarkan persentase dari ukuran aslinya.
|
Parameter |
Deskripsi |
Nilai |
|
p |
Faktor skala dalam persentase. |
Bilangan bulat dalam rentang [1, 1000]. Nilai kurang dari 100 memperkecil gambar, dan nilai lebih dari 100 memperbesarnya. |
Gambar animasi tidak mendukung penskalaan proporsional ini.
Penskalaan berdasarkan lebar dan tinggi
Gunakan parameter w dan h untuk menentukan lebar dan tinggi, serta parameter m untuk mengontrol mode penskalaan. Untuk mengontrol sisi terpanjang atau terpendek, gunakan parameter l atau s. Untuk mengizinkan penskalaan naik, atur parameter limit ke 0.
|
Parameter |
Deskripsi |
Nilai |
|
w |
Menentukan lebar gambar output, dalam piksel. |
[1,16384] |
|
h |
Menentukan tinggi gambar output, dalam piksel. |
[1,16384] |
|
m |
Menentukan mode penskalaan. |
Untuk informasi lebih lanjut tentang cara kerja berbagai mode penskalaan, lihat Metode perhitungan penskalaan. Catatan
Jika Anda menentukan parameter |
|
l |
Menentukan sisi terpanjang gambar output, dalam piksel. Catatan
Sisi terpanjang adalah nilai terbesar antara lebar dan tinggi. Misalnya, untuk gambar 100 px × 200 px, sisi terpanjangnya adalah 200 px dan sisi terpendeknya adalah 100 px. |
[1,16384] |
|
s |
Menentukan sisi terpendek gambar output, dalam piksel. |
[1,16384] |
|
limit |
Menentukan apakah penskalaan naik diizinkan ketika dimensi target lebih besar dari dimensi gambar asli. Penting
Secara default, jika dimensi target lebih besar dari yang asli, gambar asli dikembalikan. Untuk mengizinkan penskalaan naik, atur parameter |
Catatan
Untuk gambar animasi, Anda hanya dapat memperkecilnya dengan menentukan lebar dan tinggi. Penskalaan proporsional dan penskalaan naik tidak didukung. |
|
color |
Ketika mode penskalaan diatur ke pad (penskalaan dengan padding), Anda dapat mengatur warna padding. |
Nilai warna RGB. Misalnya, 000000 merepresentasikan hitam dan FFFFFF merepresentasikan putih. Nilai default: FFFFFF (putih) |
-
Jika Anda hanya menentukan lebar atau hanya tinggi:
-
Ketika mode penskalaan adalah lfit, mfit, atau fixed, gambar diskalakan secara proporsional. Misalnya, jika gambar sumber berukuran 256 px × 144 px dan Anda mengubah tingginya menjadi 100 px, lebarnya akan diskalakan menjadi 178 px.
-
Ketika mode penskalaan adalah pad atau fill, lebar dan tinggi gambar sumber diskalakan ke nilai yang ditentukan. Misalnya, jika gambar sumber berukuran 256 px × 144 px dan Anda mengubah tingginya menjadi 100 px, lebarnya juga diskalakan menjadi 100 px.
-
-
Jika Anda hanya menentukan parameter
lataus, gambar diskalakan secara proporsional ke panjang sisi yang ditentukan. Parametermdiabaikan. -
Ketika kedua parameter
ldansditentukan, parametermmenentukan perilaku penskalaan. Rasio aspek selalu dipertahankan. Jika parametermtidak ditentukan, mode defaultlfitdigunakan.
Metode penskalaan
|
Ukuran gambar asli |
Ukuran target |
Mode penskalaan |
Ukuran hasil skala |
|
200 px × 100 px |
150 px × 80 px |
lfit (default) Menskalakan gambar secara proporsional untuk membuat gambar mini terbesar yang muat dalam dimensi target. |
150 px × 75 px
|
|
mfit Menskalakan gambar secara proporsional untuk membuat gambar mini terkecil yang sepenuhnya menutupi dimensi target. |
160 px × 80 px
|
||
|
fill Menskalakan gambar secara proporsional untuk sepenuhnya menutupi lebar dan tinggi target, lalu memotong kelebihannya agar sesuai dengan dimensi target. |
150 px × 80 px
|
||
|
pad Menskalakan gambar secara proporsional agar muat dalam lebar dan tinggi target, lalu mengisi area yang tersisa dengan warna solid agar sesuai dengan dimensi target. |
150 px × 80 px
|
||
|
fixed Mengubah ukuran gambar ke lebar dan tinggi yang tepat, mengabaikan rasio aspeknya. Hal ini dapat mendistorsi gambar. |
150 px × 80 px
|
Untuk mode lfit dan mfit, jika perhitungan penskalaan menghasilkan nilai desimal, dimensi dibulatkan ke bilangan bulat terdekat.
Contoh
Penagihan
Penskalaan gambar dikenai biaya berikut. Untuk detail harga, lihat Harga OSS.
-
API
Item yang ditagih
Deskripsi
GetObject
Permintaan GET
Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.
Lalu lintas keluar melalui Internet
Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas keluar melalui Internet berdasarkan ukuran data.
Pengambilan objek IA
Jika objek IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.
Pengambilan objek Archive dalam bucket yang diaktifkan akses real-time
Jika Anda mengambil objek Archive dalam bucket yang diaktifkan akses real-time, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil.
Biaya akselerasi transfer
Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, Anda dikenai biaya akselerasi transfer berdasarkan ukuran data.
API Terkait
Untuk kustomisasi lanjutan, Anda dapat membuat permintaan REST API secara langsung. Hal ini memerlukan perhitungan signature secara manual dalam kode Anda. Untuk detail perhitungan nilai header Authorization, lihat Signature Version 4 (Direkomendasikan).
Untuk memproses gambar, tambahkan parameter pengubahan ukuran gambar ke operasi GetObject. Untuk informasi lebih lanjut, lihat operasi 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



















