UNPKG

@tencentcloud/roomkit-electron-vue3

Version:

<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,

374 lines (337 loc) 9.12 kB
import logger from '../../../utils/common/logger'; import { AdvancedBeautyPanelLevel, AdvancedBeautyType } from '../../type'; import { beautyPanelConfig } from './BeautyPanelConfig'; export type BeautyItem = { key: string; icon: string; name: string; nameEn: string; effectName: string; resourcePath: string; backgroundPath: string; minValue?: number; maxValue?: number; }; export type BeautyItemMap = { name: string; nameEn: string; items: BeautyItem[]; }; export type BeautyPanelInfo = { key: AdvancedBeautyType; name: string; nameEn: string; items: BeautyItem[] | Map<string, BeautyItemMap>; }; type BeautyItems = { name: string; nameEn: string; items: any; }; const beautyPanels = new Map<AdvancedBeautyType, BeautyPanelInfo>(); export function generateBeautyPanel(level: AdvancedBeautyPanelLevel) { readBeautyPanel(level); readAdvancedBeautyPanel(level); readImageQualityPanel(level); readMakeupPanel(level); readBeautyBodyPanel(level); readAdvancedMakeupPanel(level); readFiltersPanel(level); readMotionPanel(level); readVirtualBackgroundPanel(level); return beautyPanels; } function checkPanelConfig( level: AdvancedBeautyPanelLevel, advancedBeautyType: AdvancedBeautyType ) { const beauty = beautyPanelConfig.get(level); if (!beauty) { logger.error(`beautyPanelConfig[${level}] is undefined`); return undefined; } const beautyItems = beauty.get(advancedBeautyType); if (!beautyItems) { logger.error( `beautyPanelConfig[${level}][${advancedBeautyType}] is undefined` ); return undefined; } return beautyItems; } function readBeautyPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.basicBeauty); if (!beautyItems) { return; } const dataArray: BeautyItems[] = []; dataArray.push({ name: '美白', nameEn: 'white', items: beautyItems.white }); dataArray.push({ name: '磨皮', nameEn: 'smooth', items: beautyItems.smooth }); dataArray.push({ name: '红润', nameEn: 'rosy', items: beautyItems.rosy }); readComplexBeautyPanel( AdvancedBeautyType.basicBeauty, '基础美颜', AdvancedBeautyType.basicBeauty as string, dataArray ); } function readAdvancedBeautyPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig( level, AdvancedBeautyType.advancedBeauty ); if (!beautyItems) { return; } const dataArray: BeautyItems[] = []; dataArray.push({ name: '眼部', nameEn: 'eye', items: beautyItems.eye }); dataArray.push({ name: '眉部', nameEn: 'eyebrow', items: beautyItems.eyebrow, }); dataArray.push({ name: '鼻部', nameEn: 'nose', items: beautyItems.nose }); dataArray.push({ name: '嘴部', nameEn: 'mouse', items: beautyItems.mouse }); dataArray.push({ name: '面部', nameEn: 'face', items: beautyItems.face }); readComplexBeautyPanel( AdvancedBeautyType.advancedBeauty, '高级美颜', AdvancedBeautyType.advancedBeauty as string, dataArray ); } function readImageQualityPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.imageQuality); if (!beautyItems) { return; } readSimpleBeautyPanel( AdvancedBeautyType.imageQuality, '画质', AdvancedBeautyType.imageQuality as string, beautyItems.imageQuality ); } function readMakeupPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.makeup); if (!beautyItems) { return; } const dataArray: BeautyItems[] = []; dataArray.push({ name: '唇妆', nameEn: 'lipstick', items: beautyItems.lipstick, }); dataArray.push({ name: '腮红', nameEn: 'blush', items: beautyItems.blush, }); dataArray.push({ name: '染发', nameEn: 'hair', items: beautyItems.hair, }); dataArray.push({ name: '眼影', nameEn: 'eyeShadow', items: beautyItems.eyeShadow, }); dataArray.push({ name: '眼线', nameEn: 'eyeLiner', items: beautyItems.eyeLiner, }); dataArray.push({ name: '睫毛', nameEn: 'eyelash', items: beautyItems.eyelash, }); dataArray.push({ name: '美瞳', nameEn: 'eyeball', items: beautyItems.eyeball, }); dataArray.push({ name: '眉影', nameEn: 'eyebrowShadow', items: beautyItems.eyebrowShadow, }); dataArray.push({ name: '立体', nameEn: 'contour', items: beautyItems.contour, }); readComplexBeautyPanel( AdvancedBeautyType.makeup, '美妆', AdvancedBeautyType.makeup as string, dataArray ); } function readBeautyBodyPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.bodyBeauty); if (!beautyItems) { return; } readSimpleBeautyPanel( AdvancedBeautyType.bodyBeauty, '美体', AdvancedBeautyType.bodyBeauty as string, beautyItems.propertyList ); } function readAdvancedMakeupPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.motion); if (!beautyItems) { return; } readSimpleBeautyPanel( AdvancedBeautyType.advancedMakeup, `高级美妆`, AdvancedBeautyType.advancedMakeup as string, beautyItems.advancedMakeup ); } function readFiltersPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.filters); if (!beautyItems) { return; } readSimpleBeautyPanel( AdvancedBeautyType.filters, `滤镜`, AdvancedBeautyType.filters as string, beautyItems.propertyList ); } function readMotionPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig(level, AdvancedBeautyType.motion); if (!beautyItems) { return; } let motions: BeautyItem[] = []; if (beautyItems.motions2D && Array.isArray(beautyItems.motions2D)) { motions = motions.concat( readBeautyItems(beautyItems.motions2D, 'motions2D') ); } if (beautyItems.motions3D && Array.isArray(beautyItems.motions3D)) { motions = motions.concat( readBeautyItems(beautyItems.motions3D, 'motions3D') ); } if (beautyItems.stickerhand && Array.isArray(beautyItems.stickerhand)) { motions = motions.concat( readBeautyItems(beautyItems.stickerhand, 'stickerhand') ); } const panel = { key: AdvancedBeautyType.motion, name: '动效', nameEn: AdvancedBeautyType.motion as string, items: motions, }; beautyPanels.set(AdvancedBeautyType.motion, panel); } function readVirtualBackgroundPanel(level: AdvancedBeautyPanelLevel) { const beautyItems = checkPanelConfig( level, AdvancedBeautyType.virtualBackground ); if (!beautyItems) { return; } readSimpleBeautyPanel( AdvancedBeautyType.virtualBackground, '虚拟背景', AdvancedBeautyType.virtualBackground as string, beautyItems.propertyList ); } // read config function readSimpleBeautyPanel( type: AdvancedBeautyType, name: string, nameEn: string, arrayData: any ) { if (arrayData && Array.isArray(arrayData)) { const panel = { key: type, name, nameEn, items: readBeautyItems(arrayData, type), }; if (panel.items && panel.items.length > 0) { beautyPanels.set(type, panel); } } } function readComplexBeautyPanel( type: AdvancedBeautyType, name: string, nameEn: string, dataArray: BeautyItems[] ) { const beautyMap = new Map<string, BeautyItemMap>(); dataArray.forEach(data => { const beautyItems: BeautyItemMap = { name: data.name, nameEn: data.nameEn, items: readBeautyItems(data.items, data.nameEn), }; if (beautyItems.items && beautyItems.items.length > 0) { beautyMap.set(data.nameEn, beautyItems); } }); const panel = { key: type, name, nameEn, items: beautyMap, }; if (beautyMap.size > 0) { beautyPanels.set(type, panel); } } function readBeautyItems(jsonArray: any, keyHeader = '') { if (!jsonArray || !Array.isArray(jsonArray)) { return []; } const basicItems: BeautyItem[] = []; jsonArray.forEach((item: any) => { const url = new URL( `./BeautyConfig/PanelIcon/${item.icon}`, import.meta.url ); const beautyItem: BeautyItem = { key: ``, icon: url.href, name: item.displayName, nameEn: item.displayNameEn, effectName: '', resourcePath: '', backgroundPath: '', }; if (item.effectName) { beautyItem.effectName = item.effectName; } if (item.resourcePath) { beautyItem.resourcePath = item.resourcePath; } if (item.backgroundPath) { beautyItem.backgroundPath = item.backgroundPath; } if (item.minValue !== undefined) { beautyItem.minValue = item.minValue; } if (item.maxValue !== undefined) { beautyItem.maxValue = item.maxValue; } beautyItem.key = `${keyHeader}_${beautyItem.effectName}_${beautyItem.resourcePath}`; basicItems.push(beautyItem); }); return basicItems; }