イメージ処理は、Object Storage Service (OSS) が提供する、スケーラブルで安全、コスト効率が高く、信頼性の高いサービスです。元のイメージを OSS にアップロードした後、シンプルな RESTful API を使用して、いつでも、どこでも、インターネットに接続された任意のデバイスからイメージを処理できます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化 (C SDK)」をご参照ください。
イメージ処理パラメーターを使用したイメージの処理
単一パラメーターでのイメージ処理とローカルファイルへの保存
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケット名に置き換えます (例: examplebucket)。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスに置き換えます。 完全なパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* yourRegion を、バケットが配置されているリージョンに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* aos_string_t 型を char* 文字列で初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
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"));
// 次の 2 つの追加パラメーターを設定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用するかどうかを指定します。 0 は CNAME を使用しないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は apr_pool_t に相当します。 実装コードは apr ライブラリにあります。 */
aos_pool_t *pool;
/* 新しいメモリプールを作成します。 2 番目のパラメーターは NULL で、新しいプールが他のメモリプールから継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。 このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプールからオプションにメモリを割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* クライアントオプション oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
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);
/* イメージを幅と高さが 100 px の固定サイズに変更します。 */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
/* 処理されたイメージをローカルファイルに保存します。 */
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");
}
/* メモリプールを解放します。 これは、リクエスト中にリソースに割り当てられたメモリを解放することと同じです。 */
aos_pool_destroy(pool);
/* 以前に割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}複数パラメーターでのイメージ処理とローカルファイルへの保存
複数のイメージ処理パラメーターを使用する場合は、スラッシュ (/) で区切ります。
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケット名に置き換えます (例: examplebucket)。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスに置き換えます。 完全なパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* yourRegion を、バケットが配置されているリージョンに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* aos_string_t 型を char* 文字列で初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
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"));
// 次の 2 つの追加パラメーターを設定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用するかどうかを指定します。 0 は CNAME を使用しないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は apr_pool_t に相当します。 実装コードは apr ライブラリにあります。 */
aos_pool_t *pool;
/* 新しいメモリプールを作成します。 2 番目のパラメーターは NULL で、新しいプールが他のメモリプールから継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。 このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプールからオプションにメモリを割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* クライアントオプション oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
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);
/* イメージを幅と高さが 100 px の固定サイズに変更し、90 度回転させます。 */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90");
/* 処理されたイメージをローカルファイルに保存します。 */
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");
}
/* メモリプールを解放します。 これは、リクエスト中にリソースに割り当てられたメモリを解放することと同じです。 */
aos_pool_destroy(pool);
/* 以前に割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}イメージスタイルを使用したイメージの処理
イメージスタイルを作成します。
スタイルに複数のイメージ処理パラメーターを含めることで、複雑なイメージ処理操作を迅速に実行できます。詳細については、「イメージスタイル」をご参照ください。
イメージスタイルを使用してイメージを処理します。
#include "oss_api.h" #include "aos_http_io.h" /* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */ const char *endpoint = "yourEndpoint"; /* バケット名に置き換えます (例: examplebucket)。 */ const char *bucket_name = "examplebucket"; /* オブジェクトの完全なパスに置き換えます。 完全なパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 */ const char *object_name = "exampledir/exampleobject.txt"; /* yourRegion を、バケットが配置されているリージョンに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */ const char *region = "yourRegion"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* aos_string_t 型を char* 文字列で初期化します。 */ aos_str_set(&options->config->endpoint, endpoint); /* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */ 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")); // 次の 2 つの追加パラメーターを設定します。 aos_str_set(&options->config->region, region); options->config->signature_version = 4; /* CNAME を使用するかどうかを指定します。 0 は CNAME を使用しないことを示します。 */ options->config->is_cname = 0; /* タイムアウト期間などのネットワークパラメーターを設定します。 */ options->ctl = aos_http_controller_create(options->pool, 0); } int main(int argc, char *argv[]) { /* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { exit(1); } /* メモリ管理用のメモリプール (pool) は apr_pool_t に相当します。 実装コードは apr ライブラリにあります。 */ aos_pool_t *pool; /* 新しいメモリプールを作成します。 2 番目のパラメーターは NULL で、新しいプールが他のメモリプールから継承しないことを示します。 */ aos_pool_create(&pool, NULL); /* オプションを作成して初期化します。 このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */ oss_request_options_t *oss_client_options; /* メモリプールからオプションにメモリを割り当てます。 */ oss_client_options = oss_request_options_create(pool); /* クライアントオプション oss_client_options を初期化します。 */ init_options(oss_client_options); /* パラメーターを初期化します。 */ 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); /* イメージスタイルを指定します。 */ params = aos_table_make(pool, 1); /* yourCustomStyleName を、ステップ 1 で作成したイメージスタイルの名前に置き換えます。 */ apr_table_set(params, OSS_PROCESS, "style/yourCustomStyleName"); /* 処理されたイメージをローカルファイルに保存します。 */ 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"); } /* メモリプールを解放します。 これは、リクエスト中にリソースに割り当てられたメモリを解放することと同じです。 */ aos_pool_destroy(pool); /* 以前に割り当てられたグローバルリソースを解放します。 */ aos_http_io_deinitialize(); return 0; }
イメージ処理パラメーターを含むファイルの署名付き URL の生成
プライベートファイルのアクセス URL には署名が必要です。OSS は署名付き URL にイメージ処理パラメーターを直接追加することをサポートしていないため、プライベートファイルを処理するには、署名にイメージ処理パラメーターを追加する必要があります。
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケット名に置き換えます (例: examplebucket)。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスに置き換えます。 完全なパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* yourRegion を、バケットが配置されているリージョンに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* aos_string_t 型を char* 文字列で初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
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"));
// 次の 2 つの追加パラメーターを設定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用するかどうかを指定します。 0 は CNAME を使用しないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は apr_pool_t に相当します。 実装コードは apr ライブラリにあります。 */
aos_pool_t *pool;
/* 新しいメモリプールを作成します。 2 番目のパラメーターは NULL で、新しいプールが他のメモリプールから継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。 このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプールからオプションにメモリを割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* クライアントオプション oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
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);
/* イメージを幅と高さが 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;
/* 有効期限 (expire_time) を秒単位で指定します。 */
now = apr_time_now();
expire_time = now / 1000000 + 10 * 60;
/* 署名付き URL を生成します。 */
url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
printf("url: %s\n", url_str);
/* メモリプールを解放します。 これは、リクエスト中にリソースに割り当てられたメモリを解放することと同じです。 */
aos_pool_destroy(pool);
/* 以前に割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}関連ドキュメント
イメージ処理でサポートされているパラメーターの詳細については、「イメージ処理」をご参照ください。
イメージ処理の完全なサンプルコードについては、GitHub のサンプルをご参照ください。