阿里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);
}