阿里OSS数据处理图片水印功能

阿里OSS数据处理图片水印功能

官方文档

大概流程:

1、获取存储在OSS中的图片文件路径

2、添加水印,对水印的文字内容通过base64进行编码,文字的内容是必须填写的,其它样式可以默认

3、把添加好水印的图片上传到oss中。

具体实现步骤:

1、创建接口

String generateWatermarkText(String url,String value,WatermarkTextVo watermarkTextVo) throws IOException;

注:watermarkTextVo是对自定义样式的封装

import lombok.Data;

@Data
public class WatermarkTextVo {

    /**
     * @Date: 2021/4/28
     * @描述: 指定文字水印的字体,字体名称需进行Base64编码。
     */
    private WatermarkTextTypeEnum type = WatermarkTextTypeEnum.WQY_ZENHEI;

    /**
     * @Date: 2021/4/28
     * @描述: 指定文字水印的文字颜色,参数值为RGB颜色值。
     */
    private String color = "000000";

    /**
     * @Date: 2021/4/28
     * @描述: 指定文字水印的文字大小。
     */
    private Long size = 40L;

    /**
     * @Date: 2021/4/28
     * @描述: 指定文字水印的阴影透明度。
     */
    private Long shadow = 0L;

    /**
     * @Date: 2021/4/28
     * @描述: 指定文字顺时针旋转角度。
     */
    private int rotate = 0;

    /**
     * @Date: 2021/4/28
     * @描述: 指定是否将文字水印铺满原图。
     */
    private int fill = 0;

    @Override
    public String toString() {
        return ",type_" + type.getMessage() +
                ",color_" + color +
                ",size_" + size +
                ",shadow_" + shadow +
                ",rotate_" + rotate +
                ",fill_" + fill;
    }

2、实现接口,并对这个方法进行书写

/**
   * @描述: 添加水印
   */
@Override
    public String generateWatermarkText(String url,String value,WatermarkTextVo watermarkTextVo) throws IOException {
        url = this.getObjectUrl(url);
        //通过base64对文字内容进行编码
        String baseValue = Base64.encode(value);
        //对生成的编码进行字符串拼接
        String style = "image/watermark,text_"+StrUtil.replace(baseValue,"+","_")+watermarkTextVo.toString();
        return this.byGeneratePreSignedUrl(url,style);
    }


/**
  * @描述: 图片路径处理
  */
private String getObjectUrl(String url) {
        URL objectNameURL = URLUtil.url(url);
        int index = url.indexOf(objectNameURL.getHost()) + objectNameURL.getHost().length() + 1;
        return StrUtil.subSuf(url, index);
    }


/**
  * @描述: 对文件进行处理
  */
private String byGeneratePreSignedUrl(String url, String style) throws IOException {
        // 设置过期时间为10分钟
        OSS ossClient = this.build();
        DateTime expiration = DateUtil.offsetMinute(new Date(), 10);
        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(aliOssClientProperties.getBucketName(), url, HttpMethod.GET);
        req.setExpiration(expiration);
        req.setProcess(style);
        URL signedUrl = ossClient.generatePresignedUrl(req);
        ossClient.shutdown();
        return this.multipartUrl(signedUrl.toString());
    }


3.在控制层进行测试

    @PostMapping("/generateWatermarkText")
    public Result generateWatermarkText() throws IOException {
        WatermarkTextVo watermarkTextVo = new WatermarkTextVo();
        watermarkTextVo.setColor("FFFFFF");
        String s1 = aliOssClient.generateWatermarkText("https://seafoodimg.oss-cn-hangzhou.aliyuncs.com/005cdae8-51fc-4bbf-a499-a3b85bfd7292.jpg","测试",watermarkTextVo);
        return Result.successResult(s1);
    }

版权声明:本文为Hu_Mingxiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。