logo
1
37
WeChat Login

【使用指引】在云函数中如何调用腾讯云万象(CI)的图片处理能力#230

Open
created 2025-09-04
Edit

要在云开发 CloudBase 的云函数中调用腾讯云万象(Cloud Infinite,CI)的图片处理能力,你可以利用 CI 提供的 API 或者 SDK。万象是对象存储(COS)的一个功能模块,因此,其图片处理能力通常是通过 COS 的 API 来调用的。

下面我将分步介绍如何在云函数中实现这一功能,并提供一个使用 Node.js 的示例。

1. 了解腾讯云万象图片处理

腾讯云万象的图片处理功能主要有两种调用方式:

  • API 调用:直接向万象的 API 接口发送 HTTP 请求,例如通过 URL 携带处理参数。
  • SDK 调用:使用腾讯云 COS 的 SDK,因为它集成了万象的图片处理功能。

在云函数中,使用 SDK 是更方便和推荐的方式。

2. 前提准备

在编写云函数之前,你需要做好以下准备:

  1. 开通腾讯云服务:确保你已经在腾讯云控制台开通了云开发 CloudBase 和对象存储 COS 服务。万象 CI 服务默认是和 COS 绑定的。
  2. 获取密钥:你需要获取你的云开发环境的 SecretIdSecretKey
    • 登录腾讯云控制台,进入云开发,选择你的环境。
    • 在左侧导航栏中找到环境设置 > 登录授权,这里可以找到你的 SecretId 和 SecretKey。
  3. 安装依赖:在云函数的 package.json 文件中,你需要添加 cos-nodejs-sdk-v5 这个依赖包。

3. 编写云函数代码(Node.js)

下面是一个使用 cos-nodejs-sdk-v5 在云函数中进行图片处理的示例。

示例:裁剪并压缩图片

这个例子演示如何从一个 COS 路径读取图片,进行裁剪(例如,裁剪为 500x500 像素),然后将其作为处理后的图片上传回 COS。

// index.js
const COS = require('cos-nodejs-sdk-v5');

// 腾讯云相关配置,推荐从环境变量中获取,更安全
const secretId = process.env.TENCENTCLOUD_SECRETID;
const secretKey = process.env.TENCENTCLOUD_SECRETKEY;
const bucket = 'your-bucket-name-1250000000'; // 替换为你的存储桶名称和 APPID
const region = 'ap-shanghai'; // 替换为你的存储桶所在地域

const cos = new COS({
  SecretId: secretId,
  SecretKey: secretKey,
});

/**
 * 云函数主入口
 * @param {object} event - 云函数触发事件
 * @param {object} context - 云函数上下文
 */
exports.main = async (event, context) => {
  // 从事件中获取需要处理的图片信息,例如通过 HTTP 触发时
  // const { imageUrl } = event; 

  const sourceKey = 'path/to/source-image.jpg'; // 待处理的图片路径
  const destinationKey = 'path/to/processed-image.jpg'; // 处理后图片保存的路径

  try {
    // 1. 获取图片处理参数
    // 万象图片处理的参数需要拼接在请求 URL 的后面
    // 这里以裁剪为例,参数 d=500x500 表示将图片处理成 500x500
    // 更多参数可以参考腾讯云万象文档:
    // https://cloud.tencent.com/document/product/460/36551
    const ciProcessParams = `?imageMogr2/thumbnail/!500x500r/gravity/Center/crop/500x500`;

    // 2. 使用 COS SDK 的 getObject 方法获取处理后的图片
    // 万象的图片处理能力实际上是作为 COS getObject 的一个参数来调用的
    const res = await cos.getObject({
      Bucket: bucket,
      Region: region,
      Key: sourceKey,
      Query: ciProcessParams
    });
    
    // 3. 将处理后的图片上传到新的路径
    const uploadRes = await cos.putObject({
        Bucket: bucket,
        Region: region,
        Key: destinationKey,
        Body: res.Body, // getObject 返回的 Body 就是处理后的图片数据
        ContentType: 'image/jpeg'
    });

    console.log('图片处理成功,上传到:', destinationKey);
    
    return {
      success: true,
      processedUrl: `https://${bucket}.cos.${region}.myqcloud.com/${destinationKey}`
    };

  } catch (err) {
    console.error('图片处理失败:', err);
    return {
      success: false,
      message: '图片处理失败'
    };
  }
};

4. 部署与配置

  1. 创建云函数:在云开发控制台,创建一个新的云函数。
  2. 上传代码:将上面的 index.js 文件和 package.json 文件打包上传。或者使用 CloudBase CLI 工具进行部署,这样更便捷。
  3. 配置环境变量:在云函数配置中,SecretIdSecretKey 强烈建议通过环境变量进行配置,这样可以避免将敏感信息硬编码到代码中。
    • 在云函数详情页,进入配置,点击编辑
    • 环境变量中,添加 TENCENTCLOUD_SECRETIDTENCENTCLOUD_SECRETKEY,并分别填入你的密钥。
  4. 配置权限:确保你的云函数有权限访问对应的 COS 存储桶。
    • 在云函数配置中,进入权限管理
    • 确保 TencentCloudBaseSCFExecutionRole 角色具有 COS 服务的相关权限,例如 cos:GetObjectcos:PutObject

5. 总结

在云函数中调用腾讯云万象的图片处理,核心步骤是:

  1. 安装并配置 cos-nodejs-sdk-v5
  2. 使用 cos.getObject 方法,并在 Query 参数中拼接万象图片处理的参数
  3. getObject 返回的就是处理后的图片数据,你可以选择将其保存到本地、返回给前端或者再次上传到 COS。

这种方式可以在服务端实现复杂的图片处理逻辑,减轻前端设备的压力,并利用云函数强大的计算能力和腾讯云万象的专业能力。

added labels
模块:云函数
类型:官方文档
Assignee
None yet
Label
模块:云函数
类型:官方文档
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant