Penyesuaian kualitas melakukan kompresi gambar sambil mempertahankan format aslinya. Anda dapat menggunakan parameter penyesuaian kualitas untuk mengubah kualitas gambar sumber yang disimpan di OSS. Topik ini menjelaskan parameter tersebut dan memberikan contoh penyesuaian kualitas gambar.
Penyesuaian kualitas tidak berlaku pada gambar dalam format kompresi tanpa kehilangan data, seperti PNG.
Parameter
Aksi: quality
Berikut adalah deskripsi metriknya:
Parameter | Deskripsi | Nilai yang valid |
q | Mengatur kualitas relatif gambar. Ini melakukan kompresi gambar sumber berdasarkan persentase. Misalnya, jika kualitas gambar sumber adalah 100%, menambahkan parameter Catatan Parameter q hanya mengatur kualitas relatif untuk gambar JPG. Untuk gambar WebP, parameter ini berfungsi sama seperti parameter Q dan mengatur kualitas absolut. | [1,100] |
Q | Mengatur kualitas absolut gambar.
| [1,100] |
Metode
Menyesuaikan kualitas gambar publik-baca atau publik-baca-tulis
Anda dapat menambahkan parameter pemrosesan gambar ke URL gambar baca-publik atau baca-tulis publik untuk menyesuaikan kualitasnya.
Contoh dalam topik ini menggunakan bucket oss-console-img-demo-cn-hangzhou di wilayah Hangzhou. Titik akhir publik untuk gambar adalah:
Menyesuaikan kualitas relatif gambar
Atur kualitas relatif gambar menjadi 80%: quality,q_80. URL untuk memproses gambar adalah: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/quality,q_80
Menyesuaikan kualitas absolut gambar
Atur kualitas absolut gambar menjadi 90%: quality,Q_90. URL untuk memproses gambar adalah: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/quality,Q_90
Menyesuaikan kualitas gambar pribadi
Anda dapat menggunakan Alibaba Cloud SDK dan REST API untuk menyesuaikan kualitas gambar privat.
Menggunakan Alibaba Cloud SDK
Kode berikut memberikan contoh cara menyesuaikan kualitas gambar privat menggunakan Alibaba Cloud SDK untuk bahasa pemrograman umum. Untuk informasi selengkapnya tentang penggunaan SDK lainnya, lihat Ikhtisar.
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 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 contoh, 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 menyertakan nama bucket.
String objectName = "example.jpg";
// Tentukan path lengkap file lokal, misalnya D:\\dest.jpg. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika tidak, file baru akan dibuat.
String pathName = "D:\\dest.jpg";
// Buat instance OSSClient.
// Setelah instance OSSClient tidak lagi diperlukan, 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 {
// Atur kualitas absolut gambar sumber menjadi 80%.
String image = "image/quality,Q_80";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Beri nama gambar yang diproses sebagai dest.jpg dan simpan ke path lokal.
// Jika Anda hanya menentukan nama file, seperti dest.jpg, tanpa path lengkap, file akan disimpan ke path lokal proyek secara default.
ossClient.getObject(request, new File("D:\\dest.jpg"));
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + 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 Kesalahan:" + 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 contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket, misalnya examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek, misalnya exampledir/exampleobject.jpg. Path lengkap tidak boleh menyertakan nama bucket.
$object = "src.jpg";
// Tentukan path lengkap file lokal, misalnya D:\\dest.jpg. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika tidak, file baru akan dibuat.
// Jika Anda hanya menentukan nama file, seperti dest.jpg, tanpa path lengkap, file akan disimpan ke path lokal proyek secara default.
$download_file = "D:\\dest.jpg";
$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);
// Atur kualitas absolut gambar sumber menjadi 80%.
$image = "image/quality,Q_80";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image);
// Simpan gambar yang diproses 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 contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
## Atur titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke 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 gambar sumber. Jika gambar tidak berada di direktori root bucket, tentukan path lengkapnya, misalnya exampledir/example.jpg.
key = 'src.jpg'
# Tentukan nama gambar yang diproses.
new_pic = 'D:\\dest.jpg'
# Atur kualitas absolut gambar sumber menjadi 80%.
image = 'image/quality,Q_80'
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 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.
// Atur yourEndpoint ke titik akhir bucket. Titik akhir China (Hangzhou) digunakan sebagai contoh. Atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan titik akhir yang sebenarnya untuk wilayah lainnya.
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, misalnya examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan nama gambar sumber. Jika gambar tidak berada di direktori root bucket, tentukan path lengkapnya, misalnya exampledir/example.jpg.
sourceImageName := "src.jpg"
// Tentukan nama gambar yang diproses.
targetImageName := "D://dest.jpg"
// Atur kualitas absolut gambar sumber menjadi 80%.
image := "image/quality,Q_80"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}Menggunakan REST API
Jika program Anda memiliki persyaratan kustomisasi tinggi, Anda dapat langsung membuat permintaan REST API. Untuk membuat permintaan REST API, Anda harus menulis kode secara manual untuk menghitung signature. Untuk informasi selengkapnya, lihat Signature V4 (disarankan).
Anda dapat memproses gambar dengan menambahkan parameter penyesuaian kualitas ke permintaan GetObject.
GET /oss.jpg?x-oss-process=image/quality,Q_80 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