腾讯云COS数据万象,文字水印使用的是URL 安全的 Base64 编码
- // base64解码
- export const URLSafeBase64 = {
- encode: (str) => {
- // 将字符串转换为 UTF-8 编码的字节数组
- let utf8Bytes = new TextEncoder().encode(str);
-
- // 将字节数组转换为 Base64 编码的字符串
- let base64Str = btoa(String.fromCharCode(...utf8Bytes));
-
- // 按照 Base64 编码规则,它会被编码为 "SGVsbG8=". 注意末尾的 "=" 补位符。
- // 如果使用 URL 安全的 Base64 编码,它会被编码为 "SGVsbG8",没有补位符。在解码时,需要根据编码时使用的方式来添加或去掉补位符。
- // 替换不安全的字符并去掉补位符
- return base64Str.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
- },
- decode: (encodedStr) => {
- // 添加补位符并替换安全的字符
- encodedStr = encodedStr.replace(/-/g, "+").replace(/_/g, "/");
- // 在这里使用 while 循环的原因是为了确保添加的补位符数量正确。
- // 因为在某些情况下,需要添加多个 "=" 补位符,而使用 if 语句只能添加一个 "="。比如,如果编码后的字符串长度为 2,那么需要添加两个 "=" 补位符,才能使字符串长度变为 4。
- while (encodedStr.length % 4) {
- encodedStr += "=";
- }
-
- // 将 Base64 编码的字符串转换为字节数组
- let base64Bytes = Uint8Array.from(atob(encodedStr), (c) => c.charCodeAt(0));
-
- // 将字节数组转换为 UTF-8 编码的字符串
- return new TextDecoder().decode(base64Bytes);
- },
- }
使用场景
使用腾讯云COS数据万象图片水印功能,自定义给图片加水印
- >>> URLSafeBase64.encode("我可以自定义去设置文字水印")
- <<< '5oiR5Y-v5Lul6Ieq5a6a5LmJ5Y676K6-572u5paH5a2X5rC05Y2w'
谢谢分享
服务器产品使用多了有个缺点就是费钱
好久不见!