Image Processing (IMG) は、大規模で安全、低コストで、信頼性の高い画像処理サービスです。 ソース画像が OSS にアップロードされると、簡単な RESTful API を通して、いつでも、どこからでも、どのインターネットデバイス上からでも画像を処理できます。
IMG の詳細については、「Image Processing」をご参照ください。
基本機能
OSS は以下の IMG 機能を提供します。
- ドミナントトーンの取得
- フォーマット変換
- 画像形式の変換
- 内接円の調整
- 向きの調整
- 輝度
- 透かしの追加: 画像、テキスト、および画像とテキストの透かしを別の画像に追加します。
- 画像処理
- 画像処理アクセスルール: 複数の 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 の結果を直接表示できます。