Image Processing (IMG) は、大規模で安全、低コストで、信頼性の高い画像処理サービスです。 ソース画像が OSS にアップロードされると、簡単な RESTful API を通して、いつでも、どこからでも、どのインターネットデバイス上からでも画像を処理できます。

IMG の詳細については、「Image Processing」をご参照ください。

基本機能

OSS は以下の IMG 機能を提供します。

使用方法

IMG は標準の HTTP GET を使用します。 URL のクエリ文字列に IMG パラメータ を設定します。

イメージオブジェクトの ACL が非公開読み書きの場合、許可されたユーザーだけがアクセスを許可されます。

  • 匿名アクセス

    処理済みイメージにアクセスするには、第 3 レベルドメインで次の形式を使用します。

    http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
    パラメーター 説明
    bucket バケットの名前を指定します。
    endpoint リージョンへのアクセスに使用されるエンドポイントを指定します。
    object 画像オブジェクトの名前を指定します。
    image IMG の予約済み識別子を指定します。
    action 拡大縮小、トリミング、回転など、画像に対する操作を指定します。
    param 画像に対する操作を示すパラメータを指定します。
    • 基本操作

      たとえば、画像を 100 ピクセルの幅に拡大縮小します。 比率に基づいて高さを調整します。

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
    • カスタマイズされた画像スタイル

      処理済みイメージにアクセスするには、第 3 レベルドメインで次の形式を使用します。

      http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=style/<yourStyleName>
      • style: カスタマイズされた画像スタイルの予約済み識別子を指定します。
      • yourStyleName: カスタム画像スタイルの名前を指定します。 OSS コンソールで作成されたルールで指定された名前です。

      例:

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/oss-pic-style-w-100
    • カスケード処理

      カスケード処理では、画像に対して複数の操作を順番に実行します。

      http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction1>,<yourParamValue1>/<yourAction2>,<yourParamValue2>/...

      例:

      http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100/rotate,90
    • HTTPS アクセス

      IMG は HTTPS を通したアクセスをサポートしています。 例:

      https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
  • 許可されたアクセス

    許可されたアクセスにより、画像スタイル、HTTPS アクセス、およびカスケード処理をカスタマイズできます。

    次のコードを実行して IMG の署名付き URL を生成します。

    using Aliyun.OSS;
    using Aliyun.OSS.Common;
    var endpoint = "<yourEndpoint>";
    var accessKeyId = "<yourAccessKeyId>";
    var accessKeySecret = "<yourAccessKeySecret>";
    var bucketName = "<yourBucketName>";
    var objectName = "<yourObjectName>";
    // Create an OSSClient instance.
    var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
    try
    {
        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
        };
        // Generat a signed URI.
        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);
    }
  • SDK を使用したアクセス

    SDK を使用して、画像オブジェクトにアクセスして処理します。

    SDK を使用すると、画像スタイル、HTTPS アクセス、およびカスケード処理をカスタマイズできます。

    • 基本操作

      次のコードを実行して画像に対して基本操作を実行します。

      using System;
      using System.IO;
      using Aliyun.OSS;
      using Aliyun.OSS.Common;
      using Aliyun.OSS.Util;
      namespace ImageProcess
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Program.ImageProcess();
                  Console.ReadKey();
              }
              public static void ImageProcess()
              {
                  var endpoint = "<yourEndpoint>";
                  var accessKeyId = "<yourAccessKeyId>";
                  var accessKeySecret = "<yourAccessKeySecret>";
                  var bucketName = "<yourBucketName>";
                  var objectName = "<yourObjectName>";
                  var localImageFilename = "<yourLocalImageFilename>";
                  var downloadDir = "<yourDownloadDir>";
                  // Create an OSSClient instance.
                  var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                  try
                  {
                      client.PutObject(bucketName, objectName, localImageFilename);
                      // Scale the image.
                      var process = "image/resize,m_fixed,w_100,h_100";
                      var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-resize.jpg", ossObject.Content);
                      // Crop the image.
                      process = "image/crop,w_100,h_100,x_100,y_100,r_1";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-crop.jpg", ossObject.Content);
                      // Rotate the image.
                      process = "image/rotate,90";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-rotate.jpg", ossObject.Content);
                      // Sharpen the image.
                      process = "image/sharpen,100";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-sharpen.jpg", ossObject.Content);
                      // Add watermarks.
                      process = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-watermark.jpg", ossObject.Content);
                      // Convert the image format.
                      process = "image/format,png";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-format.png", ossObject.Content);
                      // Obtain image information.
                      process = "image/info";
                      ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-info.txt", 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 e) {
                  {
                      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);
                      }
                  }
              }
          }
      }
    • 画像スタイルのカスタマイズ

      次のコードを使用して画像スタイルをカスタマイズします。

      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()
              {
                  var endpoint = "<yourEndpoint>";
                  var accessKeyId = "<yourAccessKeyId>";
                  var accessKeySecret = "<yourAccessKeySecret>";
                  var bucketName = "<yourBucketName>";
                  var objectName = "<yourObjectName>";
                  var localImageFilename = "<yourLocalImageFilename>";
                  var downloadDir = "<yourDownloadDir>";
                  // Create an OSSClient instance.
                  var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                  try
                  {
                      client.PutObject(bucketName, objectName, localImageFilename);
                      // Customize the image style: "style/<yourCustomStyleName>".
                      var process = "style/oss-pic-style-w-100";
                      var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-style.jpg", 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);
                      }
                  }
              }
          }
      }
    • カスケード処理

      画像に対してカスケード処理を実行するには、次のコードを使用します。

      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()
              {
                  var endpoint = "<yourEndpoint>";
                  var accessKeyId = "<yourAccessKeyId>";
                  var accessKeySecret = "<yourAccessKeySecret>";
                  var bucketName = "<yourBucketName>";
                  var objectName = "<yourObjectName>";
                  var localImageFilename = "<yourLocalImageFilename>";
                  var downloadDir = "<yourDownloadDir>";
                  // Create an OSSClient instance.
                  var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                  try
                  {
                      client.PutObject(bucketName, objectName, localImageFilename);
                      // Perform cascade operations.
                      var process = "image/resize,m_fixed,w_100,h_100/rotate,90";
                      var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                      WriteToFile(downloadDir + "/sample-style.jpg", 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 ツール

IMG ビューアー (ImageStyleViever) を使用すると、IMG の結果を直接表示できます。