Pemrosesan Citra (IMG) adalah layanan pemrosesan citra yang aman, hemat biaya, dan sangat andal yang disediakan oleh Object Storage Service (OSS) untuk membantu Anda memproses data dalam jumlah besar. Setelah mengunggah citra sumber ke OSS, Anda dapat memanggil operasi RESTful API untuk memproses citra tersebut dari perangkat apa pun yang terhubung ke Internet, kapan saja dan di mana saja.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Gunakan parameter IMG untuk memproses citra
Gunakan satu parameter IMG untuk memproses citra dan simpan hasilnya ke komputer lokal Anda.
using System; using System.IO; using Aliyun.OSS; using Aliyun.OSS.Common; using Aliyun.OSS.Util; namespace Samples { public class Program { public static void Main(string[] args) { // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan nama citra sumber. Jika citra sumber tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap objek citra tersebut. Contoh: exampledir/example.jpg. var objectName = "exampledir/example.jpg"; // Tentukan path lokal citra sumber. var localImageFilename = "D:\\localpath\\example.jpg"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Ubah ukuran citra menjadi 100 × 100 piksel. var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // Tentukan nama citra yang telah diproses. WriteToFile(localImageFilename, ossObject.Content); } catch (OssException ex) { Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message); } } private static void WriteToFile(string filePath, Stream stream) { using (var requestStream = stream) { using (var fs = File.Open(filePath, FileMode.OpenOrCreate)) { IoUtils.WriteTo(stream, fs); } } } } }Gunakan parameter IMG yang berbeda untuk memproses citra dan simpan masing-masing hasilnya ke komputer lokal Anda.
using System; using System.IO; using Aliyun.OSS; using Aliyun.OSS.Common; using Aliyun.OSS.Util; namespace Samples { public class Program { public static void Main(string[] args) { // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan nama citra sumber. Jika citra sumber tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap objek citra tersebut. Contoh: exampledir/example.jpg. var objectName = "exampledir/example.jpg"; // Tentukan path lokal citra sumber. var localImageFilename = "D:\\localpath\\example.jpg"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Jika citra tidak ada di bucket yang ditentukan, unggah citra tersebut ke bucket. // client.PutObject(bucketName, objectName, localImageFilename); // Ubah ukuran citra menjadi 100 × 100 piksel. var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // Tentukan nama citra yang telah diproses. WriteToFile(localImageFilename, ossObject.Content); // Potong citra menjadi ukuran 100 × 100 piksel mulai dari posisi yang ditentukan oleh koordinat (100, 100). process = "image/crop,w_100,h_100,x_100,y_100"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(localImageFilename , ossObject.Content); // Putar citra sebesar 90 derajat. process = "image/rotate,90"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(localImageFilename , ossObject.Content); } catch (OssException ex) { Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message); } } private static void WriteToFile(string filePath, Stream stream) { using (var requestStream = stream) { using (var fs = File.Open(filePath, FileMode.OpenOrCreate)) { IoUtils.WriteTo(stream, fs); } } } } }Gunakan beberapa parameter IMG untuk memproses citra dan simpan hasilnya ke komputer lokal Anda.
Kode berikut menunjukkan contoh penggunaan beberapa parameter IMG untuk memproses citra. Parameter IMG dipisahkan dengan tanda slash (/).
using System; using System.IO; using Aliyun.OSS; using Aliyun.OSS.Common; using Aliyun.OSS.Util; namespace ImageProcessCascade { class Program { static void Main(string[] args) { Program.ImageProcessCascade(); Console.ReadKey(); } public static void ImageProcessCascade() { // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket. var bucketName = "examplebucket"; // Tentukan nama citra sumber. Jika citra sumber tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap objek citra tersebut. Contoh: exampledir/example.jpg. var objectName = "exampledir/example.jpg"; // Tentukan path lokal citra sumber. var localImageFilename = "D:\\localpath\\example.jpg"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. const string region = "cn-hangzhou"; // Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda. var conf = new ClientConfiguration(); // Gunakan algoritma signature V4. conf.SignatureVersion = SignatureVersion.V4; // Buat instans OSSClient. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Jika citra sumber tidak ada di bucket yang ditentukan, unggah citra tersebut ke bucket. // client.PutObject(bucketName, objectName, localImageFilename); // Setelah mengubah ukuran citra menjadi 100 × 100 piksel, putar citra sebesar 90 derajat. var process = "image/resize,m_fixed,w_100,h_100/rotate,90"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // Tentukan nama citra yang telah diproses. WriteToFile(localImageFilename, ossObject.Content); Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process); } catch (OssException ex) { Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message); } } private static void WriteToFile(string filePath, Stream stream) { using (var requestStream = stream) { using (var fs = File.Open(filePath, FileMode.OpenOrCreate)) { IoUtils.WriteTo(stream, fs); } } } } }
Gunakan gaya citra untuk memproses citra
Anda dapat mengenkapsulasi beberapa parameter IMG ke dalam sebuah gaya, lalu menggunakan gaya tersebut untuk memproses citra. Untuk informasi selengkapnya, lihat Gaya citra. Kode berikut menunjukkan contoh penggunaan gaya citra untuk memproses citra:
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace ImageProcessCustom
{
class Program
{
static void Main(string[] args)
{
Program.ImageProcessCustomStyle();
Console.ReadKey();
}
public static void ImageProcessCustomStyle()
{
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan nama citra sumber. Jika citra sumber tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap objek citra tersebut. Contoh: exampledir/example.jpg.
var objectName = "exampledir/example.jpg";
// Tentukan path lokal citra sumber.
var localImageFilename = "D:\\localpath\\example.jpg";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Jika citra sumber tidak ada di bucket yang ditentukan, unggah citra tersebut ke bucket.
// client.PutObject(bucketName, objectName, localImageFilename);
// Gunakan gaya citra untuk memproses citra. Pada contoh ini, ganti yourCustomStyleName dengan nama gaya citra yang telah Anda buat di Konsol OSS.
var process = "style/yourCustomStyleName";
var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
// Tentukan nama citra yang telah diproses.
WriteToFile(localImageFilename, ossObject.Content);
Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process);
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message);
}
}
private static void WriteToFile(string filePath, Stream stream)
{
using (var requestStream = stream)
{
using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
{
IoUtils.WriteTo(stream, fs);
}
}
}
}
}Buat URL objek yang ditandatangani yang mencakup parameter IMG
URL objek privat harus ditandatangani. Parameter IMG tidak dapat langsung ditambahkan di akhir URL yang ditandatangani. Untuk memproses objek citra privat, tambahkan parameter IMG ke dalam signature. Kode berikut menunjukkan contoh cara menambahkan parameter IMG ke dalam signature:
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket tempat citra sumber disimpan. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan nama citra sumber. Jika citra tidak disimpan di direktori root bucket, Anda harus menentukan path lengkap citra tersebut. Contoh: exampledir/example.jpg.
var objectName = "exampledir/exampledir.jpg";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Ubah ukuran citra menjadi 100 × 100 piksel.
var process = "image/resize,m_fixed,w_100,h_100";
var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
{
Expiration = DateTime.Now.AddHours(1),
Process = process
};
// Hasilkan URL yang ditandatangani.
var uri = client.GeneratePresignedUri(req);
Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message);
}Referensi
Untuk kode contoh lengkap IMG, kunjungi GitHub.
Untuk informasi selengkapnya mengenai parameter IMG yang didukung, lihat Parameter IMG.