Anda dapat mengonversi format citra yang disimpan di Object Storage Service (OSS) dengan menambahkan parameter ke URL-nya, sehingga tidak perlu mengunduh citra tersebut. Topik ini menjelaskan parameter yang tersedia dan memberikan contoh konversi format citra.
Skenario
Menyesuaikan dengan berbagai perangkat dan platform: Perangkat dan platform yang berbeda mendukung format citra yang berbeda. Anda dapat menggunakan fitur konversi format citra OSS untuk memastikan kompatibilitas dan tampilan optimal di berbagai perangkat.
Menghemat biaya penyimpanan: Beberapa format citra, seperti WebP, memiliki ukuran file lebih kecil sambil mempertahankan kualitas visual. Anda dapat mengonversi citra ke format tersebut untuk mengurangi penggunaan penyimpanan dan menekan biaya penyimpanan.
Menyatukan manajemen sumber daya: Di industri seperti e-commerce, media sosial, dan media berita, Anda dapat mengonversi citra yang diunggah ke format standar. Hal ini menyederhanakan manajemen dan distribusi selanjutnya.
Catatan penggunaan
Jika permintaan pemrosesan citra mencakup operasi penskalaan, letakkan parameter konversi format di akhir daftar parameter pemrosesan. Contohnya:
image/resize,w_100/format,jpg.Jika permintaan pemrosesan citra mencakup operasi penskalaan dan watermark, tambahkan parameter konversi format setelah parameter penskalaan. Contohnya:
image/resize,w_100/format,jpg/watermark,....Jika citra sumber tidak memiliki alpha channel dan Anda mengonversinya ke format yang memiliki alpha channel, seperti PNG, WebP, atau BMP, area transparan akan diisi dengan warna putih secara default. Perhatikan bahwa OSS tidak mendukung pengisian area transparan dengan warna hitam.
Metode
Anda dapat mengatur parameter pemrosesan citra menggunakan URL file, SDK, atau API. URL file hanya dapat digunakan untuk citra dengan akses public-read. Untuk citra privat, Anda harus menggunakan SDK atau API. Untuk informasi selengkapnya, lihat Metode pemrosesan citra.
Citra yang dapat dibaca publik
Untuk citra public-read, Anda dapat menambahkan parameter pemrosesan langsung ke URL citra. Citra yang telah diproses kemudian dapat diakses melalui URL yang dihasilkan.
Untuk memproses citra public-read, tambahkan parameter ?x-oss-process=image/format,parameter_value ke URL citra. Ganti parameter_value dengan parameter dan nilai yang diperlukan. Anda juga dapat menggabungkan beberapa parameter.
URL citra sumber | URL citra dengan parameter pemrosesan |
https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.gif |
Citra privat
Anda dapat mengonversi format citra privat menggunakan SDK Alibaba Cloud atau REST API.
Gunakan SDK Alibaba Cloud
Bagian berikut menyediakan contoh kode yang menunjukkan cara mengonversi format citra dengan SDK umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar SDK.
Java
Diperlukan Java SDK versi 3.17.4 atau yang 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 yang sebenarnya.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, 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 path lengkap objek. Path lengkap tidak boleh mengandung nama bucket.
String objectName = "src.gif";
// Tentukan path lengkap file lokal, misalnya D:\\dest.jpg. 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.
// 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 {
// Konversi citra sumber ke format PNG.
String image = "image/format,png";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Beri nama citra hasil sebagai dest.png dan simpan ke path lokal.
// Jika Anda hanya menentukan nama file, seperti dest.png, tanpa path lokal, file akan disimpan ke path lokal proyek secara default.
ossClient.getObject(request, new File("D:\\dest.png"));
} 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();
}
}
}
}PHP
Diperlukan PHP SDK versi 2.7.0 atau yang 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 ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh: https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket, misalnya examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket.
$object = "src.gif";
// Tentukan path lengkap file lokal, misalnya 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, seperti dest.png, tanpa path lokal, file akan disimpan ke path lokal proyek secara default.
$download_file = "D:\\dest.png";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID wilayah umum Alibaba Cloud.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Konversi citra sumber ke format PNG.
$image = "image/format,png";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image);
// Simpan citra hasil ke path lokal.
$ossClient->getObject($bucket, $object, $options); Python
Diperlukan Python SDK versi 2.18.4 atau yang lebih baru.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh: https://oss-cn-hangzhou.aliyuncs.com.
## Tetapkan titik akhir ke wilayah tempat bucket berada. Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh: https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah umum Alibaba Cloud.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Tentukan nama citra sumber. Jika citra tidak berada di direktori root bucket, Anda harus menentukan path lengkapnya, misalnya exampledir/src.gif.
key = 'src.gif'
# Tentukan nama citra hasil.
new_pic = 'D:\\dest.png'
# Konversi citra sumber ke format PNG.
image = 'image/format,png'
bucket.get_object_to_file(key, new_pic, process=image)Go
Diperlukan Go SDK versi 3.0.2 atau yang 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 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.
// Tetapkan yourEndpoint ke titik akhir bucket. Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh: https://oss-cn-hangzhou.aliyuncs.com. Tentukan titik akhir sesuai wilayah 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 citra sumber disimpan, misalnya examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan nama citra sumber. Jika citra tidak berada di direktori root bucket, Anda harus menentukan path lengkapnya, misalnya exampledir/src.gif.
sourceImageName := "src.gif"
// Tentukan nama citra hasil.
targetImageName := "D://dest.png"
// Konversi citra sumber ke format PNG.
image := "image/format,png"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}Gunakan REST API
Jika bisnis Anda memerlukan tingkat kustomisasi yang tinggi, Anda dapat langsung memanggil RESTful API. Untuk memanggil API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi selengkapnya tentang cara menghitung header Authorization, lihat Signature Version 4 (Direkomendasikan).
Anda dapat menentukan parameter format dalam panggilan GetObject untuk memproses citra. 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: AuthorizationValueParameter
Aksi: format
Rentang nilai | Deskripsi |
jpg | Menyimpan citra sumber dalam format JPG. Penting Anda tidak dapat menyimpan citra dalam format HEIC yang memiliki alpha channel ke format JPG. |
png | Menyimpan citra sumber dalam format PNG. |
webp | Menyimpan citra sumber dalam format WebP. |
bmp | Menyimpan citra sumber dalam format BMP. |
gif | Jika citra sumber dalam format GIF, citra tersebut disimpan dalam format GIF. Jika citra sumber bukan dalam format GIF, citra tersebut disimpan dalam format aslinya. |
tiff | Menyimpan citra sumber dalam format TIFF. |
heic | Menyimpan citra sumber dalam format HEIF. Catatan Format HEIF hanya didukung di wilayah China (Zhangjiakou), China (Shanghai), China (Shenzhen), China (Hangzhou), China (Beijing), dan Singapura. |
avif | Menyimpan citra sumber dalam format AVIF. Catatan Format AVIF hanya didukung di wilayah China (Zhangjiakou), China (Shanghai), China (Shenzhen), China (Hangzhou), China (Beijing), dan Singapura. |
Contoh
FAQ
Tentang kualitas citra hasil
Format citra memiliki kualitas default. Jika Anda tidak menentukan kualitas selama konversi format, OSS akan menggunakan kualitas default tersebut.
Jika Anda ingin meningkatkan kualitas citra, Anda dapat mengatur kualitas ke 100 selama konversi format, misalnya menggunakan ?x-oss-process=image/quality,Q_100. Untuk informasi selengkapnya tentang konversi kualitas, lihat Konversi kualitas.
Apakah proses konversi format citra memengaruhi kecepatan pemuatan halaman?
Konversi format citra dilakukan secara dinamis saat permintaan masuk. Sedikit penundaan mungkin terjadi pada akses pertama. Namun, citra yang telah dikonversi biasanya berukuran lebih kecil dan dalam format yang lebih efisien, seperti ketika Anda mengonversi citra PNG ke format WebP. Hal ini membantu mempercepat pemuatan berikutnya dan meningkatkan performa halaman secara keseluruhan.
Bisakah saya mengonversi citra GIF ke format MP4?
Untuk mengonversi citra GIF ke format MP4, kirim tiket untuk meminta fitur ini.



