画像処理は、Object Storage Service (OSS) が提供する、スケーラブルで安全、コスト効率が高く、信頼性の高い画像処理サービスです。画像を OSS にアップロードした後、シンプルな RESTful インターフェイスを使用して、インターネットに接続された任意のデバイスで画像を処理できます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient を作成する場合は、「OssClient インスタンスの作成」をご参照ください。
画像処理パラメーターを使用した画像の処理
単一の画像処理パラメーターを使用した画像の処理
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* ソースイメージを格納するバケットの名前 (例: examplebucket) を指定します。*/
std::string BucketName = "examplebucket";
/* ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/example.jpg) を含めます。*/
std::string ObjectName = "exampledir/example.jpg";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* イメージの幅と高さを 100 px に固定してサイズ変更し、ローカルに保存します。*/
std::string Process = "image/resize,m_fixed,w_100,h_100";
GetObjectRequest request(BucketName, ObjectName);
request.setProcess(Process);
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "Image processed successfully." << std::endl;
} else {
std::cout << "Failed to process image. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}複数の画像処理パラメーターを使用した画像の処理
複数の画像処理パラメーターを使用する場合は、スラッシュ (/) で区切ります。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* ソースイメージを格納するバケットの名前 (例: examplebucket) を指定します。*/
std::string BucketName = "examplebucket";
/* ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/example.jpg) を含めます。*/
std::string ObjectName = "exampledir/example.jpg";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* イメージの幅と高さを 100 px に固定してサイズ変更し、90 度回転させてから、ローカルに保存します。*/
std::string Process = "image/resize,m_fixed,w_100,h_100/rotate,90";
GetObjectRequest request(BucketName, ObjectName);
request.setProcess(Process);
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "Image processed successfully." << std::endl;
} else {
std::cout << "Failed to process image. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}イメージスタイルを使用した画像の処理
イメージスタイルを作成します。
スタイルに複数の画像処理パラメーターを含めることで、複雑な画像処理操作を迅速に実行できます。詳細については、「イメージスタイル」をご参照ください。
イメージスタイルを使用して画像を処理します。
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* OSS アカウント情報を初期化します。*/ /* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/ std::string Endpoint = "yourEndpoint"; /* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/ std::string Region = "yourRegion"; /* ソースイメージを格納するバケットの名前 (例: examplebucket) を指定します。*/ std::string BucketName = "examplebucket"; /* ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/example.jpg) を含めます。*/ std::string ObjectName = "exampledir/example.jpg"; /* ネットワークリソースを初期化します。*/ InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); client.SetRegion(Region); /* イメージスタイルを使用して画像を処理します。yourCustomStyleName を、手順 1 で作成したイメージスタイルの名前に設定します。*/ std::string Process = "style/yourCustomStyleName"; GetObjectRequest request(BucketName, ObjectName); request.setProcess(Process); auto outcome = client.GetObject(request); if (outcome.isSuccess()) { std::cout << "Image processed successfully." << std::endl; } else { std::cout << "Failed to process image. Error code: " << outcome.error().Code() << ", Message: " << outcome.error().Message() << ", RequestId: " << outcome.error().RequestId() << std::endl; } /* ネットワークリソースを解放します。*/ ShutdownSdk(); return 0; }
処理済みイメージの保存
ImgSaveAs 操作を使用して、現在のバケットにイメージを保存できます。次のコードは、処理済みイメージの保存方法を示しています:
#include <alibabacloud/oss/OssClient.h>
#include <sstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名 (例: examplebucket) を指定します。*/
std::string BucketName = "examplebucket";
/* ソースイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: example/example.jpg) を含めます。*/
std::string SourceObjectName = "example/example.jpg";
/* 処理済みイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/example.jpg) を含めます。*/
std::string TargetObjectName = "exampledir/example.jpg";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* イメージの幅と高さを 100 px に固定してサイズ変更し、現在のバケットに保存します。*/
std::string Process = "image/resize,m_fixed,w_100,h_100";
std::stringstream ss;
ss << Process
<<"|sys/saveas"
<< ",o_" << Base64EncodeUrlSafe(TargetObjectName)
<< ",b_" << Base64EncodeUrlSafe(BucketName);
ProcessObjectRequest request(BucketName, SourceObjectName, ss.str());
auto outcome = client.ProcessObject(request);
if (outcome.isSuccess()) {
std::cout << "Image processed successfully." << std::endl;
} else {
std::cout << "Failed to process image. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}画像処理パラメーターを含むファイルの署名付き URL の生成
非公開ファイルに URL を使用してアクセスする場合、署名が必要です。OSS は、署名付き URL に画像処理パラメーターを直接追加することをサポートしていません。非公開イメージを処理するには、署名に画像処理パラメーターを含める必要があります。次のコードに例を示します:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* イメージを格納するバケットの名前 (例: examplebucket) を指定します。*/
std::string BucketName = "examplebucket";
/* イメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/example.jpg) を含めます。*/
std::string ObjectName = "exampledir/example.jpg";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* 画像処理パラメーターを含む署名付き URL を生成します。*/
std::string Process = "image/resize,m_fixed,w_100,h_100";
GeneratePresignedUrlRequest request(BucketName, ObjectName, Http::Get);
request.setProcess(Process);
/* URL の最大有効期間は 32400 秒です。*/
auto outcome = client.GeneratePresignedUrl(request);
if (outcome.isSuccess()) {
std::cout << "Generated presigned URL: " << outcome.result() << std::endl;
} else {
std::cout << "Failed to generate presigned URL. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}