閱讀979 返回首頁    go 阿裏雲


圖片處理__安卓應用示例_最佳實踐_對象存儲 OSS-阿裏雲

在OssDemo中展示了上傳一張圖片後,各種不同的處理。和下載不同的地方是:

  • 使用的是圖片處理的Endpoint。
  • 在Object後麵帶了一些處理參數。

圖片加水印

調用邏輯

  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,獲取這樣的操作命令。
    函數實現片段:

    1. 在ImageService類中
    2. 提供了這樣的一個方法,主要是在原來的object後增加相應的功能需要的參數
    3. //給圖片打上文字水印,除了大小字體之外其他都是默認值,有需要更改的可以參考圖片服務文檔自行調整
    4. public String textWatermark(String object, String text, int size) {
    5. String base64Text = Base64.encodeToString(text.getBytes(), Base64.URL_SAFE | Base64.NO_WRAP);
    6. String queryString = "@watermark=2&type=" + font + "&text=" + base64Text + "&size=" + String.valueOf(size);
    7. Log.d("TextWatermark", object);
    8. Log.d("Text", text);
    9. Log.d("QuerySyring", queryString);
    10. return (object + queryString);
    11. }
  3. 調用SDK的下載接口,進行圖片處理。
    函數實現片段:

    1. getImage(imageService.textWatermark(objectName, "OSS測試", 100), 0, "右下角文字水印,大小100");
    2. public void getImage(final String object, final Integer index, final String method) {
    3. GetObjectRequest get = new GetObjectRequest(bucket, object);
    4. Log.d("Object", object);
    5. OSSAsyncTask task = oss.asyncGetObejct(get, new UICallback<GetObjectRequest, GetObjectResult>(uiDispatcher) {
    6. @Override
    7. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
    8. // 請求成功
    9. InputStream inputStream = result.getObjectContent();
    10. Log.d("GetImage", object);
    11. Log.d("Index", String.valueOf(index));
    12. try {
    13. //防止超過顯示的最大限製
    14. adapter.getImgMap().put(index, new ImageDisplayer(1000, 1000).autoResizeFromStream(inputStream));
    15. adapter.getTextMap().put(index, method + "n" + object);
    16. //需要根據對應的View大小來自適應縮放
    17. addCallback(new Runnable() {
    18. @Override
    19. public void run() {
    20. adapter.notifyDataSetChanged();
    21. }
    22. }, null);
    23. }
    24. catch (IOException e) {
    25. e.printStackTrace();
    26. }
    27. super.onSuccess(request,result);
    28. }

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

圖片縮放、裁剪、旋轉

和加水印的過程類似,在ImageService中增加獲取處理命令的函數,以”object + 處理參數“的形式返回,最後調用SDK的Get Object接口來處理。

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

最後更新:2016-11-23 16:04:10

  上一篇:go 使用已經搭建好的應用服務器__安卓應用示例_最佳實踐_對象存儲 OSS-阿裏雲
  下一篇:go OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲