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

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

画像処理の完全なコードについては、『xrefGitHubxref』をご参照ください。

基本機能

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

使用方法

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

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

  • 匿名アクセス

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

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

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

      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 を生成します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    // Create an OSSClient instance.
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    // Customize the image style.
    String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
    // Set the expiration time to 10 minutes.
    Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
    GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
    req.setExpiration(expiration);
    req.setProcess(style);
    URL signedUrl = ossClient.generatePresignedUrl(req);
    System.out.println(signedUrl);
    // Close your OSSClient.
    ossClient.shutdown();sClient.shutdown();
  • SDK を使用したアクセス

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

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

    • 基本操作

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

      // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
      String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
      // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
      String accessKeyId = "<yourAccessKeyId>";
      String accessKeySecret = "<yourAccessKeySecret>";
      String bucketName = "<yourBucketName>";
      String objectName = "<yourObjectName>";
      // Create an OSSClient instance.
      OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
      // Scale the image.
      String style = "image/resize,m_fixed,w_100,h_100";
      GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-resize.jpg"));
      // Crop the image.
      style = "image/crop,w_100,h_100,x_100,y_100,r_1";
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-crop.jpg"));
      // Rotate the image.
      style = "image/rotate,90";
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-rotate.jpg"));
      // Sharpen the image.
      style = "image/sharpen,100"; 
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-sharpen.jpg"));
      // Add watermarks.
      style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"; 
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-watermark.jpg"));
      // Convert the image format.
      style = "image/format,png";
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-format.png"));
      // Obtain image information.
      style = "image/info";
      request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      ossClient.getObject(request, new File("example-info.txt"));
      // Close your OSSClient.
      ossClient.shutdown();
    • イメージスタイルのカスタマイズ

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

      // This example uses endpoint China (Hangzhou). Specify the actual endpoint based on your requirements.
      String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
      // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
      String accessKeyId = "<yourAccessKeyId>";
      String accessKeySecret = "<yourAccessKeySecret>";
      String bucketName = "<yourBucketName>";
      String objectName = "<yourObjectName>";
      
      // Create an OSSClient instance.
      OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
      
      // Customize the image style.
      String style = "style/<yourCustomStyleName>";
      GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      
      ossClient.getObject(request, new File("example-new.jpg"));
      
      // Close your OSSClient.
      ossClient.shutdown();
    • カスケード処理

      次のコードを実行して、画像に対してカスケード処理を実行します:

      // This example uses endpoint China (Hangzhou). Specify the actual endpoint based on your requirements.
      String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
      // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
      String accessKeyId = "<yourAccessKeyId>";
      String accessKeySecret = "<yourAccessKeySecret>";
      String bucketName = "<yourBucketName>";
      String objectName = "<yourObjectName>";
      
      // Create an OSSClient instance.
      OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
      
      // Perform cascade operations.
      String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
      GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
      request.setProcess(style);
      
      ossClient.getObject(request, new File("example-new.jpg"));
      
      // Disable the OSSClient.
      ossClient.shutdown();

画像処理の持続性

画像処理の持続性のために次のコードを実行します:
// This example uses endpoint China (Hangzhou). Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance.
To create a RAM account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String sourceImage = "<yourSourceImageName>";

try {
	// Create an OSSClient instance.
	OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

	// Image processing persistence: Scale the image.
	StringBuilder sbStyle = new StringBuilder();
	Formatter styleFormatter = new Formatter(sbStyle);
	String styleType = "image/resize,m_fixed,w_100,h_100";
	String targetImage = "example-resize.png";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	System.out.println(sbStyle.toString());
	ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	GenericResult processResult = ossClient.processObject(request);
	String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

	// Image processing persistence: Clip the image.
	sbStyle.delete(0, sbStyle.length());
	styleType = "image/crop,w_100,h_100,x_100,y_100,r_1";
	targetImage = "example-crop.png";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	System.out.println(sbStyle.toString());
	request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	processResult = ossClient.processObject(request);
	json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

	// Image processing persistence: Rotate the object.
	sbStyle.delete(0, sbStyle.length());
	styleType = "image/rotate,90";
	targetImage = "example-rotate.png";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	processResult = ossClient.processObject(request);
	json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

	// Image processing persistence: Sharpen the image.
	sbStyle.delete(0, sbStyle.length());
	styleType = "image/sharpen,100";
	targetImage = "example-sharpen.png";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	processResult = ossClient.processObject(request);
	json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

	// Image processing persistence: Add watermarks.
	sbStyle.delete(0, sbStyle.length());
	styleType = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
	targetImage = "example-watermark.png";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	processResult = ossClient.processObject(request);
	json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

	// Image processing persistence: Convert the image format.
	sbStyle.delete(0, sbStyle.length());
	styleType = "image/format,jpg";
	targetImage = "example-formatconvert.jpg";
	styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
			BinaryUtil.toBase64String(targetImage.getBytes()),
			BinaryUtil.toBase64String(bucketName.getBytes()));
	request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
	processResult = ossClient.processObject(request);
	json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
	processResult.getResponse().getContent().close();
	System.out.println(json);

} catch (Exception e) {
	e.printStackTrace();
}

IMG ツール

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