全部產品
Search
文件中心

:圖片處理

更新時間:Feb 28, 2024

本文介紹通過OssDemo對已上傳的圖片添加浮水印、縮放、裁剪等操作。

圖片加浮水印

  • 調用邏輯
    1. 上傳一張圖片到OSS,在預設的情況下Bucket是sdk-demo,Object是test,OSS的Endpoint是oss-cn-hangzhou.aliyuncs.com
    2. 根據不同的圖片處理方式,在test後面加不同的處理參數,以展示不同的顯示效果。
    3. OssDemo在擷取sts_server的地址後發送請求。
    4. sts_server返回AccessKeyId、AccessKeySecret、SecurityToken、Expiration。
    5. OssDemo擷取這些資訊後,調用SDK,構建OssClient,進行下載操作。呈現的效果就是圖片處理的效果。不過圖片服務的Endpoint是img-cn-hangzhou.aliyuncs.com
  • 具體代碼
    1. 單擊更多後,到處理圖片頁面。
    2. 將之前上傳的圖片,在右下角加浮水印,並且大小為100,擷取這樣的操作命令。

      函數實現片段:

      在ImageService類中
       提供了這樣的一個方法,主要是在原來的object後增加相應的功能需要的參數
       //給圖片打上文字浮水印,除了大小字型之外其他都是預設值,有需要更改的可以參考圖片服務文檔自行調整
       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測試", 100), 0, "右下角文字浮水印,大小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.asyncGetObject(get, new UICallback<GetObjectRequest, GetObjectResult>(uiDispatcher) {
               @Override
               public void onSuccess(GetObjectRequest request, GetObjectResult result) {
                   // 請求成功
                   InputStream inputStream = result.getObjectContent();
                   Log.d("GetImage", object);
                   Log.d("Index", String.valueOf(index));
                   try {
                       //防止超過顯示的最大限制
                       adapter.getImgMap().put(index, new ImageDisplayer(1000, 1000).autoResizeFromStream(inputStream));
                       adapter.getTextMap().put(index, method + "\n" + object);
                       //需要根據對應的View大小來自適應縮放
                       addCallback(new Runnable() {
                           @Override
                           public void run() {
                               adapter.notifyDataSetChanged();
                           }
                       }, null);
                   }
                   catch (IOException e) {
                       e.printStackTrace();
                   }
                   super.onSuccess(request,result);
               }

      這裡省略了對下載結果失敗的處理,可以參考源碼中的onFailure的處理。

圖片縮放、裁剪、旋轉

和加浮水印的過程類似,在ImageService中增加擷取處理命令的函數,以“object + 處理參數”的形式返回,最後調用API的GetObject介面來處理。

//縮放
getImage(imageService.resize(objectName, 100, 100), 1, "縮放到100*100");
//裁剪
getImage(imageService.crop(objectName, 100, 100, 9), 2, "右下角裁剪100*100");
//旋轉
getImage(imageService.rotate(objectName, 90), 3, "旋轉90度");