阅读(1292) (13)

QQ小程序 图像处理

2020-07-10 13:56:03 更新

图像处理提供多种图像处理功能,包含智能裁剪、无损压缩、水印、格式转换等,您可通过扩展 SDK 轻松管理文件。

功能特性

对于有大量用户图片上传的应用,图片处理扩展可以为用户提供便捷的裁剪、压缩、水印等服务来适配各个业务场景。

类型 介绍
缩放 等比缩放、设定目标宽高缩放等多种方式
裁剪 普通裁剪、缩放裁剪、内切圆、人脸智能裁剪
旋转 普通旋转、自适应旋转
格式转换 jpg、bmp、gif、png、webp、jpeg格式转换,gif 格式优化,渐进显示功能
质量变换 针对 JPG 和 WEBP 图片进行质量变换
高斯模糊 对图片进行模糊处理
锐化 对图片进行锐化处理
图片水印 提供图片水印处理功能
文字水印 提供实时文字水印处理功能
获取图片基本信息 查询图片基本信息,包括格式、长、宽等
获取图片 EXIF 查询图片 EXIF 信息,如照片的拍摄参数、缩略图等
获取图片主色调 获取图片主色调信息
去除元信息 去除图片元信息,减小图像体积
快速缩略模板 快速实现图片格式转换、缩略、剪裁等功能,生成缩略图
管道操作符 对图片按顺序进行多种处理

前置要求

  • 已经开通云开发。
  • 云环境已安装图像处理扩展,点击此处 查看安装情况

使用说明

1.获取图片时处理

如果您的图像已经上传到云存储中,可通过在 url 后添加参数的方式,对图像进行处理,自动获取处理后的结果。假设缩放图片宽高为原图50%,示例如下:

https://${您的云开发文件访问域名,格式如:xxx.tcb.qcloud.la}/sample.jpeg?imageMogr2/thumbnail/!50p

2.持久化图像处理

  1. 安装扩展 SDK 到项目 npm install --save @cloudbase/extension-ci@latest

  1. 注册扩展到Cloud对象 小程序中
    
    const extCI = require('@cloudbase/extension-ci');

// 初始化环境 qq.cloud.init({ env:"test-x1dzi" })

// 注册云开发扩展 qq.cloud.registerExtension(extCI);



云函数中
const cloud = require('qq-server-sdk');
const extCI = require('@cloudbase/extension-ci');
// 初始化环境
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
// 注册云开发扩展
cloud.registerExtension(extCI);

3. 调用扩展 SDK

Cloud.invokeExtension(extensionName: String, options: Object): Promise

参数说明

参数 类型 是否必须 说明
extensionName String 扩展名,传CloudInfinite
options Object 扩展参数,说明见下方

options参数

名称 类型 是否必须 说明
action String 操作类型,传:ImageProcess
cloudPath String 文件的绝对路径,与cloud.uploadFile中一致
fileContent ArrayBuffer或Buffer 文件内容, 有值,表示上传时处理图像;为空,则处理已经上传的图像
operations Object 图像处理参数

operations节点内容

名称 类型 是否必须 说明
rules Array.<Rule对象> 处理样式

Rule节点内容

名称 类型 是否必须 说明
fileid String 处理结果的文件路径,如以’/’开头,则存入指定文件夹中,否则,存入原图文件存储的同目录
rule String 处理样式参数,与下载时处理图像在url拼接的参数一致

返回内容

参数名称 类型 描述
UploadResult Object 原图信息

UploadResult 节点内容:

|参数名称|类型|描述| |ProcessResults|Object|图片处理结果|

ProcessResults 节点内容:

节点名称 类型 描述
Object Object 每一个图片处理结果

Object 节点内容:

节点名称 类型 描述
Key String 文件名
Location String 图片路径
Format String 图片格式
Width Int 图片宽度
Height Int 图片高度
Size Int 图片大小
Quality Int 图片质量

调用示例

在小程序中使用

const extCI = require('@cloudbase/extension-ci');


// 初始化环境
qq.cloud.init({
    env:"test-x1dzi"
})


// 注册云开发扩展
qq.cloud.registerExtension(extCI);


// 用户选择图片
qq.chooseImage({
  success:res=>{
    // 使用文件管理读取文件内容
    const fsm = qq.getFileSystemManager();
    const filePath = res.tempFilePaths[0];
    const cloudPath = `demo.jpeg`;


    fsm.readFile({
      filePath:filePath,
      success:res2=>{


        const fileContent = res2.data; // 格式为ArrayBuffer


        // 使用云开发扩展能力转换图片格式
        qq.cloud.invokeExtension("CloudInfinite", {
          action: "ImageProcess",
          cloudPath: cloudPath, // 存储图像的绝对路径,与qq.cloud.uploadFile中一致
          fileContent:fileContent, // 该字段可选,文件内容:ArrayBuffer|Buffer。有值,表示上传时处理图像;为空,则处理已经上传的图像
          operations: {
            rules: [
              {
                  fileid: `/image_process/demo.png`,// 处理结果的文件路径,如以’/’开头,则存入指定文件夹中,否则,存入原图文件存储的同目录
                  rule: "imageView2/format/png" // 处理样式参数,与下载时处理图像在url拼接的参数一致
              }
            ]
          }
        }).then(res=>{
          console.log(res)
        })
      }
    })
  }
})

在云函数中使用

const cloud = require('qq-server-sdk');
const extCI = require('@cloudbase/extension-ci');
// 初始化环境
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})


// 注册云开发扩展
cloud.registerExtension(extCI);


// 云函数入口函数
exports.main = async (event, context) => {


  const cloudPath = event.cloudPath;


  // 使用云开发扩展能力生成水印
  const res = await cloud.invokeExtension("CloudInfinite", {
    action: "ImageProcess",
    cloudPath: cloudPath, // 存储图像的绝对路径,与cloud.uploadFile中一致
    operations: {
      rules: [
        {
            fileid: `/image_process/${cloudPath}`,// 处理结果的文件路径,如以’/’开头,则存入指定文件夹中,否则,存入原图文件存储的同目录
            // 处理样式参数,与下载时处理图像在url拼接的参数一致
            rule: "watermark/2/text/6IW-6K6v5LqRwrfkuIfosaHkvJjlm74/fill/IzNEM0QzRA/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45" 
        }
      ]
    }
  })


  return {
    res
  }
}