aly oss技能应用

oss技能应用

阿里云OSS图片压缩

通过OSS图片处理参数,在图片URL后拼接处理参数实现服务端压缩,无需下载原图到本地处理。

typescript 复制代码
/**
 * OSS图片压缩 - 通过URL拼接图片处理参数
 * @param url 原始OSS图片地址
 * @param options 压缩配置
 * @returns 处理后的图片URL
 */
interface OssImageCompressOptions {
  /** 图片质量 1-100 */
  quality?: number;
  /** 目标宽度(px) */
  width?: number;
  /** 目标高度(px) */
  height?: number;
  /** 缩放模式: lfit(等比缩放限制在指定矩形内) | mfit(等比缩放覆盖指定矩形) | fill(裁剪填充) | pad(填充留白) | fixed(强制缩放) */
  mode?: 'lfit' | 'mfit' | 'fill' | 'pad' | 'fixed';
  /** 输出格式: jpg | png | webp | gif | bmp */
  format?: 'jpg' | 'png' | 'webp' | 'gif' | 'bmp';
}

function getOssImageCompressUrl(url: string, options: OssImageCompressOptions = {}): string {
  const { quality = 80, width, height, mode = 'lfit', format } = options;
  const params: string[] = [];

  // 缩放处理
  if (width || height) {
    let resizeParam = `image/resize,m_${mode}`;
    if (width) resizeParam += `,w_${width}`;
    if (height) resizeParam += `,h_${height}`;
    params.push(resizeParam);
  }

  // 质量压缩
  params.push(`image/quality,q_${quality}`);

  // 格式转换
  if (format) {
    params.push(`image/format,${format}`);
  }

  const separator = url.includes('?') ? '&' : '?';
  return `${url}${separator}x-oss-process=${params.join('/')}`;
}

// 应用样例:
// https://xxx.cn/xxx/04141922_b70be276.jpg?x-oss-process=image/format,webp/quality,q_20
//
// 使用示例:
const compressedUrl = getOssImageCompressUrl('https://xxx.cn/xxx/04141922_b70be276.jpg', {
  quality: 20,
  format: 'webp'
});


// 

阿里云oss视频帧

通过OSS视频处理参数,在图片URL后拼接处理参数实现服务端压缩,无需下载原视频到本地处理。

typescript 复制代码
/**
 * OSS视频截帧 - 通过URL拼接视频截帧参数
 * @param url 原始OSS视频地址
 * @param options 截帧配置
 * @returns 截帧图片URL
 *
 */
interface OssVideoSnapshotOptions {
  /** 截帧时间点(ms) */
  time?: number;
  /** 截图宽度(px),如果指定为0则自动计算 */
  width?: number;
  /** 截图高度(px),如果指定为0则自动计算 */
  height?: number;
  /** 截帧模式: fast(关键帧) | accurate(精确帧) */
  mode?: 'fast' | 'accurate';
  /** 输出格式: jpg | png */
  format?: 'jpg' | 'png';
}

function getOssVideoSnapshotUrl(url: string, options: OssVideoSnapshotOptions = {}): string {
  const { time = 0, width = 0, height = 0, mode = 'fast', format = 'jpg' } = options;

  let snapshotParam = `video/snapshot,t_${time},f_${format},m_${mode}`;

  if (width) {
    snapshotParam += `,w_${width}`;
  }
  if (height) {
    snapshotParam += `,h_${height}`;
  }

  const separator = url.includes('?') ? '&' : '?';
  return `${url}${separator}x-oss-process=${snapshotParam}`;
}

// 应用样例:
// https://xxx.cn/xxx/04152014_8defc4e0.mp4?x-oss-process=video/snapshot,t_1000,f_jpg,w_800,h_0,m_fast
//
// 使用示例:
const thumbnailUrl = getOssVideoSnapshotUrl('https://xxx.cn/xxx/04152014_8defc4e0.mp4', {
  time: 1000,
  format: 'jpg',
  width: 800,
  height: 0,
  mode: 'fast'
});
相关推荐
Hilaku9 分钟前
当 AI 一天写完一周的代码,我们还剩什么优势?
前端·javascript·程序员
尘世中一位迷途小书童14 分钟前
无人机航线里的云台角度怎么调?Cesium 做了个视锥 + 鹰眼联动
前端·javascript·数据可视化
思码梁田17 分钟前
CSS display 属性:从元素类型转换到隐藏元素的实用指南
前端·css·display·inline·block·none·inline-block
Csvn18 分钟前
⚡ Vite 依赖预构建(optimizeDeps)的 3 个经典坑:改了源码不生效、新增依赖 404、缓存怎么清都不行
前端
A242073493029 分钟前
Vue3 + TypeScript:后端数据在表格内渲染后进行增删改的完整实现步骤
前端·javascript·typescript
他们叫我 悦儿遥遥雨32 分钟前
.NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑
前端·javascript·.net
用户21816970493039 分钟前
Flutter(九)StatelessWidget StatefullWidget
前端
paopaokaka_luck40 分钟前
基于springboot3+vue3的乡村医生诊疗管理系统(AI助手、协同过滤算法、webSocket实时聊天、Echarts图形化分析)
前端·网络·人工智能·spring boot·websocket·网络协议·echarts
编程风暴41 分钟前
3类人群的数据分析实习类型选择+4条选错红线
java·前端·数据分析
其美杰布-富贵-李41 分钟前
Vue 3 模块导入教程:import、export 与文件组织
前端·javascript·vue.js