イメージ処理とは、画像がアップロードされて OssDemo に表示されると、その画像が処理されることを意味します。 イメージ処理と画像のダウンロードの違いは、次のとおりです。

  • 画像を処理するため、エンドポイントが使用されます。
  • オブジェクト下にいくつかの処理パラメーターが追加されています。

画像に透かしを入れる

  • 呼び出しのロジック
    1. 画像を OSS にアップロードします。 既定では、バケットは "sdk-demo"、オブジェクトは "test"、OSS のエンドポイントは oss-cn-hangzhou.aliyuncs.com です。
    2. イメージ処理のメソッドに基づき、必要な効果のテスト中に処理パラメーターが追加されます。  
    3. これらの処理パラメーターが選択されると、OssDemo は受信した sts_server のアドレスに要求を送信します。
    4. sts_serverは、AccessKeyId、AccessKeySecret、SecurityToken、および Expirationを OssDemo に返します。
    5. これらすべての情報を受け取ると、OssDemo は SDK を呼び出し、OssClient インスタンスを作成して画像をダウンロードします。 表示される効果は、イメージ処理後に生じる効果です。 ただし、画像サービスのエンドポイントは img-cn-hangzhou.aliyuncs.com です。
  • コード
    1. [詳細]をクリックすると、処理された画像を示すページが表示されます。
    2. 以前にアップロードした画像の右下隅に、サイズ 100 の透かしを追加し、このような操作コマンドを取得します。

      機能実装のスニペット:

      In the ImageService class, 
       A method is provided to add the parameters necessary for a function to the object.
       //Add a text watermark to the image. All parameters other than font size are default values. You can modify the parameter values when necessary according to the image service documentation.
       public String textWatermark(String object, String text, int size) {
           String base64Text = Base64.encodeToString(text.getBytes(), Base64.URL_SAFE | Base64.NO_WRAP);
           String queryString = "@watermark=2&type=" + font + "&text=" + base64Text + "&size=" + String.valueOf(size);
           Log.d("TextWatermark", object);
           Log.d("Text", text);
           Log.d("QuerySyring", queryString);
           return (object + queryString);
       }
    3. SDK ダウンロードインターフェイスを呼び出し、画像を処理します。

      機能実装のスニペット:

       getImage(imageService.textWatermark(objectName, "OSS test", 100), 0, "text watermark at bottom right corner, size: 100");
       public void getImage(final String object, final Integer index, final String method) {
           GetObjectRequest get = new GetObjectRequest(bucket, object);
           Log.d("Object", object);
           OSSAsyncTask task = oss.asyncGetObejct(get, new UICallback<GetObjectRequest, GetObjectResult>(uiDispatcher) {
               @Override
               public void onSuccess(GetObjectRequest request, GetObjectResult result) {
                   // Request succeeded
                   InputStream inputStream = result.getObjectContent();
                   Log.d("GetImage", object);
                   Log.d("Index", String.valueOf(index));
                   try {
                       //Do not exceed the maximum display number.
                       adapter.getImgMap().put(index, new ImageDisplayer(1000, 1000).autoResizeFromStream(inputStream));
                       adapter.getTextMap().put(index, method + "\n" + object);
                       //Perform auto scaling based on the size of the corresponding view.
                       addCallback(new Runnable() {
                           @Override
                           public void run() {
                               adapter.notifyDataSetChanged();
                           }
                       }, null);
                   }
                   catch (IOException e) {
                       e.printStackTrace();
                   }
                   super.onSuccess(request,result);
               }

      結果のダウンロードに失敗した場合の対処方法については、この文書では触れません。

画像の拡大縮小、クロッピング、および回転

これは画像に透かしを入れるプロセスに似ています。 ImageService に、処理コマンドを取得するための関数を追加します。 オブジェクトに処理パラメーターを追加します。 最後に、SDK の Get Object インターフェイスを呼び出して画像を処理します。

//Scaling
getImage(imageService.resize(objectName, 100, 100), 1, "scale to 100*100");
//Cropping
getImage(imageService.crop(objectName, 100, 100, 9), 2, "crop the lower-right corner by 100*100");
//Rotating
getImage(imageService.rotate(objectName, 90), 3, "rotate by 90 degree");