自定义美颜相关功能
本文将为您介绍如何自定义美颜效果及 UI 样式,及如何管理美颜相关资源。

前提条件
在使用自定义美颜功能前,需保证已 集成进阶美颜效果。
自定义美颜效果
当前美颜效果包支持两种类型:基础版和专业版。
- 基础版:仅包括基本美颜效果。
- 专业版:包括面部美化、面部塑形、面部特征增强、美妆样式、贴纸和滤镜等其他功能。更多详情,请参考 AI 美颜 相关文档。
要自定义美颜效果,请在 ZegoUIKitPrebuiltCallConfig
中配置 beautyConfig
。
美颜效果
美颜效果包括 4 个功能:基础美颜效果、高级美颜效果(面部塑形)、面部特征增强和美妆样式。您可以启用所有四个功能,或者只选择其中几个。
基础版仅包括基本美颜效果。如果您需要其他功能,请选择专业版。
示例 1:选择基础美颜效果和高级美颜效果
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
config.beautyConfig.effectsTypes = customTypes;
//...
显示效果如下:


示例 2:选择所有四个功能
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
customTypes.addAll(ZegoBeautyPluginConfig.makeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.styleMakeupTypes());
config.beautyConfig.effectsTypes = customTypes;
//...
显示效果如下:


滤镜
滤镜包括共 10 种不同的滤镜效果,您可以使用以下代码进行设置:
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
customTypes.addAll(ZegoBeautyPluginConfig.makeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.styleMakeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.filterTypes());
config.beautyConfig.effectsTypes = customTypes;
//...
显示效果如下:

贴纸
贴纸功能需要相对较多的资源,您可以根据需要选择是否集成贴纸功能,详情可参考如下代码。
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
customTypes.addAll(ZegoBeautyPluginConfig.makeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.styleMakeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.filterTypes());
customTypes.addAll(ZegoBeautyPluginConfig.stickerTypes());
config.beautyConfig.effectsTypes = customTypes;
//...
显示效果如下:

背景分割
如需集成背景分割功能,可参考如下代码:
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
customTypes.addAll(ZegoBeautyPluginConfig.makeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.styleMakeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.filterTypes());
customTypes.addAll(ZegoBeautyPluginConfig.stickerTypes());
customTypes.addAll(ZegoBeautyPluginConfig.backgroundTypes());
config.beautyConfig.effectsTypes = customTypes;
//...
对于背景分割中的肖像分割,您需要提供一张背景图片,您可以将图片放入 BackgroundImages 文件夹中,并通过 config 进行设置。
BeautyResources/BackgroundImages/image1.jpg
通过以下代码进行配置:
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.addAll(ZegoBeautyPluginConfig.basicTypes());
customTypes.addAll(ZegoBeautyPluginConfig.advancedTypes());
customTypes.addAll(ZegoBeautyPluginConfig.makeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.styleMakeupTypes());
customTypes.addAll(ZegoBeautyPluginConfig.filterTypes());
customTypes.addAll(ZegoBeautyPluginConfig.stickerTypes());
customTypes.addAll(ZegoBeautyPluginConfig.backgroundTypes());
config.beautyConfig.effectsTypes = customTypes;
config.beautyConfig.segmentationBackgroundImageName = "image1.jpg";
//...
显示效果如下:

进一步自定义
除了上述功能自定义外,您还可以传入自定义的 effectsTypes
列表,决定您想要使用哪种美颜效果。
ZegoUIKitPrebuiltCallConfig config;
// ...
List<ZegoBeautyPluginEffectsType> customTypes = new ArrayList<>();
customTypes.add(ZegoBeautyPluginEffectsType.FILTER_GRAY_FILMLIKE);
customTypes.add(ZegoBeautyPluginEffectsType.FILTER_DREAMY_COZILY);
config.beautyConfig.effectsTypes = customTypes;
//...
自定义 UI
在底部弹出的 BottomBar 支持自定义 UI,每部分内容都支持自定义 ,效果如下。


自定义文字
如需自定义与高级美颜效果特性相关的文本,可以使用 ZegoBeautyPluginInnerText
,详情请参考如下代码:
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.innerText.titleFilter = "滤镜";
config.beautyConfig.innerText.beautyBasicSmoothing = "磨皮";
config.beautyConfig.innerText.beautyMakeupLipstick = "口红";
//...
自定义背景颜色
如需自定义视图的背景颜色,请参考如下代码:
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.uiConfig.backgroundColor = Color.RED;
//...
自定义文字颜色
如需自定义文本颜色,请参考如下代码:
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.uiConfig.selectedHeaderTitleTextColor = Color.GREEN;
config.beautyConfig.uiConfig.selectedTextColor = Color.CYAN;
//...
自定义返回按钮图标
如需自定义返回按钮图标,请参考如下代码:
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.uiConfig.backIcon = getDrawable(R.drawable.custom_back_icon);
//...
保存上次使用的美颜参数
如需保存上次使用的美颜参数,请设置 ZegoUIKitPrebuiltCallConfig.beautyConfig.saveLastBeautyParam
为true
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.saveLastBeautyParam = true;
如果需要重置美颜效果,请使用 ZegoUIKitPrebuiltCallService.resetAllBeautiesToDefault()
.
资源管理
上述的下载资源,包含所有特性的资源,但如果您不需要所有特性,您可以删除一些不必要的资源以减小应用包的大小。
资源描述
-
必要资源(必要的所有特性,不能删除)
BeautyResources/CommonResources.bundle BeautyResources/FaceDetection.model
-
贴纸的必要资源(如果您需要使用贴纸特性,则不能删除)
BeautyResources/StickerBaseResources.bundle
-
背景分割的必要资源(如果您需要使用背景分割特性,则不能删除)
BeautyResources/BackgroundSegmentation.model
-
特性资源文件夹
特性资源文件夹中的每个资源,都对应一个特定的特性。如果您需要使用某个特性,则需要保留相应的资源文件夹,否则,您可以删除它。
BeautyResources/AdvancedResources
特性资源文件夹
特性 | 子特性 | 枚举名称 | 资源名称 |
---|---|---|---|
美颜 | 基础 | BASIC_SMOOTHING | - |
BASIC_SKIN_TONE | - | ||
BASIC_BLUSHER | - | ||
BASIC_SHARPENING | - | ||
BASIC_WRINKLES | - | ||
BASIC_DARK_CIRCLES | - | ||
高级 | ADVANCED_FACE_SLIMMING | - | |
ADVANCED_EYES_ENLARGING | - | ||
ADVANCED_EYES_BRIGHTENING | - | ||
ADVANCED_CHIN_LENGTHENING | - | ||
ADVANCED_MOUTH_RESHAPE | - | ||
ADVANCED_TEETH_WHITENING | - | ||
ADVANCED_NOSE_SLIMMING | - | ||
ADVANCED_NOSE_LENGTHENING | - | ||
ADVANCED_FACE_SHORTENING | - | ||
ADVANCED_MANDIBLE_SLIMMING | - | ||
ADVANCED_CHEEKBONE_SLIMMING | - | ||
ADVANCED_FOREHEAD_SLIMMING | - | ||
美妆 | MAKEUP_LIPSTICK_CAMEO_PINK | BeautyResources/AdvancedResources/beautyMakeupLipstickCameoPink.bundle | |
MAKEUP_LIPSTICK_SWEET_ORANGE | BeautyResources/AdvancedResources/beautyMakeupLipstickSweetOrange.bundle | ||
MAKEUP_LIPSTICK_RUST_RED | BeautyResources/AdvancedResources/beautyMakeupLipstickRustRed.bundle | ||
MAKEUP_LIPSTICK_CORAL | BeautyResources/AdvancedResources/beautyMakeupLipstickCoral.bundle | ||
MAKEUP_LIPSTICK_RED_VELVET | BeautyResources/AdvancedResources/beautyMakeupLipstickRedVelvet.bundle | ||
MAKEUP_BLUSHER_SLIGHTLY_DRUNK | BeautyResources/AdvancedResources/beautyMakeupBlusherSlightlyDrunk.bundle | ||
MAKEUP_BLUSHER_PEACH | BeautyResources/AdvancedResources/beautyMakeupBlusherPeach.bundle | ||
MAKEUP_BLUSHER_MILKY_ORANGE | BeautyResources/AdvancedResources/beautyMakeupBlusherMilkyOrange.bundle | ||
MAKEUP_BLUSHER_APRICOT_PINK | BeautyResources/AdvancedResources/beautyMakeupBlusherApricotPink.bundle | ||
MAKEUP_BLUSHER_SWEET_ORANGE | BeautyResources/AdvancedResources/beautyMakeupBlusherSweetOrange.bundle | ||
MAKEUP_EYELASHES_NATURAL | BeautyResources/AdvancedResources/beautyMakeupEyelashesNatural.bundle | ||
MAKEUP_EYELASHES_TENDER | BeautyResources/AdvancedResources/beautyMakeupEyelashesTender.bundle | ||
MAKEUP_EYELASHES_CURL | BeautyResources/AdvancedResources/beautyMakeupEyelashesCurl.bundle | ||
MAKEUP_EYELASHES_EVERLONG | BeautyResources/AdvancedResources/beautyMakeupEyelashesEverlong.bundle | ||
MAKEUP_EYELASHES_THICK | BeautyResources/AdvancedResources/beautyMakeupEyelashesThick.bundle | ||
MAKEUP_EYELINER_NATURAL | BeautyResources/AdvancedResources/beautyMakeupEyelinerNatural.bundle | ||
MAKEUP_EYELINER_CAT_EYE | BeautyResources/AdvancedResources/beautyMakeupEyelinerCatEye.bundle | ||
MAKEUP_EYELINER_NAUGHTY | BeautyResources/AdvancedResources/beautyMakeupEyelinerNaughty.bundle | ||
MAKEUP_EYELINER_INNOCENT | BeautyResources/AdvancedResources/beautyMakeupEyelinerInnocent.bundle | ||
MAKEUP_EYELINER_DIGNIFIED | BeautyResources/AdvancedResources/beautyMakeupEyelinerDignified.bundle | ||
MAKEUP_EYESHADOW_PINK_MIST | BeautyResources/AdvancedResources/beautyMakeupEyeshadowPinkMist.bundle | ||
MAKEUP_EYESHADOW_SHIMMER_PINK | BeautyResources/AdvancedResources/beautyMakeupEyeshadowShimmerPink.bundle | ||
MAKEUP_EYESHADOW_TEA_BROWN | BeautyResources/AdvancedResources/beautyMakeupEyeshadowTeaBrown.bundle | ||
MAKEUP_EYESHADOW_BRIGHT_ORANGE | BeautyResources/AdvancedResources/beautyMakeupEyeshadowBrightOrange.bundle | ||
MAKEUP_EYESHADOW_MOCHA_BROWN | BeautyResources/AdvancedResources/beautyMakeupEyeshadowMochaBrown.bundle | ||
MAKEUP_COLORED_CONTACTS_DARKNIGHT_BLACK | BeautyResources/AdvancedResources/beautyMakeupColoredContactsDarknightBlack.bundle | ||
MAKEUP_COLORED_CONTACTS_STARRY_BLUE | BeautyResources/AdvancedResources/beautyMakeupColoredContactsStarryBlue.bundle | ||
MAKEUP_COLORED_CONTACTS_BROWN_GREEN | BeautyResources/AdvancedResources/beautyMakeupColoredContactsBrownGreen.bundle | ||
MAKEUP_COLORED_CONTACTS_LIGHTS_BROWN | BeautyResources/AdvancedResources/beautyMakeupColoredContactsLightsBrown.bundle | ||
MAKEUP_COLORED_CONTACTS_CHOCOLATE_BROWN | BeautyResources/AdvancedResources/beautyMakeupColoredContactsChocolateBrown.bundle | ||
风格妆 | STYLE_MAKEUP_INNOCENT_EYES | BeautyResources/AdvancedResources/beautyStyleMakeupInnocentEyes.bundle | |
STYLE_MAKEUP_MILKY_EYES | BeautyResources/AdvancedResources/beautyStyleMakeupMilkyEyes.bundle | ||
STYLE_MAKEUP_CUTIE_COOL | BeautyResources/AdvancedResources/beautyStyleMakeupCutieCool.bundle | ||
STYLE_MAKEUP_PURE_SEXY | BeautyResources/AdvancedResources/beautyStyleMakeupPureSexy.bundle | ||
STYLE_MAKEUP_FLAWLESS | BeautyResources/AdvancedResources/beautyStyleMakeupFlawless.bundle | ||
滤镜梦境 | 自然 | FILTER_NATURAL_CREAMY | BeautyResources/AdvancedResources/filterNaturalCreamy.bundle |
FILTER_NATURAL_BRIGHTEN | BeautyResources/AdvancedResources/filterNaturalBrighten.bundle | ||
FILTER_NATURAL_FRESH | BeautyResources/AdvancedResources/filterNaturalFresh.bundle | ||
FILTER_NATURAL_AUTUMN | BeautyResources/AdvancedResources/filterNaturalAutumn.bundle | ||
灰调 | FILTER_GRAY_MONET | BeautyResources/AdvancedResources/filterGrayMonet.bundle | |
FILTER_GRAY_NIGHT | BeautyResources/AdvancedResources/filterGrayNight.bundle | ||
FILTER_GRAY_FILMLIKE | BeautyResources/AdvancedResources/filterGrayFilmlike.bundle | ||
梦境 | FILTER_DREAMY_SUNSET | BeautyResources/AdvancedResources/filterDreamySunset.bundle | |
FILTER_DREAMY_COZILY | BeautyResources/AdvancedResources/filterDreamyCozily.bundle | ||
FILTER_DREAMY_SWEET | BeautyResources/AdvancedResources/filterDreamySweet.bundle | ||
贴纸 | 贴纸 | STICKER_ANIMAL | - |
STICKER_DIVE | BeautyResources/AdvancedResources/stickerDive.bundle | ||
STICKER_CAT | BeautyResources/AdvancedResources/stickerCat.bundle | ||
STICKER_WATERMELON | BeautyResources/AdvancedResources/stickerWatermelon.bundle | ||
STICKER_DEER | BeautyResources/AdvancedResources/stickerDeer.bundle | ||
STICKER_COOL_GIRL | BeautyResources/AdvancedResources/stickerCoolGirl.bundle | ||
STICKER_CLOWN | BeautyResources/AdvancedResources/stickerClown.bundle | ||
STICKER_CLAW_MACHINE | BeautyResources/AdvancedResources/stickerClawMachine.bundle | ||
STICKER_SAILOR_MOON | BeautyResources/AdvancedResources/stickerSailorMoon.bundle | ||
背景 | - | BACKGROUND_PORTRAIT_SEGMENTATION | - |
BACKGROUND_MOSAICING | - | ||
BACKGROUND_GAUSSIAN_BLUR | - |
监听 BeautyPlugin 事件
您可以通过 config.beautyConfig.beautyEventHandler
监听 BeautyPlugin 事件,如果您在 config.beautyConfig
中启用了 faceDetection,可以在 onFaceDetectionResult
中接收面部检测数据。
请特别注意 onInitResult
回调,如果初始化失败,美颜功能将无法使用,主要原因如下:
- 当前应用的 ApplicationID 和 AppID 与注册的 ApplicationID 和 AppID 不一致。
- 或 License 许可证已过期,请联系 ZEGO 技术支持处理。
ZegoUIKitPrebuiltCallConfig config;
// ...
config.beautyConfig.beautyEventHandler = new IBeautyEventHandler() {
@Override
public void onInitResult(int errorCode, String message) {
super.onInitResult(errorCode, message);
Log.d(TAG, "onInitResult() called with: errorCode = [" + errorCode + "], message = [" + message + "]");
}
@Override
public void onError(int errorCode, String message) {
super.onError(errorCode, message);
Log.d(TAG, "onError() called with: errorCode = [" + errorCode + "], message = [" + message + "]");
}
@Override
public void onFaceDetectionResult(ZegoBeautyPluginFaceDetectionResult[] results) {
super.onFaceDetectionResult(results);
Log.d(TAG, "onFaceDetectionResult() called with: results = [" + results + "]");
}
};
//...