全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

图片处理

更新时间:2017-06-07 13:26:11

在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度");
本文导读目录