准备工作
1. 在 微信公众平台 注册并登录小程序。
3. 符合接入要求,申请插件并申请试用视立方 WEBAR,详见 腾讯云视立方控制台。
接入配置
1. 使用组件前需在 uniapp 工程的
manifest.json
中声明插件:{"mp-weixin": {"plugins": {"webarPlugin": {"version": "1.0.4","provider": "wx04445cff065100ed"}}}}
2. 在 uniapp 项目根目录安装 npm 包: tencentcloud-webar-wx
npm install tencentcloud-webar-wx
使用 WebArImage 组件接入美颜
设置美颜、滤镜、美妆、贴纸
WebArImage 基于 webgl 相关能力,提供图片和照片美颜特效处理能力,支持导出和预览。
1. 在引入组件的页面 的
.vue
文件中使用组件。<template><view><WebArImage:licenseKey="licenseKey":appId="appId":authFunc="authFunc":plugin3d="plugin3d"url="https://webar-static.tencent-cloud.com/assets/image2.jpg"@created="onArCreated"my-style="width: 100vw; height: 100vh"class="webar"/></view></template><script>import WebArImage from "tencentcloud-webar-wx/WebArImage/WebArImage.vue";export default {components: {WebArImage,},methods: {// 此事件会返回 webarContext 实例,通过该实例调用 webar sdk的美颜方法。onArCreated(sdk) {const webarContext = sdk.detail || sdk; // uniapp 下事件有可能有detail也有可能没有this.webarContext = webarContext;// 设置美颜webarContext.setBeautify({whiten: 0.5,dermabrasion: 0.6,});// 设置滤镜webarContext.setFilter(id, 1);// 设置美妆、特效、贴纸webarContext.setEffect([{ id, intensity: 1 }]);},},};</script>
保存美化后照片
const path = await this.webarContext.download(false); // 保存图片,参数为是否存储到相册,返回值为图片路径
组件美颜特效属性说明
属性 | 类型 | 默认值 | 必填 | 说明 |
licenseKey | string | "" | 是 | 腾讯云视立方 licenseKey |
appId | string | "" | 是 | 腾讯云 appid |
authFunc | async function | null | 是 | |
plugin3d | function | null | 否 | 3d 特效插件,开启 3d 贴纸时需传入 |
beautify | Object | null | 否 | 初始美颜参数,取值范围:0 - 1,可用: whiten、dermabrasion、lift、shave、eye、chin |
url | string | null | 否 | 图片地址,可以是http地址及微信文件系统路径。 |
my-style | string | '' | 否 | 样式属性,同 style,vue3 项目需使用 |
created | event | null | 否 | 腾讯特效 SDK 初始化完成事件 |
ready | event | null | 否 | 腾讯特效 SDK 加载完成事件 |
error | event | null | 否 | 腾讯特效 SDK 错误事件 |
webarContext 实例方法
鉴权方法 authFunc 生成方式
const config = {appid: '您的腾讯云APPID',token: '您的Token',}const authFunc = async function() {const timestamp = Math.round(new Date().getTime() / 1000);const signature = sha256(timestamp + config.token + config.appid + timestamp).toUpperCase();return { signature, timestamp };