mysql图片添加水印_OSS 图片添加水印 image/watermark,image_
需求:对已存在于OSS对象存储空间中的图片添加水印;
依赖:
importcom.aliyun.oss.OSSClient;importcom.aliyun.oss.model.ObjectMetadata;importcom.aliyun.oss.model.PutObjectResult;
com.aliyun.oss
aliyun-sdk-oss
3.10.2
View Code
简单方式(公共读)的水印添加:
/*** @Author qtl
* @Description 水印路径
* @Date 15:29 2020/9/29
* @Param [fileName]
*@returnjava.lang.String
**/
public staticString 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; }
}returnurl;
}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;
复杂方式(私密读)的水印添加:
//方法名什么的就不写了,核心的代码就是这些//endpoint
private static String endpoint="https://oss-cn-hangzhou.aliyuncs.com";//accessKey
private static String accessKeyId="xxx";private static String accessKeySecret="xxx";//OSS对象存储空间名
private static String bucketName="OSS对象空间名";//文件存储目录
private static String fileDir = "文件在OSS对象存储空间中所在目录";privateOSSClient ossClient;publicOSSUpload1() {
ossClient= newOSSClient(endpoint, accessKeyId, accessKeySecret);
}/*** @Author qtl
* @Description 水印路径
* @Date 15:29 2020/9/29
* @Param [fileName]
*@returnjava.lang.String
**/
public staticString getWaterMarkUrl(String fileName){if (!StringUtils.isEmpty(fileName)) {
String[] split= fileName.split("/");//创建OSSClient实例。
OSS ossClient = newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//组装样式代码
String style = "image/watermark,image_d3NfZ2cvcGhvdG9BbmRWaWRlby8xNjAzODc0NjQxMDczLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzE1,t_100,P_10,g_nw,x_20,y_10";//指定签名URL过期时间为10分钟。
Date expiration = new Date(new Date().getTime() + 1000 * 60 * 60 * 24);
GeneratePresignedUrlRequest req= new GeneratePresignedUrlRequest(bucketName, fileDir + split[split.length - 1], HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl=ossClient.generatePresignedUrl(req);//关闭OSSClient。
ossClient.shutdown();returnsignedUrl.toString();
}else{return "";
}
}
View Code
解释:
创建OSS链接;
组装样式代码,其中的难点就是【image/watermark,image_】后跟的经过base64处理后的水印图片信息;
私密读的数据访问链接肯定是要设定访问链接超时时间的;
创建OSS文件访问链接,需要将分别是【endpoint:OSS对象存储服务器所在区路径,这个路径可以在OSS服务器的控制台上找到】,【accessKeyId、accessKeySecret:是访问阿里云API 的密钥,尽量不要使用主密钥,创建一个 RAM 子账号并配上访问资源权限即可】;
将图片样式、超时时间追加到OSS文件访问链接上,然后调用OSS连接对象即可得到正确的加过水印的图片访问路径;
不要忘记关闭OSS链接!
总结(和获取缩略图的总结差不多):
这两种方式的大概区别已经在上面简单的叙述过了,所以简单的讲一下这两种方式的利弊:
第一种方式,简单便捷,但是因为是公共读的权限,因此对于保密性较高的数据不太友好,但是对于保密性不高的数据很好,因为这种请求连接是固定的,也就是说一个文件的访问链接在文件不移动的情况下是一直有效的,可以进行缓存;
第二种,操作复杂,是私密读的权限,安全性较高,但是无法进行缓存操作,因为数据的每次请求都需要对请求连接追加超时时间的,即使是同一个文件的请求每次也都不同,因此有缓存需求的用这种方式行不通;
在加水印时一定要判断是否是【gif】图片(注意:第二种水印添加代码中并未判断是否是gif图片);
mysql图片添加水印_OSS 图片添加水印 image/watermark,image_相关推荐
- android创建图片资源文件,Android图片添加水印图片并把图片保存到文件存储的实现代码...
具体代码如下所示: package zhangphil.test; import android.graphics.Bitmap; import android.graphics.BitmapFact ...
- Android图片添加水印图片并把图片保存到文件存储
Android图片添加水印图片并把图片保存到文件存储 package zhangphil.test;import android.graphics.Bitmap; import android.gra ...
- java为word添加水印,图片水印和文字水印
java为word添加水印,图片水印和文字水印 jdk1.5及以上 所需jar包:Spire.Office.jar 或 Spire.Doc.jar jar包下载:https://www.e-icebl ...
- jacob.jar 操作word文件 添加水印、图片(附查阅Microsoft Office VBA参考文档方式)
jacob.jar 操作word文件 添加水印.图片 1.准备jacob.jar包和dll文件 将jacob.jar引入到工程, 64位: 将jacob-1.17-M2-x64.dll 放在C:\Wi ...
- Java添加水印(图片水印,文字水印)
第一种是添加文字水印: import java.awt.*; import java.awt.image.*; import java.io.*; import javax.swing.*; impo ...
- java给图片加水印_Java 为图片添加水印(图片水印,文字水印)
Java 为图片添加水印(图片水印,文字水印) 2014-07-28·WeaponX 5267 次浏览 ```java import java.awt.Color; import java.awt.F ...
- java实现图片上传并添加水印demo
前段时间研究了图片上传添加水印的效果,现在贴出来供大家参考参考. /** * 图片上传,添加水印 * @param request * @param params * @param values * ...
- 图片的版权保护(添加水印)
/**********************Created by Chen************************** *如果你觉得本人的文章好,要引用请尊重著作人的劳动果实,说明 *出处以 ...
- php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
1. 添加水印 经测试,效果不错,jpg 尤佳: <?php define('WATERMARK_OVERLAY_IMAGE', $_SERVER['DOCUMENT_ROOT'] .'/pub ...
最新文章
- 面试大法——算法、Python、机器学习等笔试面经资源 | 干货收藏
- Android Toolbar 标题居中及字体样式自定义
- 我的2018年终总结
- 为SAP Analytics Cloud的story创建持久化页面
- Python tab 补全
- LeetCode 244. 最短单词距离 II(哈希map+set二分查找)
- JDK1.8 中文文档下载与在线阅读
- 函数 单片机glint_PIC单片机CCS之C语言(#BIT的用法)
- 【LeetCode】217. Contains Duplicate (2 solutions)
- Jmeter---Jmeter安装教程
- 什么是IP地址、IP协议?
- 扩展欧几里得算法——java
- STC 32位8051单片机开发实例教程 一 开发环境搭建
- linux查看磁盘内存cpu
- ipad为什么会闪退?有哪些办法可以修复ipad闪退问题?
- 洛谷 P2168 [NOI2015] 荷马史诗
- SysML精粹学习笔记二
- Android 监控APP是否在后台运行
- 如何进入docker系统
- 【IOS学习之工具学习】sublime text mac(代码编辑器)
热门文章
- s7填表指令att_一些PLC指令的用法,一些PLC编程的经验
- jq中法可以发起ajax请求的方法有,js与jQuery终止正在发送的ajax请求的方法
- C语言----基于CLion搭建C语言开发环境
- Ds918 ds3615 ds3617区别_都9102年了,还问GET和POST的区别
- 【AUCell】单细胞基因集打分
- 伪造ACK实现TCP数据注入
- 测试 lol服务器 稳定性,lol服务器替换测试公告 大区新版客户端换测试开始
- 《高效能人士的七个习惯》读书摘要
- 电脑一打开wps就黑屏_如何解决电脑打开黑屏只显示鼠标的问题
- 2022年暑假ACM热身练习2(总结)