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

本文档介绍了如何使用阿里云OSS服务实现图片加水印功能。主要流程包括获取图片路径、添加水印配置(如字体、颜色、大小等)、上传处理后的图片。通过创建接口generateWatermarkText,对输入的图片URL和水印文字进行处理,利用Base64编码文字并结合WatermarkTextVo对象设置样式,最后生成预签名URL进行图片处理。在控制层进行测试,展示实际应用。
摘要由CSDN通过智能技术生成

阿里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);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值