安卓端图片加水印
详细解答可以参考官方帮助文档
调用逻辑
上传一张图片到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。
具体代码
点击更多后,到了图片服务处理图片后的页面。
将之前上传的图片,在右下角加水印,并且大小为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.asyncGetObejct(get, new UICallback(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的处理。
赞0
踩1