Queen Web SDK是一个Web端美颜特效组件,支持基础美颜、高级美颜、人脸美妆、人脸美型、头像贴纸、美体、背景抠图、滤镜、隔空写字、Animoji等美颜功能。本文介绍在Web端接入美颜特效SDK。
准备工作
申请试用LicenseKey,获取方式请参见获取美颜特效SDK License。
下载美颜特效Web SDK包并解压,请参见下载美颜特效SDK。
导入Queen SDK。具体操作,请参见通过NPM导入Queen SDK。
通过NPM导入Queen SDK
安装Queen美颜组件
npm install aliyun-queen-engine
导入默认版本美颜
默认版本(Advance版本)支持基础美颜、高级美颜、美妆、美型、滤镜、贴纸美颜功能。
不同的版本包大小和加载的资源文件不同,功能越全包大小越大,请根据实际情况进行选择。
import QueenEngine, {kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
queenEngine = new QueenEngine();
导入Lite版本美颜
Lite版本仅支持基础美颜功能。
import {QueenEngineLite, kQueenBeautyType, kQueenBeautyParams} from "aliyun-queen-engine"
queenEngine = new QueenEngineLite();
导入Pro版本美颜
Pro版本支持基础美颜、高级美颜、美妆、美型、美体、滤镜、贴纸、隔空写字、抠图美颜功能。
import {QueenEnginePro, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
queenEngine = new QueenEnginePro();
导入Full版本美颜
Full版本支持基础美颜、高级美颜、美妆、美型、美体、滤镜、贴纸、隔空写字、抠图美颜、Animoji功能。
import {QueenEngineFull, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend} from "aliyun-queen-engine"
queenEngine = new QueenEngineFull();
导入Worker版本美颜
Worker版本通过初始化时传入kQueenVersion指定Lite、Advance、Pro、Full版本。
import {QueenEngineWorker, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBodyShapeType, kQueenBeautyBlend, kQueenVersion} from "aliyun-queen-engine"
queenEngine = new QueenEngineWorker(kQueenVersion.Pro);
HTML版本接入
HTML版本中SDK使用到的枚举需要增加QueenEngine前缀,如:queenEngine.setQueenBeautyParams(QueenEngine.kQueenBeautyParams.Wrinkles, 0.9);
。
//Lite版:
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.2.2/dist/js/aliyun-queen-engine-lite.js"></script>
//Advance版:
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.2.2/dist/js/aliyun-queen-engine.js"></script>
//Pro版:
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.2.2/dist/js/aliyun-queen-engine-pro.js"></script>
//Full版:
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.2.2/dist/js/aliyun-queen-engine-full.js"></script>
//Worker版本
<script src="https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.2.2/dist/js/aliyun-queen-engine-worker.js"></script>
微信小程序版接入
JS文件(https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.1/dist/js/@ali/queen-wasm-wx.js)和WASM文件(https://g.alicdn.com/apsara-media-box/imp-web-queen-wasm/6.3.1/dist/wasm/weixin/queen.wasm.bin)。
下载上述文件到微信小程序项目文件夹中,并将
queen.wasm.bin
改名为queen.wasm.br
。调用方式:
import QueenEngine, {kQueenBeautyType, kQueenBeautyMakeupType,kQueenBeautyBlend, kQueenBeautyParams} from '/assets/@ali/queen-wasm-wx' let canvas = await new Promise((resolve) => { wx.createSelectorQuery().select('#canvas1').fields({ node: true}).exec((res) => { resolve(res[0].node); })}); queenEngine = new QueenEngine(); queenEngine.setWasmUrl("/assets/")//queen.wasm.br文件目录 queenEngine.init("licenseKey", function(){ console.info("queen ready"); }, function(progress){ }, canvas);
canvas必须显式传入。
申请License试用时,需要提供微信AppId,以进行认证授权。
Queen Web SDK接入示例
初始化Queen引擎
初始化Queen引擎。
const sdkLicenseKey = ""; //queen sdk 授权licenseKey const queenEngine = new QueenEngine(); //const queenEngine = new QueenEnginePro(); //Pro版本初始化 queenEngine.init(sdkLicenseKey, function(){ //初始化完成回调 }, function(progress){ //progress:加载进度条 });
指定canvas初始化。
需要指定的
canvasElement type
为webgl2
类型或默认为空。const canvasElement = document.getElementById("canvas"); const queenEngine = new QueenEngine(); queenEngine.init(sdkLicenseKey, function(){ //初始化完成回调 }, function(progress){ //progress:加载进度条 }, canvasElement);
指定推理模型初始化。
const queenEngine = new QueenEnginePro(); queenEngine.init(sdkLicenseKey, function(){ //初始化完成回调 }, function(progress){ //progress:加载进度条 }, canvasElement,{ "segment": kQueenModelShapeType.None,//初始化时不加载背景抠图模型 "pose": kQueenModelShapeType.None, //初始化时不加载美体变形模型 "backend": kBackendType.Auto //自动选择推理后端 });
说明kQueenModelShapeType.None
默认不加载背景抠图模型,使用抠图或美体时按需加载。kQueenModelShapeType.Horizontal
引擎初始化时载入横向图模型。kQueenModelShapeType.Vertical
引擎初始化时载入竖向图模型。kQueenModelShapeType.Both
引擎初始化时载入时加载横向图模型和竖向图模型。横向图模型,即
width > height
源输入。竖向图模型,即
height > width
源输入。kBackendType.WebGL
使用WebGL推理后端。kBackendType.WebGPU
优先使用WebGPU推理后端。模型加载会影响页面加载速度。
Worker版本接入。
import {QueenEngineWorker, kQueenBeautyType, kQueenBeautyParams, kQueenBeautyMakeupType, kQueenBeautyFaceShapeType, kQueenBeautyBlend} from "aliyun-queen-engine" const canvasElement = document.getElementById("canvas"); queenEngine = new QueenEngineWorker(kQueenVersion.Pro); queenEngine.init(sdkLicenseKey, function(){ //初始化完成回调 }, function(progress){ //progress:加载进度条 }, canvasElement);
配置美颜参数
设置基础美颜。
// 开启基础美颜 queenEngine.setQueenBeautyType(kQueenBeautyType.SkinBuffing, true); // 设置磨皮系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinBuffing, 0.7); // 设置锐化系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Sharpen, 0.5); // 打开美白功能开关 queenEngine.setQueenBeautyType(kQueenBeautyType.SkinWhiting, true); // 设置美白系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Whitening, 0.6); // 设置红润系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinRed, 0.2);
设置高级美颜。
//高级美颜 queenEngine.setQueenBeautyType(kQueenBeautyType.FaceBuffing, true); // 设置去眼袋系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Pouch, 0.9); // 设置去法令纹系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.NasolabialFolds, 0.9); // 设置白牙系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.WhiteTeeth, 0.9); // 设置口红系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Lipstick, 0.2); // 设置腮红系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Blush, 0.1); // 设置口红色相系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickColorParam, 0.1); // 设置口红饱和度系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickGlossParam, 0.1); // 设置口红明度系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.LipstickBrightnessParam, 0.1); // 设置亮眼系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.BrightenEye, 0.9); // 设置红润系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.SkinRed, 0.2); // 设置去皱纹系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.Wrinkles, 0.9); // 设置去暗沉系数 queenEngine.setQueenBeautyParams(kQueenBeautyParams.BrightenFace, 0.3);
设置美型。
// 打开美型功能开关,美型参数详见kQueenBeautyFaceShapeType queenEngine.setQueenBeautyType(kQueenBeautyType.FaceShape, true); //颧骨,值的范围[0,1],默认0 queenEngine.setFaceShape(kQueenBeautyFaceShapeType.CutCheek, 0.6); // 削脸,值的范围[0,1],默认0 queenEngine.setFaceShape(kQueenBeautyFaceShapeType.CutFace, 0.7); //瘦脸,值的范围[0,1],默认0 queenEngine.setFaceShape(kQueenBeautyFaceShapeType.ThinFace, 0.8); //脸长,值的范围[0,1],默认0 queenEngine.setFaceShape(kQueenBeautyFaceShapeType.LowerJaw, 0.8); //下巴拉长,值的范围[-1,1],默认0 queenEngine.setFaceShape(kQueenBeautyFaceShapeType.HigherJaw, 0.6);
设置美妆。
使用SDK内置资源美妆。
使用内置资源接口时,SDK会从CDN下载美颜素材。
//激活美妆 queenEngine.setQueenBeautyType(kQueenBeautyType.Makeup, true); //设置美妆眉毛 await queenEngine.setMakeupEyeBrow(Assets.kResMakeupEyeBrow.BiaoZhunMei, 0.6); //设置美妆睫毛 await queenEngine.setMackupEyeLash(Assets.kResMakeupEyeLash.ChenJing, 0.6); //设置美妆眼影 await queenEngine.setMakeupEyeShadow(Assets.kResMakeupEyeShadow.DaDiSe, 0.5); //设置美妆眼线 await queenEngine.setMakeupEyeLiner(Assets.kResMakeupEyeLiner.DaYan, 0.4); //设置美妆美瞳 await queenEngine.setMakeupEyeBall(Assets.kResMakeupEyeBall.BiMuYu, 0.5); //设置美妆口红 await queenEngine.setMakeupMouth(Assets.kResMakeupMouth.AnYeZi, 0.3); //设置美妆腮红 await queenEngine.setMakeupBlush(Assets.kResMakeupBlush.BlushWuGu, 0.2); //设置美妆高光 await queenEngine.setMakeupHighlight(Assets.kResMakeupHighLight.Highlight, 0.1); //移除美妆效果 - 移除美妆美瞳 queenEngine.removeMakeupWithType(kQueenBeautyMakeupType.Eyeball); //详细请参考QueenEngin.d.ts接口文件说明
本地资源美妆。
const makeupPackage = "./mouth.zip" const makeupName = "1.2.3.png"; const band = kQueenBeautyBlend.LabMix; // 打开美妆功能开关,美妆参数详见kQueenBeautyMakeupType queenEngine.setQueenBeautyType(kQueenBeautyType.Makeup, true); // 设置美妆口红效果的透明度 queenEngine.setMakeupAlphaWithType(kQueenBeautyMakeupType.Mouth, true, 0.6); // 设置口红效果 queenEngine.setMakeupWithPackage(kQueenBeautyMakeupType.Mouth, makeupPackage, makeupName, band).then(() => { });
设置滤镜。
使用内置滤镜。
await queenEngine.setLutByType(Assets.kResLut.M1, 0.5);
使用自定义滤镜。
const lutImageUrl = "./lut.png"; queenEngine.setLutImageUrl(lutImageUrl).then(function () { queenEngine.setQueenBeautyType(kQueenBeautyType.LUT, true); queenEngine.setQueenBeautyParams(kQueenBeautyParams.LUT, 0.5); });
设置头像贴纸。
使用内置贴纸。
queenEngine.addMaterialWithType(Assets.kResSticker.ILoveChina); //或 queenEngine.addMaterialWithIndex(0); //同时设置多个 queenEngine.addMaterialWithIndexs([0,1]);
使用自定义贴纸。
const stickerZip = "./sticker.zip"; queenEngine.addMaterialWithUrl(stickerZip).then(() => { });
配置实景抠图。
const backgroundUrl = "./bg.png"; queenEngine.setSegmentBackgroundUrl(backgroundUrl).then(() => { });
配置绿幕抠图。
const backgroundUrl = "./bg.png"; const isBlue = false;//是否蓝幕 queenEngine.setGreenScreenWithUrl(isBlue, backgroundUrl).then(() => { });
配置背景处理。
//背景模糊 queenEngine.enableBokehBackground(true); //背景透明 queenEngine.enableTransparentBackground(true);
美颜渲染
摄像头流渲染。
queenEngine.openCameraAndRender().then((stream=>{ const video = document.querySelector('video'); video.srcObject = stream; video.play(); }))
渲染到Canvas。
渲染的Canvas为初始化引擎时传入的Canvas。
const sourceVideo = document.querySelector('video'); queenEngine.renderMediaObjectToRenderCanvas(sourceVideo, sourceVideo.clientWidth, sourceVideo.clientHeight);
视频流渲染。
navigator.mediaDevices.getUserMedia(constraints) .then(mediaStream => { let renderMediaStream = queenEngine.renderMediaStream(mediaStream); const video = document.querySelector('video'); video.srcObject = renderMediaStream; video.play(); });
图片渲染。
fetch(图片地址) .then(buffer => buffer.blob()) .then(createImageBitmap) .then(img => { queenEngine.renderWithMediaObject(img, img.width, img.height, function(imageBufferData, imageWidth, imageHeight){ const canvas = document.getElementById('playCanvas'); //canvas画布 const ctx = canvas.getContext("2d"); const imageBuffer = new Uint8ClampedArray(imageBufferData); const imageData = new ImageData(imageBuffer, imageWidth, imageHeight); ctx.clearRect(0, 0, imageWidth, imageHeight); ctx.putImageData(imageData, 0, 0); }); });
纹理渲染。
const canvas = document.getElementById("sourceCanvas"); let outTexture = queenEngine.renderMediaObjectToTexture(canvas, canvas.width, canvas.height); queenEngine.drawOutTexture(outTexture);//纹理会绘制到初始化传入的canvas
纹理输入渲染。
let inputTexture = queenEngine.generateTextureId(); queenEngine.updateTexture(inputTexture, imageData); let outTexture = queenEngine.renderTextureId(inputTexture, width, height); queenEngine.drawOutTexture(outTexture)//纹理会绘制到初始化传入的canvas
管道流渲染。
const videoTrack = stream.getVideoTracks()[0]; const processor = new MediaStreamTrackProcessor({ track: videoTrack }); const readFrameStream = processor.readable; const generator = new MediaStreamTrackGenerator({ kind: 'video' }); let writeFrameStream = generator.writable; readFrameStream.pipeThrough(queenEngine.getTransformStream()).pipeTo(writeFrameStream);
Queen Web SDK接口说明
SDK初始化
/**
* SDK初始化
* @param sdkUrl 初始化SDK
* @param sdkLicenseKey 授权licenseKey
* @param initCallback 初始后回调
* @param loaddingCallback 载入进度条
* @param renderCanvas 渲染使用的canvas 可不传,不传时自动创建
*/
init(sdkLicenseKey: string, initCallback:()=>void, loaddingCallback:(progress: number) => void, renderCanvas: HTMLCanvasElement)
美颜特效渲染
基于imageData对象渲染。
/** * 图片美颜渲染 * 返回ImageBuffer RGBA对象 * @param imageData 图片ImageBuffer RGBA, * 示例:const imageData = new Uint8Array(ImageData.data); * @param imageWidth 宽 * @param imageHeight 高 * @param renderCallback 图片渲染回调 */ render(imageData: Uint8Array, imageWidth: number, imageHeight: number, renderCallback: (outImageData:Uint8Array, imageWidth:number, imageHeight:number) => void)
开启摄像头并美颜。
/** * 启用摄像头美颜 * @param constraints 摄像头参数 * @returns 美颜视频流 */ openCameraAndRender(constraints?: MediaStreamConstraints): Promise<MediaStream>
直接渲染到Canvas。
/** * 美颜渲染媒体对象到RenderCanvas * RenderCanvas为初始化时指定的Canvas * @param mediaObject 媒体对象 TexImageSourceWebCodecs(ImageData | ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | VideoFrame | OffscreenCanvas) | Uint8Array */ renderMediaObjectToRenderCanvas(mediaObject: TexImageSourceWebCodecs | Uint8Array, width?: number, height?: number): void
基于媒体对象渲染。
/** * 媒体对象渲染 * 返回渲染后ImageData对象 * @param mediaElement 媒体对象 TexImageSourceWebCodecs(ImageData | ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | VideoFrame | OffscreenCanvas) | Uint8Array * @param width * @param height * @param renderCallback */ renderWithMediaObject(mediaObject: TexImageSourceWebCodecs | Uint8Array, width: number, height: number, renderCallback: (outImageData: Uint8Array, imageWidth: number, imageHeight: number) => void): void
基于纹理渲染。
/** * 基于纹理ID渲染并返回纹理对象 * @param mediaElement 媒体对象 TexImageSourceWebCodecs(ImageData | ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | VideoFrame | OffscreenCanvas) | Uint8Array * @param width 对象width * @param height 对象height * @returns 纹理对象 */ renderMediaObjectToTexture(mediaObject: TexImageSourceWebCodecs | Uint8Array, width?: number, height?: number): WebGLTexture | null
纹理渲染。
** * 基于纹理id渲染 * 输入纹理id 返回纹理id * @param inTextureId 输入纹理id,可以调用buildInputTexture创建纹理ID * @param width 媒体对像宽度 * @param height 媒体对像高度 * @returns 纹理对象 */ renderTextureId(textureId: number, imageWidth: number, imageHeight: number, useOutTextureId: number = 0) : WebGLTexture | null;
基于流渲染。
/** * 视频流渲染 返回渲染视频流 * 需要Chrome 94+版本浏览器支持 * @param inputMediaStream 输入媒体流 */ renderMediaStream(inputMediaStream: MediaStream): MediaStream renderMediaStreamTrack(videoMediaStreamTrack: MediaStreamVideoTrack, width?: number, height?: number): MediaStreamVideoTrack getTransformStream(): TransformStream;//返回美颜转换流处理器
美颜引擎注销。
/** * 美颜引擎注销 */ engineDestory();
Animoji表情
Animoji初始化。
/** * Animoji初始化 * @param animojiUrl animoji资源地址 * @param width 宽 * @param height 高 * @param scale 放大尺寸 * @returns */ animojiInitialize(animojiUrl: string, width: number, height: number, scale: number): Promise<void>
图片Animoji渲染。
/** * Animoji 图片渲染 * @param imageData 图片imageData * @param imageWidth 宽 * @param imageHeight 高 * @param renderCallBack 渲染回调 */ animojiRender(imageData: Uint8Array, imageWidth: number, imageHeight: number, renderCallback: (outImageData:Uint8Array, imageWidth:number, imageHeight:number) => void): void
媒体对象Animoji渲染。
/** * Animoji渲染 * @param mediaSource 媒体对象 TexImageSourceWebCodecs(ImageData | ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | VideoFrame | OffscreenCanvas) | Uint8Array * @param imageWidth 宽 * @param imageHeight 高 * @param renderCallBack 渲染回调 */ animojiRenderWithMediaObject(mediaObject: TexImageSourceWebCodecs | Uint8Array, width: number, height: number, renderCallback: (outImageData: Uint8Array, imageWidth: number, imageHeight: number) => void): void
媒体对象Animoji渲染纹理输出。
/** * Animoji渲染 * @param mediaObject 媒体对象 TexImageSourceWebCodecs(ImageData | ImageBitmap | HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | VideoFrame | OffscreenCanvas) | Uint8Array * @param width 宽 * @param height 高 * @returns 渲染后纹理对象 */ animojiRenderMediaObjectToTexture(mediaObject: TexImageSourceWebCodecs | Uint8Array, width?: number, height?: number): WebGLTexture | null
基于纹理IdAnimoji渲染。
/** * Animoji渲染 * @param inTextureId 纹理ID * @param width 宽 * @param height 高 * @returns 渲染后纹理对象 */ animojiRenderTextureId(inTextureId: number, width: number, height: number): WebGLTexture | null
Animoji大小调整。
/** * Animoji大小调整 * @param scale 推荐:0.8~1.5 */ animojiResize(scale: number)
设置Animoji背景模式。
/** * 设置Animoji背景模式 * @param mode 背景模式:0:无,1:摄像头背景 2:指定背景图片 * @param backgroundImgUrl 背景图片,如果mode=2时需要指定 */ setAnimojiBackgroundWithMode(mode: kBackgroundProcessType, backgroundImgUrl: string)
Animoji引擎注销。
/** * Animoji引擎注销 */ animojiDestroy()
背景抠图
启用抠图模块需要增加以下依赖:
$ npm add @tensorflow/tfjs
$ npm add @tensorflow/tfjs-backend-webgl
$ npm add @tensorflow/tfjs-backend-webgpu
绿幕/蓝幕抠图。
/** * 绿幕/蓝幕抠图 * 开启此抠图功能,纯色背景抠图(setPureColorToBackground)会关闭。 * @param isBlue 绿幕:false,蓝幕:true * @param backgroundImgUrl 背景图片 * @param threshold 幕布敏感度[1,10],默认1 * @param autoThresholdEnabled 是否根据环境动态计算幕布敏感度,为true时调节参数threshold失效,为false时调节参数threshold生效 * @param outputGrayMask 输出灰色遮罩 * @param backgroundProcessType 背景处理方式。 */ setGreenScreenWithUrl = function (isBlue: boolean, backgroundImgUrl: string, threshold: number, autoThreshold: boolean, outputGrayMask: boolean, backgroundProcessType:kBackgroundProcessType): Promise<void>
实景抠图。
/** * 实景AI抠图 * @param backgroundImgUrl 抠图背景图片url * @returns */ setSegmentBackgroundUrl(backgroundImgUrl: string): Promise<void>
纯色抠图。
/** * 纯色背景抠图。 * 注意:开启此抠图功能,绿幕抠图(setGreenScreen)会关闭。 * @param backgroundImgPath 背景图片url * @param threshold 幕布敏感度[1,10],默认1 * @param colorType 需要被替换的颜色类型,0绿色(green),1蓝色(blue),2青色(cyan),3紫色(purple),4黄色(yellow),5红色(red),默认0。 */ setPureColorBackgroundUrl(backgroundImgUrl: string, threshold: number, colorType: number): Promise<void>
参数配置
配置美颜类型。
/** * 配置美颜类型 * @param type 美颜类型kQueenBeautyType枚举 * @param enable 是否启用 */ setQueenBeautyType(type: kQueenBeautyType, enable: boolean)
配置美颜参数值。
/** * 配置美颜参数值 * @param param 美颜参数kQueenBeautyParams枚举 * @param value 参数值 */ setQueenBeautyParams(param: kQueenBeautyParams, value: number)
配置LUT滤镜。
/** * 使用内置Lut滤镜 * @param lutType Assets.kResLut枚举 * @returns */ setLutByType(lutType: Assets.kResLut): Promise<void> /** * 设置Lut滤镜 * @param imageUrl 所要设置的滤镜图片Url * @returns */ setLutImageUrl(imageUrl: string): Promise<void>
设置美型类型。
/** * 设置美型类型,设置前需要将kQueenBeautyType.FaceShape打开 * @param faceShapeType 需要设置美型的类型,kQueenBeautyFaceShapeType枚举 * @param value 需要设置的值 */ setFaceShape(faceShapeType: kQueenBeautyFaceShapeType, value: number)
美妆API。
使用内置资源进行美妆。
/** * 设置美妆眉毛 * @param eyeBrowType 眉毛类型,kResMakeupEyeBrow枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupEyeBrow(eyeBrowType: Assets.kResMakeupEyeBrow, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆睫毛 * @param eyelashType 睫毛类型,kResMakeupEyeLash枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMackupEyeLash(eyelashType: Assets.kResMakeupEyeLash, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆眼影 * @param eyeShadowType 眼影类型,kResMakeupEyeShadow * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupEyeShadow(eyeShadowType: Assets.kResMakeupEyeShadow, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆眼线 * @param eyeLinerType 眼线类型,kResMakeupEyeLiner检举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupEyeLiner(eyeLinerType: Assets.kResMakeupEyeLiner, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆美瞳 * @param eyeballType 美瞳类型,kResMakeupEyeBall枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupEyeBall(eyeballType: Assets.kResMakeupEyeBall, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆口红 * @param mouthType 口红类型,kResMakeupMouth枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupMouth(mouthType: Assets.kResMakeupMouth, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆整妆 * @param wholeType 美妆整妆类型 Assets.kResMakeupWhole枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupWhole(wholeType: Assets.kResMakeupWhole, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆腮红 * @param blushType 腮红类型,kResMakeupBlush检举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupBlush(blushType: Assets.kResMakeupBlush, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void> /** * 设置美妆高光 * @param highlightType 高光类型kResMakeupHighLight枚举 * @alpha 妆容透明度 * @param blend 混合类型,kQueenBeautyBlend枚举 * @returns */ setMakeupHighlight(highlightType: Assets.kResMakeupHighLight, alpha: number, blend: kQueenBeautyBlend = kQueenBeautyBlend.LabMix): Promise<void>
设置美妆类型和图片素材路径。
/** * 设置美妆类型和图片素材路径,设置美妆需要将kQueenBeautyType.Makeup 打开 * @param makeupType 美妆类型 kQueenBeautyMakeupType枚举 * @param imageUrl 美妆素材Url地址 * @param blend 混合类型kQueenBeautyBlend枚举 */ setMakeupWithUrl(makeupType: kQueenBeautyMakeupType, imageUrl: string, blend: kQueenBeautyBlend): Promise<void>
设置美妆类型和图片素材路径。
/** * 设置美妆类型和图片素材路径,设置美妆需要将kQueenBeautyType.Makeup 打开 * @param makeupType 美妆类型 * @param packageUrl 资源压缩包url * @param imageName 包内图片名称 * @param blend 混合类型 混合类型kQueenBeautyBlend枚举 */ setMakeupWithPackage(makeupType: kQueenBeautyMakeupType, packageUrl: string, imageName: string, blend: kQueenBeautyBlend): Promise<void>
设置美妆透明度。
/** * 设置美妆透明度,可指定性别 * @param makeupType 美妆类型 * @param isFeMale 是否是女性,女性:true,男性:false,(男性为接口预留,这里均传女性即true即可) * @param alpha 妆容透明度 */ setMakeupAlphaWithType = function (makeupType: kQueenBeautyMakeupType, isFeMale: boolean, alpha: number)
设置美妆类型的混合类型。
/** * 设置美妆透明度,可指定性别 * @param makeupType 美妆类型 * @param isFeMale 是否是女性,女性:true,男性:false,(男性为接口预留,这里均传女性即true即可) * @param alpha 妆容透明度 */ setMakeupAlphaWithType(makeupType: kQueenBeautyMakeupType, isFeMale: boolean, alpha: number)
移除美妆效果。
/** * 移除美妆效果 * @param makeupType 美妆类型 */ removeMakeupWithType(makeupType: kQueenBeautyMakeupType): void
清除所有美妆。
/** * 清除所有美妆 */ resetAllMakeupType()
贴纸API。
增加贴纸。
/** * 设置内置资源贴纸 * @param stickerType 内置贴纸类型 * @returns */ addMaterialWithType(stickerType: Assets.kResSticker): Promise<void> /** * 设置内置资源贴纸 * @param stickerIndex 内置贴纸索引值 * @returns */ addMaterialWithIndex(stickerIndex: number): Promise<void> /** * 设置贴纸 * @param materialZipUrl 贴纸资源包Url * @returns */ addMaterialWithUrl(materialZipUrl: string): Promise<void>
移除贴纸。
/** * 删除贴纸/贴图/实景抠图需要替换的背景 * @param materialZipUrl */ removeMaterialWithUrl(materialZipUrl: string) /** * 移除贴纸 * @param stickerType 内置贴纸类型 * @returns */ removeMaterialWithType(stickerType: Assets.kResSticker); /** * 移除贴纸 * @param stickerIndex 内置贴纸索引值 * @returns */ removeMaterialWithIndex(stickerIndex: number)
功能调试。
展示人脸识别点位。
/** * 展示人脸识别点位 * @param show 是否展示 */ showFaceDetectPoint(show: boolean)
展示人脸区域三角剖分线。
/** * 展示人脸区域三角剖分线 * @param show 是否展示 */ showMakeupLine(show: boolean)
显示人体检测点。
/** * 显示人体关键点 * @param show 是否显示 */ showBodyDetectPoint(show: boolean)
美体美颜,设置美体形变。
/** * 设置美体美颜 * @param bodyShapeType 美体类型 * @param value 形变程度 */ setBodyShape(bodyShapeType: kQueenBeautyBodyShapeType, value: number)
AR隔空写字
装载AR隔空写字模块。
/** * 初始化AR写字模块 * @returns */ initArWriteResource(): Promise<boolean>
开启Ar写字。
/** * 开启Ar写字 * @param enable true: 开启 * @param mode 1: 写字, 2: 画画。 */ setArWriting(enable: boolean, mode: number): void
清除AR写字痕迹。
/** * 清除AR写字痕迹 */ cleanScreenArWriting(): void
资源载入
参数配置中所有的url均需要转成path才能正常使用,需要通过下面的API将url资源文件载入到Queen引擎中生成path。
通过url载入资源。
/** * 载入url资源到引擎 * @param url url链接 * @param needUnZip 是否需要解压 * @returns */ loadResourceFileWithUrl(url: string, needUnZip: boolean): Promise<string> /** * 载入url资源到引擎 * @param url url链接 * @param saveFileName 保存的文件名 * @param needUnZip 是否需要解压 * @returns */ loadResourceFileWithUrlSaveAs(url: string, saveFileName: string, needUnZip: boolean): Promise<string>
通过buffer写入。
/** * 载入资源到引擎 * @param buffer 数据流buffer * @param saveFileName 保存的文件名 * @param needUnZip 是否需要解压 * @returns */ loadResourceFileWithData(buffer: ArrayBuffer, saveFileName: string, needUnZip: boolean)
文件检查。
/** * 验证资源文件是否存在 * @param fullFileName 完整的路径文件名 * @returns */ checkResourceFile(fullFileName: string)
- 本页导读 (1)