开发者社区> 问答> 正文

安卓端图片加水印

已解决

展开
收起
2018-01-17 13:10:31 581 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    调用逻辑
    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.asyncGetObejct(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的处理。

    2018-01-22 07:07:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载