All Products
Search
Document Center

Object Storage Service:Pemrosesan gambar (C# SDK V1)

Last Updated:Mar 21, 2026

Pemrosesan Gambar (IMG) adalah layanan pemrosesan gambar yang aman, hemat biaya, dan sangat andal yang disediakan oleh OSS untuk membantu Anda memproses data dalam jumlah besar. Setelah mengunggah gambar sumber ke OSS, Anda dapat memanggil operasi RESTful API untuk memprosesnya dari perangkat apa pun yang terhubung ke internet.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Memiliki bucket OSS yang berisi gambar sumber

  • Mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET dengan kredensial akses yang valid

Catatan penggunaan

  • Contoh dalam topik ini menggunakan titik akhir publik untuk wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya, lihat Regions and endpoints.

  • Contoh dalam topik ini membuat instans OSSClient menggunakan titik akhir OSS. Untuk membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization.

Siapkan client

Semua contoh dalam topik ini menggunakan kode inisialisasi berikut untuk membuat instans OSSClient. Ganti nilai placeholder dengan nama bucket, nama objek, dan path file lokal aktual Anda sebelum menjalankan contoh apa pun.

using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;

// Titik akhir untuk wilayah tempat bucket Anda berada.
// Contoh: https://oss-cn-hangzhou.aliyuncs.com untuk China (Hangzhou).
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// Baca kredensial akses dari variabel lingkungan.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");

// Bucket yang berisi gambar sumber.
var bucketName = "examplebucket";

// Path objek lengkap. Jika gambar tidak berada di root bucket,
// sertakan awalan direktori. Contoh: exampledir/example.jpg
var objectName = "exampledir/example.jpg";

// Path lokal tempat gambar hasil pemrosesan akan disimpan.
var localImageFilename = "D:\\localpath\\example.jpg";

// ID wilayah untuk bucket. Contoh: cn-hangzhou untuk China (Hangzhou).
const string region = "cn-hangzhou";

// Buat instans ClientConfiguration dan gunakan algoritma signature V4.
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;

// Buat instans OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

Metode pembantu yang digunakan oleh semua contoh unduh untuk menulis aliran respons ke file lokal:

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 untuk memproses gambar

Teruskan string parameter IMG ke GetObjectRequest untuk menerapkan pemrosesan gambar saat mengunduh objek. Gambar hasil pemrosesan dikembalikan dalam tanggapan dan disimpan secara lokal — objek asli di OSS tidak berubah.

Contoh 1: Terapkan satu parameter IMG

Contoh ini mengubah ukuran gambar menjadi 100x100 piksel menggunakan mode tetap dan menyimpan hasilnya secara lokal.

namespace Samples
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Lihat bagian "Set up the client" untuk kode inisialisasi.

            try
            {
                // Ubah ukuran gambar menjadi 100x100 piksel.
                var process = "image/resize,m_fixed,w_100,h_100";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                WriteToFile(localImageFilename, ossObject.Content);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
    }
}

Contoh 2: Terapkan beberapa parameter IMG secara berurutan

Contoh ini menerapkan tiga operasi terpisah — ubah ukuran, potong, dan putar — masing-masing dalam permintaan terpisah. Setiap hasil disimpan ke path lokal yang sama, dengan hasil terbaru menimpa hasil sebelumnya.

namespace Samples
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Lihat bagian "Set up the client" untuk kode inisialisasi.
            // Jika gambar belum ada di bucket, unggah terlebih dahulu:
            // client.PutObject(bucketName, objectName, localImageFilename);

            try
            {
                // Ubah ukuran gambar menjadi 100x100 piksel.
                var process = "image/resize,m_fixed,w_100,h_100";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                WriteToFile(localImageFilename, ossObject.Content);

                // Potong area 100x100 dimulai dari 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 gambar 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}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
    }
}

Contoh 3: Rangkai beberapa parameter IMG dalam satu permintaan

Rangkai beberapa operasi menjadi satu permintaan dengan memisahkan parameter menggunakan garis miring (/). Contoh ini mengubah ukuran gambar menjadi 100x100 piksel lalu memutarnya 90 derajat dalam satu panggilan.

namespace ImageProcessCascade
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.ImageProcessCascade();
            Console.ReadKey();
        }

        public static void ImageProcessCascade()
        {
            // Lihat bagian "Set up the client" untuk kode inisialisasi.
            // Jika gambar belum ada di bucket, unggah terlebih dahulu:
            // client.PutObject(bucketName, objectName, localImageFilename);

            try
            {
                // Ubah ukuran menjadi 100x100 piksel, lalu putar 90 derajat — dalam satu permintaan.
                var process = "image/resize,m_fixed,w_100,h_100/rotate,90";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                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}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
    }
}

Gunakan gaya gambar untuk memproses gambar

Gaya gambar mengemas beberapa parameter IMG sehingga Anda dapat menerapkannya dengan satu pengenal. Buat gaya di Konsol OSS sebelum menggunakannya dalam kode. Untuk informasi selengkapnya, lihat Image styles.

Contoh ini menerapkan gaya gambar kustom pada gambar sumber.

namespace ImageProcessCustom
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.ImageProcessCustomStyle();
            Console.ReadKey();
        }

        public static void ImageProcessCustomStyle()
        {
            // Lihat bagian "Set up the client" untuk kode inisialisasi.
            // Jika gambar belum ada di bucket, unggah terlebih dahulu:
            // client.PutObject(bucketName, objectName, localImageFilename);

            try
            {
                // Ganti yourCustomStyleName dengan nama gaya gambar
                // yang Anda buat di Konsol OSS.
                var process = "style/yourCustomStyleName";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                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}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
    }
}

Buat URL yang ditandatangani yang mencakup parameter IMG

Objek privat memerlukan URL yang ditandatangani untuk diakses. Untuk menerapkan pemrosesan gambar pada objek privat, sertakan parameter IMG dalam bidang Process dari GeneratePresignedUriRequest — hal ini menyematkan parameter tersebut ke dalam signature itu sendiri.

Jangan tambahkan parameter IMG langsung ke URL yang ditandatangani setelah URL tersebut dibuat. Signature mencakup seluruh permintaan, dan mengubah URL setelah penandatanganan akan membuatnya tidak valid.

Contoh ini membuat URL yang ditandatangani yang mengubah ukuran gambar menjadi 100x100 piksel. URL tersebut kedaluwarsa setelah satu jam.

using Aliyun.OSS;
using Aliyun.OSS.Common;

// Titik akhir untuk wilayah tempat bucket Anda berada.
var endpoint = "yourEndpoint";

// Baca kredensial akses dari variabel lingkungan.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");

var bucketName = "examplebucket";
var objectName = "exampledir/exampledir.jpg";

const string region = "cn-hangzhou";

var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;

var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

try
{
    // Parameter IMG disertakan dalam signature melalui bidang Process,
    // sehingga dicakup oleh penandatanganan URL dan tidak dapat diubah setelahnya.
    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
    };

    // Buat 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}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}

Langkah berikutnya