OSS Image Processing (IMG) memungkinkan Anda mengubah ukuran, memotong, memutar, dan mentransformasi gambar yang disimpan di bucket OSS secara langsung melalui permintaan HTTP GET standar. Parameter IMG ditentukan dalam query string URL objek gambar.
Jika daftar kontrol akses (ACL) objek gambar bersifat privat, hanya pengguna yang berwenang yang dapat mengaksesnya.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengunggah setidaknya satu objek gambar ke bucket OSS.
Memasang dan mengonfigurasi OSS iOS SDK di proyek Anda.
Terapkan pemrosesan gambar saat mengunduh gambar
Akses anonim
Gunakan presignPublicURLWithBucketName:withObjectKey:withParameters: untuk menghasilkan URL publik yang menyertakan parameter IMG. Pendekatan ini hanya berlaku untuk objek dengan ACL baca-publik.
OSSTask *task = [client presignPublicURLWithBucketName:@"examplebucket"
withObjectKey:@"exampledir/example.jpg"
withParameters:@{@"x-oss-process": @"image/resize,w_50"}];
[task continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"download image success!");
OSSGetObjectResult *getResult = task.result;
NSLog(@"download image data: %@", getResult.downloadedData);
} else {
NSLog(@"download object failed, error: %@", task.error);
}
return nil;
}];Nilai parameter x-oss-process mengikuti format image/<action>,<key>_<value>. Sebagai contoh, image/resize,w_50 mengubah ukuran gambar menjadi lebar 50 piksel.
Akses terotorisasi
Untuk objek dengan ACL privat, atur request.xOssProcess pada OSSGetObjectRequest untuk menerapkan parameter IMG saat mengunduh.
OSSGetObjectRequest *request = [OSSGetObjectRequest new];
// Bucket yang berisi gambar
request.bucketName = @"examplebucket";
// Jalur lengkap ke gambar. Jika gambar berada di root bucket, abaikan awalan direktori.
request.objectKey = @"exampledir/example.jpg";
// image/resize,m_lfit,w_100,h_100
// m_lfit → sesuaikan gambar dalam kotak pembatas, pertahankan rasio aspek
// w_100 → lebar maksimum: 100 px
// h_100 → tinggi maksimum: 100 px
request.xOssProcess = @"image/resize,m_lfit,w_100,h_100";
OSSTask *getTask = [client getObject:request];
[getTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"download image success!");
OSSGetObjectResult *getResult = task.result;
NSLog(@"download image data: %@", getResult.downloadedData);
} else {
NSLog(@"download object failed, error: %@", task.error);
}
return nil;
}];
// Blokir thread pemanggil hingga pengunduhan selesai (opsional):
// [getTask waitUntilFinished];
// Batalkan pengunduhan yang sedang berlangsung (opsional):
// [request cancel];Simpan gambar yang telah diproses ke bucket
Gunakan OSSImagePersistRequest untuk menerapkan operasi IMG dan menulis hasilnya langsung ke bucket tujuan tanpa mengunduh gambar secara lokal.
Bucket tujuan (toBucket) harus berada di Wilayah yang sama dengan bucket sumber (fromBucket).
OSSImagePersistRequest *request = [OSSImagePersistRequest new];
// Gambar sumber
request.fromBucket = @"srcbucket";
request.fromObject = @"exampledir/src.jpg"; // Jalur lengkap, atau cukup "src.jpg" jika berada di root bucket
// Tujuan untuk gambar yang telah diproses (harus berada di Wilayah yang sama dengan fromBucket)
request.toBucket = @"destbucket";
request.toObject = @"exampledir/dest.jpg";
// image/resize,w_100 → ubah ukuran menjadi lebar 100 px, pertahankan rasio aspek
request.action = @"image/resize,w_100";
// request.action = @"resize,w_100";
OSSTask *task = [client imageActionPersist:request];
[task continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
if (!task.error) {
NSLog(@"image saved successfully");
} else {
NSLog(@"failed to save image, error: %@", task.error);
}
return nil;
}];Hasilkan URL yang ditandatangani dengan parameter IMG
Untuk objek gambar privat, parameter IMG harus disertakan dalam signature URL—Anda tidak dapat menambahkannya ke URL yang sudah ditandatangani. Gunakan presignConstrainURLWithBucketName:withObjectKey:withExpirationInterval:withParameters: untuk menghasilkan URL yang ditandatangani yang menyematkan parameter pemrosesan.
NSString *bucketName = @"examplebucket";
NSString *objectKey = @"exampledir/example.jpg";
// Hasilkan URL yang ditandatangani berlaku selama 1.800 detik (30 menit)
// yang mengubah ukuran gambar menjadi lebar 50 px (image/resize,w_50)
OSSTask *task = [_client presignConstrainURLWithBucketName:bucketName
withObjectKey:objectKey
withExpirationInterval:30 * 60
withParameters:@{@"x-oss-process": @"image/resize,w_50"}];
NSLog(@"url: %@", task.result);Langkah selanjutnya
Untuk daftar lengkap operasi IMG yang didukung dan sintaks parameter, lihat parameter IMG.