使用阿里云的oss对图片加水印并且字体大小自适应(阿里云oss暂不支持字体大小自适应)

阿里云OSS不支持字体大小自适应,本文介绍了一种通过获取图片宽度并按比例设置字体大小的方法来实现水印效果。提供获取图片宽度的代码示例,并分享了个人开发经验。

使用阿里云的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"));
  • 上面是最关键的,所以接下来就好做了,下面我做的是通过比例来设置字体大小,下面直接上代码
/**
 * 长边与短边
 * 关于“长边”和“短边”的定义需要特别注意,它们表达的是在缩放中相对比例的长或短。
 * “长边”是指原尺寸与目标尺寸的比值大的那条边;“短边”同理。如原图400 * 200,缩放为800 * 100,
 * (400/800=0.5,200/100=2,0.5 < 2),所以在这个缩放中200那条是长边,400是短边。
 * oss图片缩放规则https://help.aliyun.com/document_detail/44688.html?spm=a2c4g.11186623.2.18.Dn7mii
 */
public class OssImageProcessor implements I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值