イメージ処理 (IMG) は、Object Storage Service (OSS) が提供する安全で費用対効果が高く、信頼性の高い画像処理サービスであり、大量のデータの処理に役立ちます。 ソースイメージを OSS にアップロードした後、RESTful API 操作を呼び出して、インターネットに接続されたデバイス上のイメージをいつでもどこでも処理できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントが使用されています。 OSS と同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
IMG パラメーターを使用して画像を処理する
単一の IMG パラメーターを使用して画像を処理し、ローカルコンピューターに保存する
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) { // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // ソースイメージが格納されているバケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // ソースイメージの名前を指定します。ソースイメージがバケットのルートディレクトリに格納されていない場合は、イメージオブジェクトの完全なパスを指定する必要があります。例: exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // ソースイメージのローカルパスを指定します。 var localImageFilename = "D:\\localpath\\example.jpg"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 const string region = "cn-hangzhou"; // ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。 var conf = new ClientConfiguration(); // 署名アルゴリズム V4 を使用します。 conf.SignatureVersion = SignatureVersion.V4; // OSSClient インスタンスを作成します。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // 画像のサイズを 100 × 100 ピクセルに変更します。 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("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {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); } } } } }
異なる IMG パラメーターを使用して画像を処理し、画像をローカルコンピューターに個別に保存する
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) { // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // ソースイメージが格納されているバケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // ソースイメージの名前を指定します。ソースイメージがバケットのルートディレクトリに格納されていない場合は、イメージオブジェクトの完全なパスを指定する必要があります。例: exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // ソースイメージのローカルパスを指定します。 var localImageFilename = "D:\\localpath\\example.jpg"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 const string region = "cn-hangzhou"; // ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。 var conf = new ClientConfiguration(); // 署名アルゴリズム V4 を使用します。 conf.SignatureVersion = SignatureVersion.V4; // OSSClient インスタンスを作成します。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // 指定されたバケットにイメージが存在しない場合は、イメージをバケットにアップロードします。 // client.PutObject(bucketName, objectName, localImageFilename); // 画像のサイズを 100 × 100 ピクセルに変更します。 var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // 処理された画像の名前を指定します。 WriteToFile(localImageFilename, ossObject.Content); // 座標ペア (100, 100) で指定された位置から開始して、画像を 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); // 画像を 90 度回転させます。 process = "image/rotate,90"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(localImageFilename , ossObject.Content); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {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); } } } } }
複数の IMG パラメーターを使用して画像を処理し、画像をローカルコンピューターに保存する
次のコードは、複数の IMG パラメーターを使用して画像を処理する方法の例を示しています。 IMG パラメーターはスラッシュ (/) で区切られます。
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() { // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // ソースイメージが格納されているバケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // ソースイメージの名前を指定します。ソースイメージがバケットのルートディレクトリに格納されていない場合は、イメージオブジェクトの完全なパスを指定する必要があります。例: exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // ソースイメージのローカルパスを指定します。 var localImageFilename = "D:\\localpath\\example.jpg"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 const string region = "cn-hangzhou"; // ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。 var conf = new ClientConfiguration(); // 署名アルゴリズム V4 を使用します。 conf.SignatureVersion = SignatureVersion.V4; // OSSClient インスタンスを作成します。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // 指定されたバケットにソースイメージが存在しない場合は、イメージをバケットにアップロードします。 // client.PutObject(bucketName, objectName, localImageFilename); // 画像のサイズを 100 × 100 ピクセルに変更した後、画像を 90 度回転させます。 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("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {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); } } } } }
イメージスタイルを使用して画像を処理する
複数の IMG パラメーターをスタイル内にカプセル化し、そのスタイルを使用して画像を処理できます。 詳細については、「イメージスタイル」をご参照ください。次のコードは、イメージスタイルを使用して画像を処理する方法の例を示しています。
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()
{
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// ソースイメージが格納されているバケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// ソースイメージの名前を指定します。ソースイメージがバケットのルートディレクトリに格納されていない場合は、イメージオブジェクトの完全なパスを指定する必要があります。例: exampledir/example.jpg。
var objectName = "exampledir/example.jpg";
// ソースイメージのローカルパスを指定します。
var localImageFilename = "D:\\localpath\\example.jpg";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// 指定されたバケットにソースイメージが存在しない場合は、イメージをバケットにアップロードします。
// client.PutObject(bucketName, objectName, localImageFilename);
// イメージスタイルを使用して画像を処理します。この例では、yourCustomStyleName を 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("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {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);
}
}
}
}
}
IMG パラメーターを含む署名付きオブジェクト URL を生成する
非公開オブジェクトの URL は署名する必要があります。 IMG パラメーターを署名付き URL の末尾に直接追加することはできません。 非公開イメージオブジェクトを処理する場合は、IMG パラメーターを署名に追加します。次のコードは、署名に IMG パラメーターを追加する方法の例を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// ソースイメージが格納されているバケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// ソースイメージの名前を指定します。イメージがバケットのルートディレクトリに格納されていない場合は、イメージの完全なパスを指定する必要があります。例: exampledir/example.jpg。
var objectName = "exampledir/exampledir.jpg";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// 画像のサイズを 100 × 100 ピクセルに変更します。
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
};
// 署名付き URL を生成します。
var uri = client.GeneratePresignedUri(req);
Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
関連情報
IMG の完全なサンプルコードについては、GitHub をご覧ください。
サポートされている IMG パラメーターの詳細については、「IMG パラメーター」をご参照ください。