使用阿里云的oss对图片加水印并且字体大小自适应(阿里云oss暂不支持字体大小自适应)
背景:
首先阿里云oss云对象存储是不能做到字体大小自适应的,因为在开发中我们的图片上传的尺寸是做不到固定大小宽度,有时候很宽,有时候很窄,当我们上传小图片也就是宽度很小一般在500px左右的图片的时候,设置字体大小为10刚好,但是由于字体设置之后为固定大小,那么如果在上传一个宽度为8000px的图片,此时字体就非常小几乎看不见,那么水印的效果就完全没有
参考图片水印接口地址:
阿里云oss图片加水印
具体方案
- 首先通过上面的参考地址的值各个参数的含义
- 在代码中获取到我们的图片的宽度,当然这个获取图片宽度的代码当时在网上搜了很久,博主这次把他放出来,希望能帮助到大家,地址为获取图片信息,但是这个地址没啥作用,因为只能通过浏览器访问,在代码里面不能实现,问了阿里云客服,那边说也不能实现,最后在网上找了很久代码,发现可以使用,下面把代码放出来
try {
GetObjectRequest request = new GetObjectRequest(r.getCatalog() + suffix, String.valueOf(r.getFileId()));
String style = "image/info";
request.setProcess(style);
OSSObject object = client.getObject(request);
InputStream inputStream = object.getObjectContent();
return inputStream;
} catch (Exception e) {
throw new FileRepositoryException(e, FileRepositoryException.FILE_NOT_FOUND);
}
Map<String, LinkedHashMap> imageInfo = JSONUtils.parse(fileRepository.getImageInfo(meta), Map.class);
LinkedHashMap<String, String> imageWidth = imageInfo.get(IMAGEWIDTH);
Integer width = Integer.valueOf(imageWidth.get("value"));
- 以上代码就是获取宽度,记住github上面搜索的写法是通过文件来接受,我是看了下源码然后将流转换为Map集合的
GetObjectRequest request = new GetObjectRequest(r.getCatalog() + suffix, String.valueOf(r.getFileId()));
String style = "image/info";
request.setProcess(style);
ObjectMetadata object1 = client.getObject(request, new File("D://image.txt"));
- 上面是最关键的,所以接下来就好做了,下面我做的是通过比例来设置字体大小,下面直接上代码
public class OssImageProcessor implements I