Anda dapat mengonversi format gambar sumber di Object Storage Service (OSS) dengan menambahkan parameter konversi format ke URL-nya, sehingga tidak perlu mengunduh gambar terlebih dahulu sebelum dikonversi. Topik ini menjelaskan parameter yang tersedia dan memberikan contoh konversi format gambar.
Kasus penggunaan
-
Menyesuaikan dengan berbagai perangkat dan platform: Perangkat dan platform yang berbeda mendukung format gambar yang berbeda. Konversi format OSS memastikan kompatibilitas dan tampilan optimal di berbagai terminal.
-
Mengurangi biaya penyimpanan: Format gambar tertentu, seperti WebP, memiliki ukuran file lebih kecil sambil mempertahankan kualitas visual. Mengonversi ke format tersebut mengurangi penggunaan storage space dan menurunkan biaya penyimpanan.
-
Menstandarkan manajemen resource: Di industri seperti e-commerce, media sosial, dan media digital, konversikan semua gambar yang diunggah ke format standar untuk menyederhanakan manajemen dan distribusi.
Catatan penggunaan
-
Jika operasi pemrosesan gambar mencakup resize, letakkan parameter konversi format di akhir parameter pemrosesan. Contohnya:
image/resize,w_100/format,jpg. -
Jika pemrosesan gambar mencakup resize dan watermark, parameter konversi format harus ditambahkan setelah parameter resize. Contohnya:
image/resize,w_100/format,jpg/watermark,.... -
Saat mengonversi gambar tanpa alpha channel ke format yang mendukung transparansi, seperti PNG, WebP, atau BMP, area transparan yang dihasilkan secara default diisi dengan warna putih. OSS tidak mendukung pengisian area transparan dengan warna hitam.
-
Saat mengonversi gambar ke format WebP, lebar dan tinggi gambar sumber tidak boleh melebihi 16.383 px. Jika salah satu dimensi melebihi batas ini, konversi akan gagal.
Metode pemrosesan gambar
URL objek hanya cocok untuk gambar public-read; untuk gambar privat, Anda harus menggunakan SDK atau REST API. Untuk informasi selengkapnya, lihat Metode pemrosesan gambar.
Gambar publik
Untuk gambar public-read, Anda dapat langsung menambahkan parameter pemrosesan ke URL gambar agar dapat diakses secara permanen dan anonim.
Berikut cara menambahkan parameter ?x-oss-process=image/format,parame_value ke URL gambar public-read. Ganti saja parame_value dengan parameter dan nilai spesifik sesuai kebutuhan bisnis Anda. Anda juga dapat menggabungkan beberapa parameter.
|
URL sumber |
URL hasil pemrosesan |
|
https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.gif |
Gambar privat
Gunakan SDK Alibaba Cloud atau REST API untuk mengonversi format gambar privat.
SDK
Bagian berikut menyediakan contoh kode untuk konversi format gambar menggunakan SDK umum. Untuk contoh kode SDK lainnya, lihat Ikhtisar SDK.
Java
Diperlukan Java SDK 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 {
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir wilayah tempat bucket Anda berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan ID wilayah. Contoh: 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 path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket.
String objectName = "src.gif";
// Tentukan path lokal lengkap tempat menyimpan gambar hasil pemrosesan. Contoh: D:\\dest.png. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat.
String pathName = "D:\\dest.png";
// Buat instance OSSClient.
// Setelah instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan resource-nya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Konversi gambar sumber ke format PNG.
String image = "image/format,png";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Unduh gambar hasil pemrosesan dan simpan ke path lokal yang ditentukan.
// Jika Anda hanya menentukan nama file tanpa path lengkap, seperti dest.png, file akan disimpan ke direktori root proyek.
ossClient.getObject(request, new File("D:\\dest.png"));
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, artinya permintaan Anda mencapai OSS, "
+ "tetapi ditolak karena error.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + 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 PHP SDK 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();
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir wilayah tempat bucket Anda berada.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket.
$object = "src.gif";
// Tentukan path lokal lengkap tempat menyimpan gambar hasil pemrosesan. Contoh: D:\\dest.png. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat.
// Jika Anda hanya menentukan nama file tanpa path lengkap, seperti dest.png, file akan disimpan ke direktori root proyek.
$download_file = "D:\\dest.png";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID wilayah. Contoh: cn-hangzhou.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Konversi gambar sumber ke format PNG.
$image = "image/format,png";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image);
// Unduh gambar hasil pemrosesan dan simpan ke path lokal yang ditentukan.
$ossClient->getObject($bucket, $object, $options);
Python
Diperlukan Python SDK 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())
# Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir wilayah tempat bucket Anda berada.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah. Contoh: cn-hangzhou.
region = 'cn-hangzhou'
# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan path lengkap objek sumber. Jika objek tidak berada di direktori root bucket, Anda harus menentukan path lengkapnya, misalnya exampledir/src.gif.
key = 'src.gif'
# Tentukan path lokal lengkap tempat menyimpan gambar hasil pemrosesan.
new_pic = 'D:\\dest.png'
# Konversi gambar sumber ke format PNG.
image = 'image/format,png'
# Unduh gambar hasil pemrosesan dan simpan ke path lokal yang ditentukan.
bucket.get_object_to_file(key, new_pic, process=image)
Go
Diperlukan Go SDK 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.
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir 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. Contoh: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan path lengkap objek sumber. Jika objek tidak berada di direktori root bucket, Anda harus menentukan path lengkapnya, misalnya exampledir/src.gif.
sourceImageName := "src.gif"
// Tentukan path lokal lengkap tempat menyimpan gambar hasil pemrosesan.
targetImageName := "D://dest.png"
// Konversi gambar sumber ke format PNG.
image := "image/format,png"
// Unduh gambar hasil pemrosesan dan simpan ke path lokal yang ditentukan.
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}
REST API
Jika aplikasi Anda memiliki kebutuhan kustom yang tinggi, Anda dapat langsung memanggil REST API. Hal ini memerlukan perhitungan signature secara manual. Untuk informasi tentang cara menghitung header Authorization, lihat Signature Version 4 (Direkomendasikan).
Anda dapat memproses gambar dengan menambahkan parameter konversi format ke operasi GetObject. Untuk informasi selengkapnya, lihat GetObject.
GET /oss.jpg?x-oss-process=image/format,png HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: <AuthorizationValue>
Parameter
Aksi: format
|
Nilai |
Deskripsi |
|
|
Mengonversi gambar sumber ke format JPG. Penting
Tidak didukung mengonversi gambar HEIC yang memiliki alpha channel ke format JPG. |
|
|
Mengonversi gambar sumber ke format PNG. |
|
|
Mengonversi gambar sumber ke format WebP. Catatan
Lebar dan tinggi gambar sumber tidak boleh melebihi 16.383 px. |
|
|
Mengonversi gambar sumber ke format BMP. |
|
|
Jika gambar sumber adalah GIF, gambar tetap berupa GIF. Jika gambar sumber bukan GIF, format aslinya dipertahankan. |
|
|
Mengonversi gambar sumber ke format TIFF. |
|
|
Mengonversi gambar sumber ke format HEIF. Catatan
Hanya didukung di: China (Zhangjiakou), China (Shanghai), China (Shenzhen), China (Hangzhou), China (Beijing), dan Singapura. |
|
|
Mengonversi gambar sumber ke format AVIF. Catatan
Hanya didukung di: China (Zhangjiakou), China (Shanghai), China (Shenzhen), China (Hangzhou), China (Beijing), dan Singapura. |
Contoh
FAQ
Kontrol kualitas gambar
Setiap format gambar memiliki pengaturan kualitas default. Jika Anda tidak menentukan parameter kualitas selama konversi format, OSS akan menerapkan kualitas default.
Untuk meningkatkan kualitas gambar, tentukan kualitas 100 saat mengonversi format, misalnya ?x-oss-process=image/quality,Q_100. Untuk informasi selengkapnya tentang konversi kualitas, lihat Konversi kualitas.
Apakah konversi format memengaruhi kecepatan pemuatan halaman?
OSS melakukan konversi format secara dinamis saat permintaan, yang dapat menyebabkan sedikit penundaan pada akses pertama. Namun, gambar hasil konversi biasanya lebih kecil dan dalam format yang lebih efisien, seperti mengonversi PNG ke WebP. Akibatnya, pemuatan berikutnya lebih cepat, sehingga meningkatkan performa halaman secara keseluruhan.
Bisakah saya mengonversi GIF ke MP4?
Untuk mengonversi GIF ke format MP4, kirim tiket untuk meminta fitur ini.



