Secara default, Object Storage Service (OSS) memproses gambar sumber berdasarkan parameter dalam permintaan pemrosesan gambar (IMG), tetapi tidak menyimpan hasilnya. Jika Anda ingin menampilkan hasil pemrosesan yang sama, seperti thumbnail, gambar terpotong, atau gambar dengan format yang dikonversi, Anda dapat menyimpan gambar yang telah diproses. Untuk menyimpan gambar tersebut sebagai objek ke bucket tertentu, tambahkan parameter saveas ke permintaan IMG.
Catatan
Izin yang Diperlukan
Untuk menyimpan gambar yang telah diproses, Anda memerlukan izin
oss:PostProcessTaskpada bucket sumber, serta izinoss:PutBucketpada bucket tujuan dan izinoss:PutObjectpada objek tujuan.Wilayah Penyimpanan
Anda dapat menyimpan gambar yang telah diproses di bucket yang sama dengan gambar sumber atau di bucket yang berbeda. Namun, bucket sumber dan tujuan harus milik Akun Alibaba Cloud yang sama dan berada di wilayah yang sama.
Metode Penyimpanan
Tambahkan parameter saveas untuk menyimpan gambar yang telah diproses menggunakan SDK ke bucket tertentu. Untuk informasi lebih lanjut, lihat Contoh cara menyimpan gambar yang diproses menggunakan SDK Alibaba Cloud. Perlu dicatat bahwa penyimpanan langsung hasil pemrosesan URL file ke bucket tertentu tidak didukung. Kami merekomendasikan agar Anda menyimpan gambar yang telah diproses ke perangkat lokal terlebih dahulu, lalu mengunggahnya ke bucket yang ditentukan.
ACL
Daftar kontrol akses (ACL) dari gambar yang telah diproses akan mengikuti ACL bucket tempat gambar disimpan dan tidak dapat disesuaikan.
Durasi Penyimpanan
Jika Anda ingin menyesuaikan durasi penyimpanan gambar yang telah diproses, konfigurasikan kebijakan kedaluwarsa yang sesuai menggunakan aturan siklus hidup.
Operasi
Gunakan SDK Alibaba Cloud
Kode berikut memberikan contoh cara menyimpan gambar yang telah diproses menggunakan SDK OSS untuk bahasa pemrograman umum. Untuk informasi lebih lanjut tentang cara menyimpan gambar yang telah diproses menggunakan SDK lainnya, lihat Ikhtisar SDK.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.GenericResult;
import com.aliyun.oss.model.ProcessObjectRequest;
import java.util.Formatter;
public class Demo {
public static void main(String[] args) throws Throwable {
// Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint sebenarnya Anda.
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. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap.
String sourceImage = "exampleimage.png";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan.
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 menjadi tinggi dan lebar 100 piksel.
StringBuilder sbStyle = new StringBuilder();
Formatter styleFormatter = new Formatter(sbStyle);
String styleType = "image/resize,m_fixed,w_100,h_100";
// Beri nama gambar yang telah diproses example-resize.png dan simpan gambar ke bucket tempat gambar sumber disimpan.
// Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap.
String targetImage = "example-resize.png";
styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
BinaryUtil.toBase64String(targetImage.getBytes()),
BinaryUtil.toBase64String(bucketName.getBytes()));
System.out.println(sbStyle.toString());
ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
GenericResult processResult = ossClient.processObject(request);
String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
processResult.getResponse().getContent().close();
System.out.println(json);
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda berhasil 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();
}
}
}
}<?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 ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Atur 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. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek sumber. Contoh: exampledir/exampleobject.jpg. Jalur lengkap tidak boleh mencakup nama bucket.
$object = "exampledir/exampleobject.jpg";
// Tentukan jalur lengkap objek tujuan. Contoh: example-new.jpg.
$save_object = "example-new.jpg";
function base64url_encode($data)
{
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Jika gambar sumber tidak ada di bucket yang ditentukan, unggah gambar ke bucket.
// $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");
// Ubah ukuran gambar menjadi lebar dan tinggi tetap 100 px, lalu putar sebesar 90 derajat.
$style = "image/resize,m_fixed,w_100,h_100/rotate,90";
$process = $style.
'|sys/saveas'.
',o_'.base64url_encode($save_object).
',b_'.base64url_encode($bucket);
// Beri nama gambar yang telah diproses example-new.png dan simpan ke bucket saat ini.
$result = $ossClient->processObject($bucket, $object, $process);
// Cetak hasil pemrosesan.
print($result);const OSS = require('ali-oss');
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket Anda.
bucket: 'yourbucketname'
});
const sourceImage = 'sourceObject.png';
const targetImage = 'targetObject.jpg';
async function processImage(processStr, targetBucket) {
const result = await client.processObjectSave(
sourceImage,
targetImage,
processStr,
targetBucket
);
console.log(result.res.status);
}
// Ubah ukuran gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/resize,m_fixed,w_100,h_100", "target bucket")
// Potong gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/crop,w_100,h_100,x_100,y_100,r_1", "target bucket")
// Putar gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/rotate,90", "target bucket")
// Tajamkan gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/sharpen,100", "target bucket")
// Tambahkan watermark ke gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", "target bucket")
// Konversi format gambar dan konfigurasikan bucket tujuan yang digunakan untuk menyimpan gambar yang telah diproses.
processImage("image/format,jpg", "target bucket")# -*- coding: utf-8 -*-
import os
import base64
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 endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"
# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Tentukan nama bucket tempat gambar sumber disimpan.
source_bucket_name = 'srcbucket'
# Tentukan nama bucket tempat Anda ingin menyimpan gambar yang telah diproses. Bucket harus berada di wilayah yang sama dengan bucket tempat gambar sumber disimpan.
target_bucket_name = 'destbucket'
# Tentukan nama gambar sumber. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: example/example.jpg.
source_image_name = 'example/example.jpg'
# Ubah ukuran gambar menjadi 100 × 100 piksel.
style = 'image/resize,m_fixed,w_100,h_100'
# Tentukan nama gambar yang telah diproses. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
target_image_name = 'exampledir/example.jpg'
process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_image_name))),
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result)// fromBucket menentukan nama bucket sumber dan toBucket menentukan nama bucket tujuan.
// fromObjectKey menentukan nama objek sumber. toObjectkey menentukan nama objek tujuan. Nama objek sumber dan objek tujuan harus berupa jalur lengkap yang mencakup akhiran nama objek gambar. Contoh: abc/efg/123.jpg.
// action menentukan tindakan IMG yang akan dilakukan, seperti "image/resize,m_lfit,w_100,h_100" dalam contoh sebelumnya.
ImagePersistRequest request = new ImagePersistRequest(fromBucket,fromObjectKey,toBucket,toObjectkey,action);
OSSAsyncTask task = oss.asyncImagePersist(request, new OSSCompletedCallback<ImagePersistRequest, ImagePersistResult>() {
@Override
public void onSuccess(ImagePersistRequest request, ImagePersistResult result) {
// callback sukses
log.i("info", "Sukses");
}
@Override
public void onFailure(ImagePersistRequest request, ClientException clientException, ServiceException serviceException) {
// Tangani pengecualian permintaan.
if (clientException != null) {
// Tangani pengecualian sisi klien, seperti pengecualian jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Tangani pengecualian sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});package main
import (
"encoding/base64"
"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.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya Anda.
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. Tentukan wilayah sebenarnya.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Tentukan versi algoritma 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 sumber disimpan. Contoh: srcbucket.
bucketName := "SourceBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Tentukan nama gambar sumber. Jika gambar sumber tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: example/example.jpg.
sourceImageName := "yourObjectName"
// Tentukan nama bucket tempat Anda ingin menyimpan gambar yang telah diproses. Bucket harus berada di wilayah yang sama dengan bucket tempat gambar sumber disimpan.
targetBucketName := "TargetBucketName"
// Tentukan nama gambar yang telah diproses. Jika gambar yang telah diproses tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
targetImageName := "TargetObjectName"
// Ubah ukuran gambar menjadi 100 x 100 piksel dan simpan gambar ke bucket tertentu.
style := "image/resize,m_fixed,w_100,h_100"
process := fmt.Sprintf("%s|sys/saveas,o_%v,b_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))
result, err := bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
}
OSSImagePersistRequest *request = [OSSImagePersistRequest new];
// Tentukan nama bucket tempat gambar sumber disimpan.
request.fromBucket = @"srcbucket";
// Tentukan nama gambar sumber. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/src.jpg.
request.fromObject = @"exampledir/src.jpg";
// Tentukan nama bucket tempat gambar yang telah diproses disimpan. Bucket harus berada di wilayah yang sama dengan bucket tempat gambar sumber disimpan.
request.toBucket = @"destbucket";
// Tentukan nama gambar yang telah diproses.
request.toObject = @"exampledir/dest.jpg";
// Ubah ukuran gambar secara proporsional menjadi lebar 100 piksel dan simpan gambar yang telah diproses ke bucket yang ditentukan.
request.action = @"image/resize,w_100";
// request.action = @"resize,w_100";
OSSTask * getTask = [client imageActionPersist:request];
[getTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
return nil;
}];
// [getTask waitUntilFinished];#include <alibabacloud/oss/OssClient.h>
#include <sstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan nama gambar sumber. Jika gambar tidak disimpan di direktori root bucket, awali nama gambar dengan jalur ke gambar. Contoh: example/example.jpg. */
std::string SourceObjectName = "example/example.jpg";
/* Tentukan nama gambar yang telah diproses. Jika gambar tidak disimpan di direktori root bucket, awali nama gambar dengan jalur ke gambar. Contoh: exampledir/example.jpg. */
std::string TargetObjectName = "exampledir/example.jpg";
/* Inisialisasi sumber daya seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Ubah ukuran gambar menjadi tinggi dan lebar 100 piksel dan simpan gambar ke bucket tempat gambar sumber disimpan. */
std::string Process = "image/resize,m_fixed,w_100,h_100";
std::stringstream ss;
ss << Process
<<"|sys/saveas"
<< ",o_" << Base64EncodeUrlSafe(TargetObjectName)
<< ",b_" << Base64EncodeUrlSafe(BucketName);
ProcessObjectRequest request(BucketName, SourceObjectName, ss.str());
auto outcome = client.ProcessObject(request);
if (outcome.isSuccess()) {
std::cout << "Gambar berhasil diproses." << std::endl;
} else {
std::cout << "Gagal memproses gambar. Kode kesalahan: " << outcome.error().Code()
<< ", Pesan: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* Lepaskan sumber daya seperti sumber daya jaringan. */
ShutdownSdk();
return 0;
}Gunakan RESTful API
Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil operasi API RESTful. Untuk memanggil API RESTful secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda.
Saat menggunakan parameter saveas, Anda harus menyertakan opsi berikut:
Opsi | Deskripsi |
o | Nama objek tempat Anda ingin menyimpan gambar yang telah diproses. Nilai opsi ini harus dienkripsi Base64 yang aman untuk URL. Untuk informasi lebih lanjut, lihat Enkode watermark. |
b | Nama bucket tempat Anda ingin menyimpan gambar yang telah diproses. Nilai opsi ini harus dienkripsi Base64 yang aman untuk URL. Jika opsi ini tidak ditentukan, gambar yang telah diproses disimpan ke bucket saat ini. |
Anda dapat menggunakan salah satu metode berikut untuk memproses gambar dan menyimpan gambar yang telah diproses ke bucket tertentu:
Kode sampel berikut memberikan contoh cara mengonfigurasi parameter IMG untuk memproses gambar dan menyimpan gambar yang telah diproses ke bucket tertentu:
POST /ObjectName?x-oss-process HTTP/1.1 Host: oss-example.oss.aliyuncs.com Content-Length: 247 Date: Fri, 04 May 2012 03:21:12 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e // Ubah ukuran gambar sumber bernama test.jpg secara proporsional menjadi lebar 100 piksel dan simpan gambar yang telah diproses ke bucket bernama test. x-oss-process=image/resize,w_100|sys/saveas,o_dGVzdC5qcGc,b_dGVzdAKode sampel berikut memberikan contoh cara menggunakan gaya gambar untuk memproses gambar dan menyimpan gambar yang telah diproses ke bucket tertentu:
POST /ObjectName?x-oss-process HTTP/1.1 Host: oss-example.oss.aliyuncs.com Content-Length: 247 Date: Fri, 04 May 2012 03:22:13 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e // Gunakan gaya gambar bernama examplestyle untuk memproses gambar sumber bernama test.jpg dan simpan gambar yang telah diproses ke bucket bernama test. x-oss-process=style/examplestyle|sys/saveas,o_dGVzdC5qcGc,b_dGVzdA