Image Processing (IMG) は、Object Storage Service (OSS) が提供する、安全でコスト効率が高く、信頼性の高いイメージ処理サービスで、大量のデータを処理するのに役立ちます。ソースイメージを OSS にアップロードした後、インターネットに接続されたデバイスからいつでもどこでも RESTful API 操作を呼び出してイメージを処理できます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の 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/exampledir.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 パラメーター」をご参照ください。