全部产品
Search
文档中心

Object Storage Service:Pemrosesan gambar (C SDK)

更新时间:Nov 30, 2025

Pemrosesan Gambar adalah layanan yang scalable, aman, hemat biaya, dan sangat andal yang disediakan oleh Object Storage Service (OSS). Setelah mengunggah citra asli ke OSS, Anda dapat memprosesnya kapan saja, dari lokasi mana pun, dan pada perangkat apa pun yang terhubung ke Internet melalui RESTful API yang sederhana.

Catatan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Topik ini membuat instans OSSClient menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization (C SDK).

Proses citra menggunakan parameter pemrosesan gambar

Proses citra dengan satu parameter dan simpan sebagai file lokal

#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda, misalnya examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti dengan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Ganti yourRegion dengan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Konfigurasikan dua parameter tambahan berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Menentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
    aos_pool_t *pool;
    /* Buat memory pool baru. Parameter kedua adalah NULL, yang menunjukkan bahwa pool baru ini tidak mewarisi dari memory pool lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori dari memory pool ke opsi. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    /* Ubah ukuran citra menjadi lebar dan tinggi tetap 100 px. */
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
    /* Simpan citra yang telah diproses ke file lokal. */
    aos_str_set(&file, "yourLocalFileName");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");  
    }

    /* Bebaskan memory pool. Ini setara dengan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Bebaskan sumber daya global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Proses citra dengan beberapa parameter dan simpan sebagai file lokal

Saat menggunakan beberapa parameter pemrosesan gambar, pisahkan parameter tersebut dengan garis miring (/).

#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda, misalnya examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti dengan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Ganti yourRegion dengan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Konfigurasikan dua parameter tambahan berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Menentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
    aos_pool_t *pool;
    /* Buat memory pool baru. Parameter kedua adalah NULL, yang menunjukkan bahwa pool baru ini tidak mewarisi dari memory pool lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori dari memory pool ke opsi. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    /* Ubah ukuran citra menjadi lebar dan tinggi tetap 100 px, lalu putar sebesar 90 derajat. */
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90");
    /* Simpan citra yang telah diproses ke file lokal. */
    aos_str_set(&file, "yourLocalFileName");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");  
    }
    /* Bebaskan memory pool. Ini setara dengan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Bebaskan sumber daya global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Proses citra menggunakan gaya gambar

  1. Buat gaya gambar.

    Anda dapat menyertakan beberapa parameter pemrosesan gambar dalam satu gaya untuk melakukan operasi pemrosesan gambar kompleks secara cepat. Untuk informasi selengkapnya, lihat Image styles.

  2. Proses citra menggunakan gaya gambar.

    #include "oss_api.h"
    #include "aos_http_io.h"
    /* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    const char *endpoint = "yourEndpoint";
    /* Ganti dengan nama bucket Anda, misalnya examplebucket. */
    const char *bucket_name = "examplebucket";
    /* Ganti dengan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
    const char *object_name = "exampledir/exampleobject.txt";
    /* Ganti yourRegion dengan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi cn-hangzhou. */
    const char *region = "yourRegion";
    void init_options(oss_request_options_t *options)
    {
        options->config = oss_config_create(options->pool);
        /* Inisialisasi tipe aos_string_t dengan string char*. */
        aos_str_set(&options->config->endpoint, endpoint);
        /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
        aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
        aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
        // Konfigurasikan dua parameter tambahan berikut.
        aos_str_set(&options->config->region, region);
        options->config->signature_version = 4;
        /* Menentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
        options->config->is_cname = 0;
        /* Atur parameter jaringan, seperti periode timeout. */
        options->ctl = aos_http_controller_create(options->pool, 0);
    }
    int main(int argc, char *argv[])
    {
        /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
        if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
            exit(1);
        }
        /* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
        aos_pool_t *pool;
        /* Buat memory pool baru. Parameter kedua adalah NULL, yang menunjukkan bahwa pool baru ini tidak mewarisi dari memory pool lain. */
        aos_pool_create(&pool, NULL);
        /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
        oss_request_options_t *oss_client_options;
        /* Alokasikan memori dari memory pool ke opsi. */
        oss_client_options = oss_request_options_create(pool);
        /* Inisialisasi opsi klien oss_client_options. */
        init_options(oss_client_options);
        /* Inisialisasi parameter. */
        aos_string_t bucket;
        aos_string_t object;
        aos_string_t file;
        aos_table_t *headers = NULL;
        aos_table_t *params = NULL;
        aos_table_t *resp_headers = NULL;
        aos_status_t *resp_status = NULL;
        aos_str_set(&bucket, bucket_name);
        aos_str_set(&object, object_name);
        /* Tentukan gaya gambar. */
        params = aos_table_make(pool, 1);
        /* Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat pada Langkah 1. */
        apr_table_set(params, OSS_PROCESS, "style/yourCustomStyleName");
        /* Simpan citra yang telah diproses ke file lokal. */
        aos_str_set(&file, "yourLocalFileName");
        resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
        if (aos_status_is_ok(resp_status)) {
            printf("get object to file succeeded\n");
        } else {
            printf("get object to file failed\n");  
        }
        /* Bebaskan memory pool. Ini setara dengan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
        aos_pool_destroy(pool);
        /* Bebaskan sumber daya global yang sebelumnya dialokasikan. */
        aos_http_io_deinitialize();
        return 0;
    }

Hasilkan URL yang ditandatangani untuk file dengan parameter pemrosesan gambar

URL akses untuk file privat harus ditandatangani. Karena OSS tidak mendukung penambahan parameter pemrosesan gambar secara langsung ke URL yang ditandatangani, Anda harus menyertakan parameter pemrosesan gambar tersebut dalam signature untuk memproses file privat.

#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Ganti dengan nama bucket Anda, misalnya examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti dengan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Ganti yourRegion dengan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Konfigurasikan dua parameter tambahan berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Menentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
    aos_pool_t *pool;
    /* Buat memory pool baru. Parameter kedua adalah NULL, yang menunjukkan bahwa pool baru ini tidak mewarisi dari memory pool lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori dari memory pool ke opsi. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *params = NULL;
    aos_http_request_t *req;
    char *url_str;
    apr_time_t now;
    int64_t expire_time; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    /* Ubah ukuran citra menjadi lebar dan tinggi tetap 100 px. */
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
    req = aos_http_request_create(pool);
    req->method = HTTP_GET;
    req->query_params = params;
    /* Tentukan waktu kedaluwarsa (expire_time) dalam detik. */
    now = apr_time_now();
    expire_time = now / 1000000 + 10 * 60;
    /* Hasilkan URL yang ditandatangani. */
    url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
    printf("url: %s\n", url_str);
    /* Bebaskan memory pool. Ini setara dengan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Bebaskan sumber daya global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Referensi

  • Untuk informasi mengenai parameter yang didukung untuk pemrosesan gambar, lihat Image processing.

  • Untuk kode contoh lengkap pemrosesan gambar, lihat contoh di GitHub.