需求:对已存在于OSS对象存储空间中的图片添加水印;
依赖:
import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;com.aliyun.ossaliyun-sdk-oss3.10.2 View Code
简单方式(公共读)的水印添加:
/** * @Author qtl * @Description 水印路径 * @Date 15:29 2020/9/29 * @Param [fileName] * @return java.lang.String **/public static String getWaterMarkUrl(String fileName){if (!StringUtils.isEmpty(fileName)) {FileNameMap fileNameMap = URLConnection.getFileNameMap();String contentTypeFor = fileNameMap.getContentTypeFor(fileName);String url = "";if (contentTypeFor != null) {// 图片int index = fileName.indexOf(".");String str = fileName.substring(index + 1);String newstr = str.toLowerCase();//使用toLowerCase()方法实现小写转换//String newstr2 = str.toUpperCase();//使用toUpperCase()方法实现大写转换if(!"gif".equalsIgnoreCase(newstr)){url = "https://OSS对象空间名.oss-cn-hangzhou.aliyuncs.com/文件在OSS对象存储空间中所在目录/" + fileName + "?x-oss-process=image/watermark,image_d3NfZ2cvcGhvdG9BbmRWaWRlby8xNjA1MDc1OTE2OTIzLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzE1,t_100,g_se,x_5,y_5";}else{url = "https://OSS对象空间名.oss-cn-hangzhou.aliyuncs.com/文件在OSS对象存储空间中所在目录/" + fileName; } } return url; }else{ return ""; } }View Code
解释:
传入参数是文件在OSS对象存储空间中的名称;判断文件是否是图片;判断是否是【gif】格式的图片,如果是的话就不加水印了,因为阿里云对于图片水印的处理是获取图片的第一帧进行加水印的,如果是gif的图片就会导致水印加成功了,而gif变成了静态图;【url】路径拼接规则:从【https://】到【fileName】的配置就不多说了,代码里面有文字叙述,重点在【fileName】之后的代码,【+ "?x-oss-process=image/watermark,image_d3NfZ2cvcGhvdG9BbmRWaWRlby8xNjA1MDc1OTE2OTIzLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzE1,t_100,g_se,x_5,y_5"】这段代码就是水印的信息,主要是水印的路径和水印在图片中摆放的位置以及水印的大小、透明度等;【?x-oss-process=image/watermark,image_】这段代码是指此样式是加水印的配置;【d3NfZ2cvcGhvdG9BbmRWaWRlby8xNjA1MDc1OTE2OTIzLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzE1】这段代码是水印图片的路径、水印大小等信息,这个是经过base64处理过的字符串(阿里云官方推荐处理器网址:https://simplycalc.com/base64url-encode.php?spm=a2c4g.11186623.2.21.43eb26037IB7HM),未处理前的数据例子【文件在OSS对象存储空间中所在路径/水印文件全名?x-oss-process=image/resize,P_15】(P是指定水印图片按照主图的比例进行缩放,取值为缩放的百分比,一定要大写)经过base64处理后就如代码中的一串了;【t_100,g_se,x_5,y_5】这段代码中【t】是代表不透明度,当为100时即为不透明,【g_se】是代表水印的在图片上的摆放方位为右下(共有9中,具体的请看下方提供的阿里云官方文档),【x_5,y_5】代表水印水平边距5、中线垂直偏移5;