本文介绍通过OssDemo对已上传的图片添加水印、缩放、裁剪等操作。
图片加水印
- 调用逻辑
- 上传一张图片到OSS,在默认的情况下Bucket是sdk-demo,Object是test,OSS的Endpoint是
oss-cn-hangzhou.aliyuncs.com
。 - 根据不同的图片处理方式,在test后面加不同的处理参数,以展示不同的显示效果。
- OssDemo在获取sts_server的地址后发送请求。
- sts_server返回AccessKeyId、AccessKeySecret、SecurityToken、Expiration。
- OssDemo获取这些信息后,调用SDK,构建OssClient,进行下载操作。呈现的效果就是图片处理的效果。不过图片服务的Endpoint是
img-cn-hangzhou.aliyuncs.com
。
- 上传一张图片到OSS,在默认的情况下Bucket是sdk-demo,Object是test,OSS的Endpoint是
- 具体代码
- 单击更多后,到处理图片页面。
- 将之前上传的图片,在右下角加水印,并且大小为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); }
- 调用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度");