すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:IMG

最終更新日:Mar 19, 2025

イメージ処理 (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 パラメーター」をご参照ください。