补充美颜模型和美颜配置
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
import com.faceunity.core.model.animationFilter.AnimationFilterTypeEnum;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.AnimationFilterBean;
|
||||
import com.yunbao.faceunity.entity.AnimojiBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* DESC:Animoji数据构造
|
||||
* Created on 2021/3/25
|
||||
*/
|
||||
public class AnimojiSource {
|
||||
|
||||
|
||||
/**
|
||||
* 构造贴图数据
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<AnimojiBean> buildAnimojis() {
|
||||
ArrayList<AnimojiBean> array = new ArrayList<>();
|
||||
array.add(new AnimojiBean(R.mipmap.icon_control_delete_all, null));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_cartoon_princess, "animoji/cartoon_princess_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_qgirl, "animoji/qgirl_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_kaola, "animoji/kaola_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_wuxia, "animoji/wuxia_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_baihu, "animoji/baihu_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_frog_st, "animoji/frog_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_huangya, "animoji/huangya_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_hetun, "animoji/hetun_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_douniuquan, "animoji/douniuquan_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_hashiqi, "animoji/hashiqi_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_baimao, "animoji/baimao_Animoji.bundle"));
|
||||
array.add(new AnimojiBean(R.mipmap.icon_animoji_kuloutou, "animoji/kuloutou_Animoji.bundle"));
|
||||
return array;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造滤镜数据
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<AnimationFilterBean> buildFilters() {
|
||||
ArrayList<AnimationFilterBean> filters = new ArrayList<>();
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_control_delete_all, AnimationFilterTypeEnum.Origin));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_anime, AnimationFilterTypeEnum.Comic));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_portrait_dynamiceffect, AnimationFilterTypeEnum.Portrait));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_sketch, AnimationFilterTypeEnum.Sketch));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_oilpainting, AnimationFilterTypeEnum.Oil));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_sandlpainting, AnimationFilterTypeEnum.Sand));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_penpainting, AnimationFilterTypeEnum.Pen));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_pencilpainting, AnimationFilterTypeEnum.Pencil));
|
||||
filters.add(new AnimationFilterBean(R.mipmap.icon_cartoon_graffiti, AnimationFilterTypeEnum.Granffiti));
|
||||
return filters;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
import com.faceunity.core.avatar.avatar.Color;
|
||||
import com.faceunity.core.avatar.avatar.TransForm;
|
||||
import com.faceunity.core.avatar.model.Avatar;
|
||||
import com.faceunity.core.avatar.model.Scene;
|
||||
import com.faceunity.core.entity.FUAnimationData;
|
||||
import com.faceunity.core.entity.FUAvatarAnimFilterParams;
|
||||
import com.faceunity.core.entity.FUBundleData;
|
||||
import com.faceunity.core.entity.FUColorRGBData;
|
||||
import com.faceunity.core.entity.FUCoordinate3DData;
|
||||
import com.faceunity.core.entity.FUTranslationScale;
|
||||
import com.faceunity.core.entity.FUVisibleBundleData;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.AvatarBean;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* DESC:Avatar数据构造
|
||||
* Created on 2021/3/30
|
||||
*/
|
||||
public class AvatarSource {
|
||||
// Avatar
|
||||
private static String BUNDLE_AVATAR_CONTROLLER = "graphics" + File.separator + "controller_cpp.bundle";
|
||||
private static String BUNDLE_AVATAR_CONFIG = "pta" + File.separator + "controller_config.bundle";
|
||||
private static String BUNDLE_AVATAR_BACKGROUND = "pta" + File.separator + "default_bg.bundle";
|
||||
|
||||
public static String BOY = "boy";
|
||||
public static String GIRL = "girl";
|
||||
|
||||
/**
|
||||
* 构造成员列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<AvatarBean> buildMembers() {
|
||||
ArrayList<AvatarBean> avatarBeans = new ArrayList<>();
|
||||
avatarBeans.add(new AvatarBean(R.mipmap.icon_avatar_female, GIRL));
|
||||
avatarBeans.add(new AvatarBean(R.mipmap.icon_avatar_male, BOY));
|
||||
return avatarBeans;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造场景
|
||||
*
|
||||
* @param avatar
|
||||
* @return
|
||||
*/
|
||||
public static Scene buildSceneModel(Avatar avatar) {
|
||||
FUBundleData controlBundle = new FUBundleData(BUNDLE_AVATAR_CONTROLLER);
|
||||
FUBundleData avatarConfig = new FUBundleData(BUNDLE_AVATAR_CONFIG);
|
||||
Scene sceneModel = new Scene(controlBundle, avatarConfig);
|
||||
sceneModel.addAvatar(avatar);
|
||||
sceneModel.processorConfig.setEnableHumanProcessor(true);
|
||||
return sceneModel;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取男孩对象
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Avatar buildBoyData(boolean isFull) {
|
||||
String ptaBoyDir = "pta/boy/";
|
||||
ArrayList<FUBundleData> components = new ArrayList();
|
||||
components.add(new FUBundleData(ptaBoyDir + "head.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "midBody_male.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "male_hair_5.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "toushi_7.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "peishi_erding_2.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "waitao_3.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "kuzi_changku_5.bundle"));
|
||||
components.add(new FUBundleData(ptaBoyDir + "xiezi_tuoxie_2.bundle"));
|
||||
int[] invisibleList = {2,3,4};
|
||||
components.add(new FUVisibleBundleData("",invisibleList,""));
|
||||
ArrayList<FUAnimationData> animations = buildAnimations();
|
||||
Avatar model = new Avatar(components);
|
||||
for (FUAnimationData animationData:animations){
|
||||
model.animation.addAnimation(animationData);
|
||||
}
|
||||
model.color.setColor(Color.Skin,new FUColorRGBData(227.0,158.0,132.0));
|
||||
TransForm avatarTransForm = model.transForm;
|
||||
avatarTransForm.setInstanceEnableHumanAnimDriver(true);
|
||||
avatarTransForm.setPosition(isFull ? new FUCoordinate3DData(0.0, 58.14, -618.94) : new FUCoordinate3DData(0.0, 11.76, -183.89));
|
||||
return model;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取女孩对象
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Avatar buildGirlData(boolean isFull) {
|
||||
String ptaGirlDir = "pta/girl/";
|
||||
ArrayList<FUBundleData> components = new ArrayList();
|
||||
components.add(new FUBundleData(ptaGirlDir + "head.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "midBody_female.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "female_hair_23.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "toushi_5.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "taozhuang_12.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "facemakeup_3.bundle"));
|
||||
components.add(new FUBundleData(ptaGirlDir + "xiezi_danxie.bundle"));
|
||||
int[] invisibleList = {2,3,4};
|
||||
components.add(new FUVisibleBundleData("",invisibleList,""));
|
||||
ArrayList<FUAnimationData> animations = buildAnimations();
|
||||
Avatar model = new Avatar(components );
|
||||
for (FUAnimationData animationData:animations){
|
||||
model.animation.addAnimation(animationData);
|
||||
}
|
||||
model.color.setColor(Color.Skin,new FUColorRGBData(255.0,202.0,186.0));
|
||||
TransForm avatarTransForm = model.transForm;
|
||||
avatarTransForm.setInstanceEnableHumanAnimDriver(true);
|
||||
avatarTransForm.setPosition(isFull ? new FUCoordinate3DData(0.0, 58.14, -618.94) : new FUCoordinate3DData(0.0, 11.76, -183.89));
|
||||
return model;
|
||||
}
|
||||
|
||||
/**
|
||||
* 外部传入组件和动画构建
|
||||
*
|
||||
* @param strComponents 组件bundle
|
||||
* @param strAnimations 动画bundle
|
||||
* @return
|
||||
*/
|
||||
public static Avatar buildAvatarData(ArrayList<String> strComponents, ArrayList<String> strAnimations) {
|
||||
ArrayList<FUBundleData> components = new ArrayList();
|
||||
for (String component : strComponents) {
|
||||
components.add(new FUBundleData(component));
|
||||
}
|
||||
|
||||
Avatar model = new Avatar(components);
|
||||
for (String animation : strAnimations) {
|
||||
model.animation.addAnimation(new FUAnimationData(new FUBundleData(animation)));
|
||||
}
|
||||
//位置等avatar基本参数构建
|
||||
TransForm avatarTransForm = model.transForm;
|
||||
avatarTransForm.setPosition(new FUCoordinate3DData(20, 45, -618.94));
|
||||
avatarTransForm.setTranslationScale(new FUTranslationScale(0.0f,0.0f,0.0f));
|
||||
avatarTransForm.setInstanceEnableHumanAnimDriver(true);
|
||||
model.animation.setHumanProcessorSetAvatarAnimFilterParams(new FUAvatarAnimFilterParams(8, 0.09f, 0.120f));
|
||||
return model;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造动画参数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<FUAnimationData> buildAnimations() {
|
||||
String animDir = "pta/gesture/";
|
||||
ArrayList<FUAnimationData> animations = new ArrayList();
|
||||
animations.add(new FUAnimationData(new FUBundleData(animDir + "anim_idle.bundle")));
|
||||
return animations;
|
||||
}
|
||||
|
||||
public static void setSceneBackGround(Scene sceneModel, boolean hasBackGround) {
|
||||
sceneModel.setBackgroundBundle(hasBackGround ? new FUBundleData(BUNDLE_AVATAR_BACKGROUND) : null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
import static android.content.Context.MODE_PRIVATE;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
|
||||
import com.faceunity.core.controller.bgSegGreen.BgSegGreenParam;
|
||||
import com.faceunity.core.entity.FUBundleData;
|
||||
import com.faceunity.core.model.bgSegGreen.BgSegGreen;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.BgSegGreenBackgroundBean;
|
||||
import com.yunbao.faceunity.entity.BgSegGreenBean;
|
||||
import com.yunbao.faceunity.entity.BgSegGreenSafeAreaBean;
|
||||
import com.yunbao.faceunity.entity.ModelAttributeData;
|
||||
import com.yunbao.faceunity.utils.FaceUnityConfig;
|
||||
import com.yunbao.faceunity.utils.FaceUnityData;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* DESC:绿幕抠像数据构造
|
||||
* Created on 2021/3/25
|
||||
*/
|
||||
public class BgSegGreenSource {
|
||||
private static final String GREEN_SAFE_AREA_CUSTOM = "green_safe_area_custom";
|
||||
|
||||
private static double SIMILARITY = 0.5;//相似度
|
||||
private static double SMOOTHNESS = 0.3;//平滑度
|
||||
private static double TRANSPARENCY = 0.67;//透明度
|
||||
|
||||
/**
|
||||
* 构造绿幕抠像对象
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static BgSegGreen buildBgSegGreen() {
|
||||
BgSegGreen bgSegGreen = new BgSegGreen(new FUBundleData(FaceUnityConfig.BUNDLE_BG_SEG_GREEN));
|
||||
bgSegGreen.setSimilarity(BgSegGreenSource.SIMILARITY);
|
||||
bgSegGreen.setSmoothness(BgSegGreenSource.SMOOTHNESS);
|
||||
bgSegGreen.setTransparency(BgSegGreenSource.TRANSPARENCY);
|
||||
return bgSegGreen;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模型属性扩展数据
|
||||
*
|
||||
* @return HashMap<String, ModelAttributeData>
|
||||
*/
|
||||
public static HashMap<String, ModelAttributeData> buildModelAttributeRange() {
|
||||
HashMap<String, ModelAttributeData> params = new HashMap<String, ModelAttributeData>();
|
||||
params.put(BgSegGreenParam.SIMILARITY, new ModelAttributeData(SIMILARITY, 0.0, 0.0, 1.0));
|
||||
params.put(BgSegGreenParam.SMOOTHNESS, new ModelAttributeData(SMOOTHNESS, 0.0, 0.0, 1.0));
|
||||
params.put(BgSegGreenParam.TRANSPARENCY, new ModelAttributeData(TRANSPARENCY, 0.0, 0.0, 1.0));
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绿幕抠像功能列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<BgSegGreenBean> buildBgSegGreenAction() {
|
||||
ArrayList<BgSegGreenBean> actions = new ArrayList<BgSegGreenBean>();
|
||||
actions.add(new BgSegGreenBean(BgSegGreenParam.RGB_COLOR, R.string.bg_seg_green_key_color, R.drawable.icon_green_color_selector, R.drawable.icon_green_color_selector, BgSegGreenBean.ButtonType.NORMAL2_BUTTON));
|
||||
actions.add(new BgSegGreenBean(BgSegGreenParam.SIMILARITY, R.string.bg_seg_green_similarity, R.drawable.icon_green_similarityr_close_selector, R.drawable.icon_green_similarityr_open_selector, BgSegGreenBean.ButtonType.NORMAL1_BUTTON));
|
||||
actions.add(new BgSegGreenBean(BgSegGreenParam.SMOOTHNESS, R.string.bg_seg_green_smooth, R.drawable.icon_green_smooth_close_selector, R.drawable.icon_green_similarityr_open_selector, BgSegGreenBean.ButtonType.NORMAL1_BUTTON));
|
||||
actions.add(new BgSegGreenBean(BgSegGreenParam.TRANSPARENCY, R.string.bg_seg_green_alpha, R.drawable.icon_green_transparency_close_selector, R.drawable.icon_green_transparency_open_selector, BgSegGreenBean.ButtonType.NORMAL1_BUTTON));
|
||||
actions.add(new BgSegGreenBean("", R.string.bg_seg_green_safe_area, R.drawable.icon_green_safe_area_close_selector, R.drawable.icon_green_safe_area_open_selector, BgSegGreenBean.ButtonType.SWITCH_BUTTON));
|
||||
return actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绿幕抠像安全区域功能列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<BgSegGreenSafeAreaBean> buildBgSegGreenSafeArea() {
|
||||
String fileDir = "bg_seg_green" + File.separator + "sample" + File.separator;
|
||||
ArrayList<BgSegGreenSafeAreaBean> safeAreaBeans = new ArrayList<BgSegGreenSafeAreaBean>();
|
||||
safeAreaBeans.add(new BgSegGreenSafeAreaBean(R.mipmap.icon_control_return, BgSegGreenSafeAreaBean.ButtonType.BACK_BUTTON));//返回
|
||||
safeAreaBeans.add(new BgSegGreenSafeAreaBean(R.mipmap.icon_control_none, BgSegGreenSafeAreaBean.ButtonType.NONE_BUTTON));//不选
|
||||
safeAreaBeans.add(new BgSegGreenSafeAreaBean(R.mipmap.icon_control_square_add, BgSegGreenSafeAreaBean.ButtonType.NORMAL2_BUTTON));//自定义
|
||||
BgSegGreenSafeAreaBean customerBean = buildSafeAreaCustomBean(getCachePortraitSegment());
|
||||
if (customerBean != null) {
|
||||
safeAreaBeans.add(customerBean);
|
||||
}
|
||||
safeAreaBeans.add(new BgSegGreenSafeAreaBean(R.mipmap.icon_green_safe_area1, BgSegGreenSafeAreaBean.ButtonType.NORMAL1_BUTTON,fileDir + "safe_area1.jpg"));//区域一
|
||||
safeAreaBeans.add(new BgSegGreenSafeAreaBean(R.mipmap.icon_green_safe_area2, BgSegGreenSafeAreaBean.ButtonType.NORMAL1_BUTTON,fileDir + "safe_area2.jpg"));//区域二
|
||||
return safeAreaBeans;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造自定义安全区域图片
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public static BgSegGreenSafeAreaBean buildSafeAreaCustomBean(String path) {
|
||||
if (path != null && path.trim().length() > 0 && new File(path).exists()) {
|
||||
saveCachePortraitSegment(path);
|
||||
return new BgSegGreenSafeAreaBean(0, BgSegGreenSafeAreaBean.ButtonType.NORMAL1_BUTTON, path,false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绿幕抠像背景列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<BgSegGreenBackgroundBean> buildBgSegGreenBackground() {
|
||||
ArrayList<BgSegGreenBackgroundBean> backgroundBeans = new ArrayList<>();
|
||||
String fileDir = "bg_seg_green" + File.separator + "sample" + File.separator;
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.cancel, R.mipmap.icon_control_none, null));
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_science, R.mipmap.icon_green_science, fileDir + "science.mp4"));
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_beach, R.mipmap.icon_green_bg_beach, fileDir + "beach.mp4"));
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_classroom, R.mipmap.icon_green_bg_classroom, fileDir + "classroom.mp4"));
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_ink, R.mipmap.icon_green_ink_painting, fileDir + "ink_painting.mp4"));
|
||||
backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_forest, R.mipmap.icon_green_bg_forest, fileDir + "forest.mp4"));
|
||||
return backgroundBeans;
|
||||
}
|
||||
|
||||
/**
|
||||
* 缓存自定义安全区域图片
|
||||
*
|
||||
* @param path
|
||||
*/
|
||||
public static void saveCachePortraitSegment(String path) {
|
||||
SharedPreferences sp = FaceUnityData.mApplication.getSharedPreferences(GREEN_SAFE_AREA_CUSTOM, MODE_PRIVATE);
|
||||
sp.edit().putString(GREEN_SAFE_AREA_CUSTOM, path).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义安全区域图片
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String getCachePortraitSegment() {
|
||||
SharedPreferences sp = FaceUnityData.mApplication.getSharedPreferences(GREEN_SAFE_AREA_CUSTOM, MODE_PRIVATE);
|
||||
return sp.getString(GREEN_SAFE_AREA_CUSTOM, "");
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,24 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
|
||||
import com.faceunity.core.controller.facebeauty.FaceBeautyParam;
|
||||
import com.faceunity.core.entity.FUBundleData;
|
||||
import com.faceunity.core.enumeration.FUFaceBeautyMultiModePropertyEnum;
|
||||
import com.faceunity.core.enumeration.FUFaceBeautyPropertyModeEnum;
|
||||
import com.faceunity.core.faceunity.FURenderKit;
|
||||
import com.faceunity.core.model.facebeauty.FaceBeauty;
|
||||
import com.faceunity.core.model.facebeauty.FaceBeautyBlurTypeEnum;
|
||||
import com.faceunity.core.model.facebeauty.FaceBeautyFilterEnum;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.data.FaceBeautyData;
|
||||
import com.yunbao.faceunity.data.FaceBeautyDataFactory;
|
||||
import com.yunbao.faceunity.entity.FaceBeautyBean;
|
||||
import com.yunbao.faceunity.entity.FaceBeautyFilterBean;
|
||||
import com.yunbao.faceunity.entity.FaceBeautyStyleBean;
|
||||
import com.yunbao.faceunity.entity.ModelAttributeData;
|
||||
import com.yunbao.faceunity.utils.FUUtils;
|
||||
import com.yunbao.faceunity.utils.FaceUnityConfig;
|
||||
import com.yunbao.faceunity.utils.FuDeviceUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -22,36 +28,76 @@ import java.util.HashMap;
|
||||
*/
|
||||
public class FaceBeautySource {
|
||||
|
||||
public static String BUNDLE_FACE_BEAUTIFICATION = "graphics" + File.separator + "face_beautification.bundle";
|
||||
|
||||
|
||||
private static ArrayList<FaceBeautyFilterBean> filters = new ArrayList<>();
|
||||
private static FaceBeautyData faceBeautyData;
|
||||
|
||||
/**
|
||||
* 获取默认推荐美颜模型
|
||||
* 一个app生命周期请求一次
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static FaceBeauty getDefaultFaceBeauty() {
|
||||
FaceBeauty recommendFaceBeauty = new FaceBeauty(new FUBundleData(BUNDLE_FACE_BEAUTIFICATION));
|
||||
recommendFaceBeauty.setFilterName(FaceBeautyFilterEnum.ZIRAN_1);
|
||||
recommendFaceBeauty.setFilterIntensity(0.4);
|
||||
/*美肤*/
|
||||
recommendFaceBeauty.setBlurType(FaceBeautyBlurTypeEnum.FineSkin);
|
||||
recommendFaceBeauty.setSharpenIntensity(0.2);
|
||||
recommendFaceBeauty.setColorIntensity(0.3);
|
||||
recommendFaceBeauty.setRedIntensity(0.3);
|
||||
recommendFaceBeauty.setBlurIntensity(4.2);
|
||||
/*美型*/
|
||||
recommendFaceBeauty.setFaceShapeIntensity(1.0);
|
||||
recommendFaceBeauty.setEyeEnlargingIntensityV2(0.4);
|
||||
recommendFaceBeauty.setCheekVIntensity(0.5);
|
||||
recommendFaceBeauty.setNoseIntensityV2(0.5);
|
||||
recommendFaceBeauty.setForHeadIntensityV2(0.3);
|
||||
recommendFaceBeauty.setMouthIntensityV2(0.4);
|
||||
recommendFaceBeauty.setChinIntensity(0.3);
|
||||
FaceBeauty recommendFaceBeauty = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
if (FaceUnityConfig.OPEN_FACE_BEAUTY_TO_FILE)
|
||||
faceBeautyData = FUUtils.loadFaceBeautyData();
|
||||
if (faceBeautyData != null) {
|
||||
//有本地缓存
|
||||
FaceBeautyDataFactory.setDiskCurrentStyleIndex(faceBeautyData.styleTypeIndex);
|
||||
FUUtils.setFaceBeauty(faceBeautyData, recommendFaceBeauty);
|
||||
} else {
|
||||
//没有本地缓存
|
||||
recommendFaceBeauty.setFilterName(FaceBeautyFilterEnum.ZIRAN_2);
|
||||
recommendFaceBeauty.setFilterIntensity(0.4);
|
||||
/*美肤*/
|
||||
recommendFaceBeauty.setSharpenIntensity(0.2);
|
||||
recommendFaceBeauty.setColorIntensity(0.3);
|
||||
recommendFaceBeauty.setRedIntensity(0.3);
|
||||
recommendFaceBeauty.setBlurIntensity(4.2);
|
||||
/*美型*/
|
||||
recommendFaceBeauty.setFaceShapeIntensity(1.0);
|
||||
recommendFaceBeauty.setEyeEnlargingIntensity(0.4);
|
||||
recommendFaceBeauty.setCheekVIntensity(0.5);
|
||||
recommendFaceBeauty.setNoseIntensity(0.5);
|
||||
recommendFaceBeauty.setForHeadIntensity(0.3);
|
||||
recommendFaceBeauty.setMouthIntensity(0.4);
|
||||
recommendFaceBeauty.setChinIntensity(0.3);
|
||||
//性能最优策略
|
||||
if (FaceUnityConfig.DEVICE_LEVEL > FuDeviceUtils.DEVICE_LEVEL_MID) {
|
||||
setFaceBeautyPropertyMode(recommendFaceBeauty);
|
||||
}
|
||||
}
|
||||
|
||||
return recommendFaceBeauty;
|
||||
}
|
||||
|
||||
/**
|
||||
* 高端机的时候,开启4个相对吃性能的模式
|
||||
* 1.祛黑眼圈 MODE2
|
||||
* 2.祛法令纹 MODE2
|
||||
* 3.大眼 MODE3
|
||||
* 4.嘴型 MODE3
|
||||
*/
|
||||
private static void setFaceBeautyPropertyMode(FaceBeauty faceBeauty) {
|
||||
/*
|
||||
* 多模式属性
|
||||
* 属性名称|支持模式|默认模式|最早支持版本
|
||||
* 美白 colorIntensity|MODE1 MODE2|MODE2|MODE2 8.2.0;
|
||||
* 祛黑眼圈 removePouchIntensity|MODE1 MODE2|MODE2|MODE2 8.2.0;
|
||||
* 祛法令纹 removeLawPatternIntensity|MODE1 MODE1|MODE2|MODE2 8.2.0;
|
||||
* 窄脸程度 cheekNarrowIntensity|MODE1 MODE2|MODE2|MODE2 8.0.0;
|
||||
* 小脸程度 cheekSmallIntensity|MODE1 MODE2|MODE2|MODE2 8.0.0;
|
||||
* 大眼程度 eyeEnlargingIntensity|MODE1 MODE2 MODE3|MODE3|MODE2 8.0.0;MODE3 8.2.0;
|
||||
* 额头调整程度 forHeadIntensity|MODE1 MODE2|MODE2|MODE2 8.0.0;
|
||||
* 瘦鼻程度 noseIntensity|MODE1 MODE2|MODE2|MODE2 8.0.0;
|
||||
* 嘴巴调整程度 mouthIntensity|MODE1 MODE2 MODE3|MODE3|MODE2 8.0.0;MODE3 8.2.0;
|
||||
*/
|
||||
faceBeauty.addPropertyMode(FUFaceBeautyMultiModePropertyEnum.REMOVE_POUCH_INTENSITY, FUFaceBeautyPropertyModeEnum.MODE2);
|
||||
faceBeauty.addPropertyMode(FUFaceBeautyMultiModePropertyEnum.REMOVE_NASOLABIAL_FOLDS_INTENSITY, FUFaceBeautyPropertyModeEnum.MODE2);
|
||||
faceBeauty.addPropertyMode(FUFaceBeautyMultiModePropertyEnum.EYE_ENLARGING_INTENSITY, FUFaceBeautyPropertyModeEnum.MODE3);
|
||||
faceBeauty.addPropertyMode(FUFaceBeautyMultiModePropertyEnum.MOUTH_INTENSITY, FUFaceBeautyPropertyModeEnum.MODE3);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化美肤参数
|
||||
@@ -98,15 +144,14 @@ public class FaceBeautySource {
|
||||
params.add(
|
||||
new FaceBeautyBean(
|
||||
FaceBeautyParam.REMOVE_POUCH_INTENSITY, R.string.beauty_micro_pouch,
|
||||
R.drawable.icon_beauty_skin_dark_circles_close_selector, R.drawable.icon_beauty_skin_dark_circles_open_selector
|
||||
)
|
||||
R.drawable.icon_beauty_skin_dark_circles_close_selector, R.drawable.icon_beauty_skin_dark_circles_open_selector)
|
||||
);
|
||||
params.add(
|
||||
new FaceBeautyBean(
|
||||
FaceBeautyParam.REMOVE_NASOLABIAL_FOLDS_INTENSITY, R.string.beauty_micro_nasolabial,
|
||||
R.drawable.icon_beauty_skin_wrinkle_close_selector, R.drawable.icon_beauty_skin_wrinkle_open_selector
|
||||
)
|
||||
R.drawable.icon_beauty_skin_wrinkle_close_selector, R.drawable.icon_beauty_skin_wrinkle_open_selector)
|
||||
);
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
@@ -117,6 +162,13 @@ public class FaceBeautySource {
|
||||
*/
|
||||
public static ArrayList<FaceBeautyBean> buildShapeParams() {
|
||||
ArrayList<FaceBeautyBean> params = new ArrayList<>();
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// "", R.string.avatar_face_face,
|
||||
// R.drawable.icon_beauty_shape_face_shape_close_selector, R.drawable.icon_beauty_shape_face_shape_open_selector, FaceBeautyBean.ButtonType.SUB_ITEM_BUTTON
|
||||
// )
|
||||
// );
|
||||
|
||||
//瘦脸
|
||||
params.add(
|
||||
new FaceBeautyBean(
|
||||
@@ -257,6 +309,64 @@ public class FaceBeautySource {
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载脸型子项
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<FaceBeautyBean> buildFaceShapeSubItemParams() {
|
||||
return buildSubItemParams(FaceBeautyParam.FACE_SHAPE);
|
||||
}
|
||||
|
||||
public static ArrayList<FaceBeautyBean> buildSubItemParams(String key) {
|
||||
ArrayList<FaceBeautyBean> params = new ArrayList<>();
|
||||
// if (key != null && !key.isEmpty()) {
|
||||
// if (key.equals(FaceBeautyParam.FACE_SHAPE)) {
|
||||
// //返回
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// "", R.string.back,
|
||||
// R.mipmap.icon_beauty_back, R.mipmap.icon_beauty_back, FaceBeautyBean.ButtonType.BACK_BUTTON
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// //自然 V脸 -> 自然脸
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// FaceBeautyParam.CHEEK_V_INTENSITY, R.string.beauty_box_cheek_natural,
|
||||
// R.drawable.icon_beauty_shape_face_natural_close_selector, R.drawable.icon_beauty_shape_face_natural_open_selector
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// //女神 瘦脸 -> 女神脸
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// FaceBeautyParam.CHEEK_THINNING_INTENSITY, R.string.beauty_box_cheek_goddess,
|
||||
// R.drawable.icon_beauty_shape_face_goddess_close_selector, R.drawable.icon_beauty_shape_face_goddess_open_selector
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// //长脸
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// FaceBeautyParam.CHEEK_LONG_INTENSITY, R.string.beauty_box_cheek_long_face,
|
||||
// R.drawable.icon_beauty_shape_face_long_close_selector, R.drawable.icon_beauty_shape_face_long_open_selector
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// //圆脸
|
||||
// params.add(
|
||||
// new FaceBeautyBean(
|
||||
// FaceBeautyParam.CHEEK_CIRCLE_INTENSITY, R.string.beauty_box_cheek_round_face,
|
||||
// R.drawable.icon_beauty_shape_face_round_close_selector, R.drawable.icon_beauty_shape_face_round_open_selector
|
||||
// )
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化参数扩展列表
|
||||
*
|
||||
@@ -308,14 +418,279 @@ public class FaceBeautySource {
|
||||
* @return ArrayList<FaceBeautyFilterBean>
|
||||
*/
|
||||
public static ArrayList<FaceBeautyFilterBean> buildFilters() {
|
||||
ArrayList<FaceBeautyFilterBean> filters = new ArrayList<>();
|
||||
if (!filters.isEmpty()) {
|
||||
return filters;
|
||||
}
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ORIGIN, R.mipmap.icon_beauty_filter_cancel, R.string.origin, 0.0));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_1, R.mipmap.icon_beauty_filter_natural_1, R.string.ziran_1));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_1, R.mipmap.icon_beauty_filter_texture_gray_1, R.string.zhiganhui_1));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_1, R.mipmap.icon_beauty_filter_bailiang_1, R.string.bailiang_1));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_1, R.mipmap.icon_beauty_filter_fennen_1, R.string.fennen_1));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_1, R.mipmap.icon_beauty_filter_lengsediao_1, R.string.lengsediao_1));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_1, R.mipmap.icon_beauty_filter_natural_1, R.string.ziran_1,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_2, R.mipmap.icon_beauty_filter_natural_2, R.string.ziran_2,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_3, R.mipmap.icon_beauty_filter_natural_3, R.string.ziran_3,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_4, R.mipmap.icon_beauty_filter_natural_4, R.string.ziran_4,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_5, R.mipmap.icon_beauty_filter_natural_5, R.string.ziran_5,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_6, R.mipmap.icon_beauty_filter_natural_6, R.string.ziran_6,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_6)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_7, R.mipmap.icon_beauty_filter_natural_7, R.string.ziran_7,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZIRAN_8, R.mipmap.icon_beauty_filter_natural_8, R.string.ziran_8,getDiskFilterValue(FaceBeautyFilterEnum.ZIRAN_8)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_1, R.mipmap.icon_beauty_filter_texture_gray_1, R.string.zhiganhui_1,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_2, R.mipmap.icon_beauty_filter_texture_gray_2, R.string.zhiganhui_2,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_3, R.mipmap.icon_beauty_filter_texture_gray_3, R.string.zhiganhui_3,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_4, R.mipmap.icon_beauty_filter_texture_gray_4, R.string.zhiganhui_4,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_5, R.mipmap.icon_beauty_filter_texture_gray_5, R.string.zhiganhui_5,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_6, R.mipmap.icon_beauty_filter_texture_gray_6, R.string.zhiganhui_6,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_6)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_7, R.mipmap.icon_beauty_filter_texture_gray_7, R.string.zhiganhui_7,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.ZHIGANHUI_8, R.mipmap.icon_beauty_filter_texture_gray_8, R.string.zhiganhui_8,getDiskFilterValue(FaceBeautyFilterEnum.ZHIGANHUI_8)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_1, R.mipmap.icon_beauty_filter_peach_1, R.string.mitao_1,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_2, R.mipmap.icon_beauty_filter_peach_2, R.string.mitao_2,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_3, R.mipmap.icon_beauty_filter_peach_3, R.string.mitao_3,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_4, R.mipmap.icon_beauty_filter_peach_4, R.string.mitao_4,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_5, R.mipmap.icon_beauty_filter_peach_5, R.string.mitao_5,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_6, R.mipmap.icon_beauty_filter_peach_6, R.string.mitao_6,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_6)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_7, R.mipmap.icon_beauty_filter_peach_7, R.string.mitao_7,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.MITAO_8, R.mipmap.icon_beauty_filter_peach_8, R.string.mitao_8,getDiskFilterValue(FaceBeautyFilterEnum.MITAO_8)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_1, R.mipmap.icon_beauty_filter_bailiang_1, R.string.bailiang_1,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_2, R.mipmap.icon_beauty_filter_bailiang_2, R.string.bailiang_2,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_3, R.mipmap.icon_beauty_filter_bailiang_3, R.string.bailiang_3,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_4, R.mipmap.icon_beauty_filter_bailiang_4, R.string.bailiang_4,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_5, R.mipmap.icon_beauty_filter_bailiang_5, R.string.bailiang_5,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_6, R.mipmap.icon_beauty_filter_bailiang_6, R.string.bailiang_6,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_6)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.BAILIANG_7, R.mipmap.icon_beauty_filter_bailiang_7, R.string.bailiang_7,getDiskFilterValue(FaceBeautyFilterEnum.BAILIANG_7)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_1, R.mipmap.icon_beauty_filter_fennen_1, R.string.fennen_1,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_2, R.mipmap.icon_beauty_filter_fennen_2, R.string.fennen_2,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_3, R.mipmap.icon_beauty_filter_fennen_3, R.string.fennen_3,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_5, R.mipmap.icon_beauty_filter_fennen_5, R.string.fennen_5,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_6, R.mipmap.icon_beauty_filter_fennen_6, R.string.fennen_6,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_6)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_7, R.mipmap.icon_beauty_filter_fennen_7, R.string.fennen_7,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.FENNEN_8, R.mipmap.icon_beauty_filter_fennen_8, R.string.fennen_8,getDiskFilterValue(FaceBeautyFilterEnum.FENNEN_8)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_1, R.mipmap.icon_beauty_filter_lengsediao_1, R.string.lengsediao_1,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_2, R.mipmap.icon_beauty_filter_lengsediao_2, R.string.lengsediao_2,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_3, R.mipmap.icon_beauty_filter_lengsediao_3, R.string.lengsediao_3,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_4, R.mipmap.icon_beauty_filter_lengsediao_4, R.string.lengsediao_4,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_7, R.mipmap.icon_beauty_filter_lengsediao_7, R.string.lengsediao_7,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_8, R.mipmap.icon_beauty_filter_lengsediao_8, R.string.lengsediao_8,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_8)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.LENGSEDIAO_11, R.mipmap.icon_beauty_filter_lengsediao_11, R.string.lengsediao_11,getDiskFilterValue(FaceBeautyFilterEnum.LENGSEDIAO_11)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.NUANSEDIAO_1, R.mipmap.icon_beauty_filter_nuansediao_1, R.string.nuansediao_1,getDiskFilterValue(FaceBeautyFilterEnum.NUANSEDIAO_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.NUANSEDIAO_2, R.mipmap.icon_beauty_filter_nuansediao_2, R.string.nuansediao_2,getDiskFilterValue(FaceBeautyFilterEnum.NUANSEDIAO_2)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_1, R.mipmap.icon_beauty_filter_gexing_1, R.string.gexing_1,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_2, R.mipmap.icon_beauty_filter_gexing_2, R.string.gexing_2,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_3, R.mipmap.icon_beauty_filter_gexing_3, R.string.gexing_3,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_4, R.mipmap.icon_beauty_filter_gexing_4, R.string.gexing_4,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_5, R.mipmap.icon_beauty_filter_gexing_5, R.string.gexing_5,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_5)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_7, R.mipmap.icon_beauty_filter_gexing_7, R.string.gexing_7,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_7)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_10, R.mipmap.icon_beauty_filter_gexing_10, R.string.gexing_10,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_10)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.GEXING_11, R.mipmap.icon_beauty_filter_gexing_11, R.string.gexing_11,getDiskFilterValue(FaceBeautyFilterEnum.GEXING_11)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.XIAOQINGXIN_1, R.mipmap.icon_beauty_filter_xiaoqingxin_1, R.string.xiaoqingxin_1,getDiskFilterValue(FaceBeautyFilterEnum.XIAOQINGXIN_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.XIAOQINGXIN_3, R.mipmap.icon_beauty_filter_xiaoqingxin_3, R.string.xiaoqingxin_3,getDiskFilterValue(FaceBeautyFilterEnum.XIAOQINGXIN_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.XIAOQINGXIN_4, R.mipmap.icon_beauty_filter_xiaoqingxin_4, R.string.xiaoqingxin_4,getDiskFilterValue(FaceBeautyFilterEnum.XIAOQINGXIN_4)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.XIAOQINGXIN_6, R.mipmap.icon_beauty_filter_xiaoqingxin_6, R.string.xiaoqingxin_6,getDiskFilterValue(FaceBeautyFilterEnum.XIAOQINGXIN_6)));
|
||||
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.HEIBAI_1, R.mipmap.icon_beauty_filter_heibai_1, R.string.heibai_1,getDiskFilterValue(FaceBeautyFilterEnum.HEIBAI_1)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.HEIBAI_2, R.mipmap.icon_beauty_filter_heibai_2, R.string.heibai_2,getDiskFilterValue(FaceBeautyFilterEnum.HEIBAI_2)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.HEIBAI_3, R.mipmap.icon_beauty_filter_heibai_3, R.string.heibai_3,getDiskFilterValue(FaceBeautyFilterEnum.HEIBAI_3)));
|
||||
filters.add(new FaceBeautyFilterBean(FaceBeautyFilterEnum.HEIBAI_4, R.mipmap.icon_beauty_filter_heibai_4, R.string.heibai_4,getDiskFilterValue(FaceBeautyFilterEnum.HEIBAI_4)));
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从磁盘获取所有项滤镜强度
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
private static double getDiskFilterValue(String key) {
|
||||
if (faceBeautyData != null) {
|
||||
return faceBeautyData.filterMap.get(key);
|
||||
} else {
|
||||
return 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String CONFIG_BIAOZHUN = "biaozhun";
|
||||
private static final String CONFIG_HUAJIAO = "huajiao";
|
||||
private static final String CONFIG_KUAISHOU = "kuaishou";
|
||||
private static final String CONFIG_QINGYAN = "qingyan";
|
||||
private static final String CONFIG_SHANGTANG = "shangtang";
|
||||
private static final String CONFIG_YINGKE = "yingke";
|
||||
private static final String CONFIG_ZIJIETIAODONG = "zijietiaodong";
|
||||
|
||||
|
||||
/**
|
||||
* 初始化风格推荐
|
||||
*
|
||||
* @return ArrayList<FaceBeautyBean>
|
||||
*/
|
||||
public static ArrayList<FaceBeautyStyleBean> buildStylesParams() {
|
||||
ArrayList<FaceBeautyStyleBean> params = new ArrayList<>();
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_KUAISHOU, R.drawable.icon_beauty_style_1_selector, R.string.beauty_face_style_1));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_QINGYAN, R.drawable.icon_beauty_style_2_selector, R.string.beauty_face_style_2));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_ZIJIETIAODONG, R.drawable.icon_beauty_style_3_selector, R.string.beauty_face_style_3));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_HUAJIAO, R.drawable.icon_beauty_style_4_selector, R.string.beauty_face_style_4));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_YINGKE, R.drawable.icon_beauty_style_5_selector, R.string.beauty_face_style_5));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_SHANGTANG, R.drawable.icon_beauty_style_6_selector, R.string.beauty_face_style_6));
|
||||
params.add(new FaceBeautyStyleBean(CONFIG_BIAOZHUN, R.drawable.icon_beauty_style_7_selector, R.string.beauty_face_style_7));
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 风格对应参数配置
|
||||
*/
|
||||
public static HashMap<String, Runnable> styleParams = new HashMap<String, Runnable>() {
|
||||
{
|
||||
put(CONFIG_KUAISHOU, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setColorIntensity(0.5);
|
||||
model.setBlurIntensity(3.6);
|
||||
model.setEyeBrightIntensity(0.35);
|
||||
model.setToothIntensity(0.25);
|
||||
model.setCheekThinningIntensity(0.45);
|
||||
model.setCheekVIntensity(0.08);
|
||||
model.setCheekSmallIntensity(0.05);
|
||||
model.setEyeEnlargingIntensity(0.3);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
|
||||
});
|
||||
put(CONFIG_QINGYAN, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setFilterName(FaceBeautyFilterEnum.ZIRAN_3);
|
||||
model.setFilterIntensity(0.3);
|
||||
model.setColorIntensity(0.4);
|
||||
model.setRedIntensity(0.2);
|
||||
model.setBlurIntensity(3.6);
|
||||
model.setEyeBrightIntensity(0.5);
|
||||
model.setToothIntensity(0.4);
|
||||
model.setCheekThinningIntensity(0.3);
|
||||
model.setNoseIntensity(0.5);
|
||||
model.setEyeEnlargingIntensity(0.25);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
put(CONFIG_ZIJIETIAODONG, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setColorIntensity(0.4);
|
||||
model.setRedIntensity(0.3);
|
||||
model.setBlurIntensity(2.4);
|
||||
model.setCheekThinningIntensity(0.3);
|
||||
model.setCheekSmallIntensity(0.15);
|
||||
model.setEyeEnlargingIntensity(0.65);
|
||||
model.setNoseIntensity(0.3);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
put(CONFIG_HUAJIAO, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setColorIntensity(0.7);
|
||||
model.setBlurIntensity(3.9);
|
||||
model.setCheekThinningIntensity(0.3);
|
||||
model.setCheekSmallIntensity(0.05);
|
||||
model.setEyeEnlargingIntensity(0.65);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
put(CONFIG_YINGKE, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setFilterName(FaceBeautyFilterEnum.FENNEN_2);
|
||||
model.setFilterIntensity(0.5);
|
||||
model.setColorIntensity(0.6);
|
||||
model.setBlurIntensity(3.0);
|
||||
model.setCheekThinningIntensity(0.5);
|
||||
model.setEyeEnlargingIntensity(0.65);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
put(CONFIG_SHANGTANG, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setFilterName(FaceBeautyFilterEnum.FENNEN_2);
|
||||
model.setFilterIntensity(0.8);
|
||||
model.setColorIntensity(0.7);
|
||||
model.setBlurIntensity(4.2);
|
||||
model.setEyeEnlargingIntensity(0.6);
|
||||
model.setCheekThinningIntensity(0.3);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
put(CONFIG_BIAOZHUN, () -> {
|
||||
FaceBeauty model = new FaceBeauty(new FUBundleData(FaceUnityConfig.BUNDLE_FACE_BEAUTIFICATION));
|
||||
model.setFaceShapeIntensity(1.0);
|
||||
model.setFilterName(FaceBeautyFilterEnum.ZIRAN_5);
|
||||
model.setFilterIntensity(0.55);
|
||||
model.setColorIntensity(0.2);
|
||||
model.setRedIntensity(0.65);
|
||||
model.setBlurIntensity(3.3);
|
||||
model.setCheekSmallIntensity(0.05);
|
||||
model.setCheekThinningIntensity(0.1);
|
||||
FaceBeautyDataFactory.faceBeauty = model;
|
||||
FURenderKit.getInstance().setFaceBeauty(FaceBeautyDataFactory.faceBeauty);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* 克隆模型
|
||||
*
|
||||
* @param faceBeauty
|
||||
* @return
|
||||
*/
|
||||
public static FaceBeauty clone(FaceBeauty faceBeauty) {
|
||||
FaceBeauty cloneFaceBeauty = new FaceBeauty(new FUBundleData(faceBeauty.getControlBundle().getPath()));
|
||||
/*滤镜*/
|
||||
cloneFaceBeauty.setFilterName(faceBeauty.getFilterName());
|
||||
cloneFaceBeauty.setFilterIntensity(faceBeauty.getFilterIntensity());
|
||||
/*美肤*/
|
||||
cloneFaceBeauty.setBlurIntensity(faceBeauty.getBlurIntensity());
|
||||
cloneFaceBeauty.setEnableHeavyBlur(faceBeauty.getEnableHeavyBlur());
|
||||
cloneFaceBeauty.setEnableSkinDetect(faceBeauty.getEnableSkinDetect());
|
||||
cloneFaceBeauty.setNonSkinBlurIntensity(faceBeauty.getNonSkinBlurIntensity());
|
||||
cloneFaceBeauty.setBlurType(faceBeauty.getBlurType());
|
||||
cloneFaceBeauty.setEnableBlurUseMask(faceBeauty.getEnableBlurUseMask());
|
||||
cloneFaceBeauty.setColorIntensity(faceBeauty.getColorIntensity());
|
||||
cloneFaceBeauty.setRedIntensity(faceBeauty.getRedIntensity());
|
||||
cloneFaceBeauty.setSharpenIntensity(faceBeauty.getSharpenIntensity());
|
||||
cloneFaceBeauty.setEyeBrightIntensity(faceBeauty.getEyeBrightIntensity());
|
||||
cloneFaceBeauty.setToothIntensity(faceBeauty.getToothIntensity());
|
||||
cloneFaceBeauty.setRemovePouchIntensity(faceBeauty.getRemovePouchIntensity());
|
||||
cloneFaceBeauty.setRemoveLawPatternIntensity(faceBeauty.getRemoveLawPatternIntensity());
|
||||
/*美型*/
|
||||
cloneFaceBeauty.setFaceShape(faceBeauty.getFaceShape());
|
||||
cloneFaceBeauty.setFaceShapeIntensity(faceBeauty.getFaceShapeIntensity());
|
||||
cloneFaceBeauty.setCheekThinningIntensity(faceBeauty.getCheekThinningIntensity());
|
||||
cloneFaceBeauty.setCheekVIntensity(faceBeauty.getCheekVIntensity());
|
||||
cloneFaceBeauty.setCheekLongIntensity(faceBeauty.getCheekLongIntensity());
|
||||
cloneFaceBeauty.setCheekCircleIntensity(faceBeauty.getCheekCircleIntensity());
|
||||
cloneFaceBeauty.setCheekNarrowIntensity(faceBeauty.getCheekNarrowIntensity());
|
||||
cloneFaceBeauty.setCheekShortIntensity(faceBeauty.getCheekShortIntensity());
|
||||
cloneFaceBeauty.setCheekSmallIntensity(faceBeauty.getCheekSmallIntensity());
|
||||
cloneFaceBeauty.setCheekBonesIntensity(faceBeauty.getCheekBonesIntensity());
|
||||
cloneFaceBeauty.setLowerJawIntensity(faceBeauty.getLowerJawIntensity());
|
||||
cloneFaceBeauty.setEyeEnlargingIntensity(faceBeauty.getEyeEnlargingIntensity());
|
||||
cloneFaceBeauty.setChinIntensity(faceBeauty.getChinIntensity());
|
||||
cloneFaceBeauty.setForHeadIntensity(faceBeauty.getForHeadIntensity());
|
||||
cloneFaceBeauty.setNoseIntensity(faceBeauty.getNoseIntensity());
|
||||
cloneFaceBeauty.setMouthIntensity(faceBeauty.getMouthIntensity());
|
||||
cloneFaceBeauty.setCanthusIntensity(faceBeauty.getCanthusIntensity());
|
||||
cloneFaceBeauty.setEyeSpaceIntensity(faceBeauty.getEyeSpaceIntensity());
|
||||
cloneFaceBeauty.setEyeRotateIntensity(faceBeauty.getEyeRotateIntensity());
|
||||
cloneFaceBeauty.setLongNoseIntensity(faceBeauty.getLongNoseIntensity());
|
||||
cloneFaceBeauty.setPhiltrumIntensity(faceBeauty.getPhiltrumIntensity());
|
||||
cloneFaceBeauty.setSmileIntensity(faceBeauty.getSmileIntensity());
|
||||
cloneFaceBeauty.setEyeCircleIntensity(faceBeauty.getEyeCircleIntensity());
|
||||
cloneFaceBeauty.setBrowHeightIntensity(faceBeauty.getBrowHeightIntensity());
|
||||
cloneFaceBeauty.setBrowSpaceIntensity(faceBeauty.getBrowSpaceIntensity());
|
||||
cloneFaceBeauty.setChangeFramesIntensity(faceBeauty.getChangeFramesIntensity());
|
||||
return cloneFaceBeauty;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
|
||||
import com.faceunity.core.entity.FUBundleData;
|
||||
import com.faceunity.core.entity.FUColorRGBData;
|
||||
import com.faceunity.core.faceunity.FURenderKit;
|
||||
import com.faceunity.core.model.facebeauty.FaceBeautyFilterEnum;
|
||||
import com.faceunity.core.model.littleMakeup.LightMakeup;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.LightMakeupBean;
|
||||
import com.yunbao.faceunity.utils.FaceUnityConfig;
|
||||
import com.yunbao.faceunity.utils.FaceUnityData;
|
||||
import com.yunbao.faceunity.utils.FileUtils;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* DESC:轻美妆数据构造
|
||||
* Created on 2021/3/27
|
||||
*/
|
||||
public class LightMakeupSource {
|
||||
|
||||
/**
|
||||
* 构造轻美妆队列
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<LightMakeupBean> buildLightMakeup() {
|
||||
ArrayList<LightMakeupBean> makeups = new ArrayList<>();
|
||||
makeups.add(new LightMakeupBean(R.string.makeup_radio_remove, R.mipmap.icon_control_none, null, 0.0, FaceBeautyFilterEnum.ZIRAN_2, 0.4));
|
||||
/*桃花*/
|
||||
makeups.add(new LightMakeupBean(R.string.makeup_peach_blossom, R.mipmap.icon_light_makeup_peachblossom, "taohua", 0.9, FaceBeautyFilterEnum.FENNEN_3, 0.9));
|
||||
/*西柚*/
|
||||
makeups.add(new LightMakeupBean(R.string.makeup_grapefruit, R.mipmap.icon_light_makeup_grapefruit, "xiyou", 1.0, FaceBeautyFilterEnum.LENGSEDIAO_4, 1.0));
|
||||
/*清透*/
|
||||
makeups.add(new LightMakeupBean(R.string.makeup_clear, R.mipmap.icon_light_makeup_clear, "qingtou", 0.9, FaceBeautyFilterEnum.XIAOQINGXIN_1, 0.9));
|
||||
/*男友*/
|
||||
makeups.add(new LightMakeupBean(R.string.makeup_boyfriend, R.mipmap.icon_light_makeup_boyfriend, "nanyou", 1.0, FaceBeautyFilterEnum.XIAOQINGXIN_3, 1.0));
|
||||
return makeups;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 风格对应参数配置
|
||||
*/
|
||||
public static HashMap<String, Runnable> LightMakeupParams = new HashMap<String, Runnable>() {
|
||||
{
|
||||
put("taohua", () -> {
|
||||
LightMakeup lightMakeup = new LightMakeup(new FUBundleData(FaceUnityConfig.BUNDLE_LIGHT_MAKEUP));
|
||||
lightMakeup.setBlusherTex(LightMakeUpEnum.MAKEUP_BLUSHER_01.path);
|
||||
lightMakeup.setBlusherIntensity(0.9);
|
||||
lightMakeup.setEyeShadowTex(LightMakeUpEnum.MAKEUP_EYE_SHADOW_01.path);
|
||||
lightMakeup.setEyeShadowIntensity(0.9);
|
||||
lightMakeup.setEyeBrowTex(LightMakeUpEnum.MAKEUP_EYEBROW_01.path);
|
||||
lightMakeup.setEyeBrowIntensity(0.5);
|
||||
lightMakeup.setLipColor(LightMakeUpEnum.MAKEUP_LIPSTICK_01.getLipColorRGBData());
|
||||
lightMakeup.setLipIntensity(0.9);
|
||||
FURenderKit.getInstance().setLightMakeup(lightMakeup);
|
||||
});
|
||||
put("xiyou", () -> {
|
||||
LightMakeup lightMakeup = new LightMakeup(new FUBundleData(FaceUnityConfig.BUNDLE_LIGHT_MAKEUP));
|
||||
lightMakeup.setBlusherTex(LightMakeUpEnum.MAKEUP_BLUSHER_23.path);
|
||||
lightMakeup.setBlusherIntensity(1.0);
|
||||
lightMakeup.setEyeShadowTex(LightMakeUpEnum.MAKEUP_EYE_SHADOW_21.path);
|
||||
lightMakeup.setEyeShadowIntensity(0.75);
|
||||
lightMakeup.setEyeBrowTex(LightMakeUpEnum.MAKEUP_EYEBROW_19.path);
|
||||
lightMakeup.setEyeBrowIntensity(0.6);
|
||||
lightMakeup.setLipColor(LightMakeUpEnum.MAKEUP_LIPSTICK_21.getLipColorRGBData());
|
||||
lightMakeup.setLipIntensity(0.8);
|
||||
FURenderKit.getInstance().setLightMakeup(lightMakeup);
|
||||
});
|
||||
put("qingtou", () -> {
|
||||
LightMakeup lightMakeup = new LightMakeup(new FUBundleData(FaceUnityConfig.BUNDLE_LIGHT_MAKEUP));
|
||||
lightMakeup.setBlusherTex(LightMakeUpEnum.MAKEUP_BLUSHER_22.path);
|
||||
lightMakeup.setBlusherIntensity(0.9);
|
||||
lightMakeup.setEyeShadowTex(LightMakeUpEnum.MAKEUP_EYE_SHADOW_20.path);
|
||||
lightMakeup.setEyeShadowIntensity(0.65);
|
||||
lightMakeup.setEyeBrowTex(LightMakeUpEnum.MAKEUP_EYEBROW_18.path);
|
||||
lightMakeup.setEyeBrowIntensity(0.45);
|
||||
lightMakeup.setLipColor(LightMakeUpEnum.MAKEUP_LIPSTICK_20.getLipColorRGBData());
|
||||
lightMakeup.setLipIntensity(0.8);
|
||||
FURenderKit.getInstance().setLightMakeup(lightMakeup);
|
||||
});
|
||||
put("nanyou", () -> {
|
||||
LightMakeup lightMakeup = new LightMakeup(new FUBundleData(FaceUnityConfig.BUNDLE_LIGHT_MAKEUP));
|
||||
lightMakeup.setBlusherTex(LightMakeUpEnum.MAKEUP_BLUSHER_20.path);
|
||||
lightMakeup.setBlusherIntensity(0.8);
|
||||
lightMakeup.setEyeShadowTex(LightMakeUpEnum.MAKEUP_EYE_SHADOW_18.path);
|
||||
lightMakeup.setEyeShadowIntensity(0.9);
|
||||
lightMakeup.setEyeBrowTex(LightMakeUpEnum.MAKEUP_EYEBROW_16.path);
|
||||
lightMakeup.setEyeBrowIntensity(0.65);
|
||||
lightMakeup.setLipColor(LightMakeUpEnum.MAKEUP_LIPSTICK_18.getLipColorRGBData());
|
||||
lightMakeup.setLipIntensity(1.0);
|
||||
FURenderKit.getInstance().setLightMakeup(lightMakeup);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//region 轻美妆效果枚举
|
||||
public enum LightMakeUpEnum {
|
||||
/**
|
||||
* 美妆项,前几项是预置的效果
|
||||
* 排在列表最前方,顺序为桃花妆、雀斑妆、朋克妆(其中朋克没有腮红,3个妆容的眼线、眼睫毛共用1个的)
|
||||
*/
|
||||
// 腮红
|
||||
MAKEUP_BLUSHER_01("MAKEUP_BLUSHER_01", "light_makeup/blusher/mu_blush_01.png", R.mipmap.icon_light_makeup_blush_01, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_02("MAKEUP_BLUSHER_02", "light_makeup/blusher/mu_blush_02.png", R.mipmap.icon_light_makeup_blush_02, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_03("MAKEUP_BLUSHER_03", "light_makeup/blusher/mu_blush_03.png", R.mipmap.icon_light_makeup_blush_03, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_04("MAKEUP_BLUSHER_04", "light_makeup/blusher/mu_blush_04.png", R.mipmap.icon_light_makeup_blush_04, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_05("MAKEUP_BLUSHER_05", "light_makeup/blusher/mu_blush_05.png", R.mipmap.icon_light_makeup_blush_05, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_06("MAKEUP_BLUSHER_06", "light_makeup/blusher/mu_blush_06.png", R.mipmap.icon_light_makeup_blush_06, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_07("MAKEUP_BLUSHER_07", "light_makeup/blusher/mu_blush_07.png", R.mipmap.icon_light_makeup_blush_07, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_08("MAKEUP_BLUSHER_08", "light_makeup/blusher/mu_blush_08.png", R.mipmap.icon_light_makeup_blush_08, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_09("MAKEUP_BLUSHER_09", "light_makeup/blusher/mu_blush_09.png", R.mipmap.icon_light_makeup_blush_09, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_10("MAKEUP_BLUSHER_10", "light_makeup/blusher/mu_blush_10.png", R.mipmap.icon_light_makeup_blush_10, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_11("MAKEUP_BLUSHER_11", "light_makeup/blusher/mu_blush_11.png", R.mipmap.icon_light_makeup_blush_11, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_12("MAKEUP_BLUSHER_12", "light_makeup/blusher/mu_blush_12.png", R.mipmap.icon_light_makeup_blush_12, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_13("MAKEUP_BLUSHER_13", "light_makeup/blusher/mu_blush_13.png", R.mipmap.icon_light_makeup_blush_13, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_14("MAKEUP_BLUSHER_14", "light_makeup/blusher/mu_blush_14.png", R.mipmap.icon_light_makeup_blush_14, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_15("MAKEUP_BLUSHER_15", "light_makeup/blusher/mu_blush_15.png", R.mipmap.icon_light_makeup_blush_15, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_16("MAKEUP_BLUSHER_16", "light_makeup/blusher/mu_blush_16.png", R.mipmap.icon_light_makeup_blush_16, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_17("MAKEUP_BLUSHER_17", "light_makeup/blusher/mu_blush_17.png", R.mipmap.icon_light_makeup_blush_17, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_18("MAKEUP_BLUSHER_18", "light_makeup/blusher/mu_blush_18.png", R.mipmap.icon_light_makeup_blush_18, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_19("MAKEUP_BLUSHER_19", "light_makeup/blusher/mu_blush_19.png", R.mipmap.icon_light_makeup_blush_19, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_20("MAKEUP_BLUSHER_20", "light_makeup/blusher/mu_blush_20.png", R.mipmap.icon_light_makeup_blush_20, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_21("MAKEUP_BLUSHER_21", "light_makeup/blusher/mu_blush_21.png", R.mipmap.icon_light_makeup_blush_21, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_22("MAKEUP_BLUSHER_22", "light_makeup/blusher/mu_blush_22.png", R.mipmap.icon_light_makeup_blush_22, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_23("MAKEUP_BLUSHER_23", "light_makeup/blusher/mu_blush_23.png", R.mipmap.icon_light_makeup_blush_23, R.string.makeup_radio_blusher),
|
||||
|
||||
MAKEUP_BLUSHER_24("MAKEUP_BLUSHER_24", "light_makeup/blusher/mu_blush_24.png", R.mipmap.icon_light_makeup_blush_24, R.string.makeup_radio_blusher),
|
||||
|
||||
// 眉毛
|
||||
MAKEUP_EYEBROW_01("MAKEUP_EYEBROW_01", "light_makeup/eyebrow/mu_eyebrow_01.png", R.mipmap.icon_light_makeup_eyebrow_01, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_02("MAKEUP_EYEBROW_02", "light_makeup/eyebrow/mu_eyebrow_02.png", R.mipmap.icon_light_makeup_eyebrow_02, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_03("MAKEUP_EYEBROW_03", "light_makeup/eyebrow/mu_eyebrow_03.png", R.mipmap.icon_light_makeup_eyebrow_03, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_04("MAKEUP_EYEBROW_04", "light_makeup/eyebrow/mu_eyebrow_04.png", R.mipmap.icon_light_makeup_eyebrow_04, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_05("MAKEUP_EYEBROW_05", "light_makeup/eyebrow/mu_eyebrow_05.png", R.mipmap.icon_light_makeup_eyebrow_05, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_06("MAKEUP_EYEBROW_06", "light_makeup/eyebrow/mu_eyebrow_06.png", R.mipmap.icon_light_makeup_eyebrow_06, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_07("MAKEUP_EYEBROW_07", "light_makeup/eyebrow/mu_eyebrow_07.png", R.mipmap.icon_light_makeup_eyebrow_07, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_08("MAKEUP_EYEBROW_08", "light_makeup/eyebrow/mu_eyebrow_08.png", R.mipmap.icon_light_makeup_eyebrow_08, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_09("MAKEUP_EYEBROW_09", "light_makeup/eyebrow/mu_eyebrow_09.png", R.mipmap.icon_light_makeup_eyebrow_09, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_10("MAKEUP_EYEBROW_10", "light_makeup/eyebrow/mu_eyebrow_10.png", R.mipmap.icon_light_makeup_eyebrow_10, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_11("MAKEUP_EYEBROW_11", "light_makeup/eyebrow/mu_eyebrow_11.png", R.mipmap.icon_light_makeup_eyebrow_11, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_12("MAKEUP_EYEBROW_12", "light_makeup/eyebrow/mu_eyebrow_12.png", R.mipmap.icon_light_makeup_eyebrow_12, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_13("MAKEUP_EYEBROW_13", "light_makeup/eyebrow/mu_eyebrow_13.png", R.mipmap.icon_light_makeup_eyebrow_13, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_14("MAKEUP_EYEBROW_14", "light_makeup/eyebrow/mu_eyebrow_14.png", R.mipmap.icon_light_makeup_eyebrow_14, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_15("MAKEUP_EYEBROW_15", "light_makeup/eyebrow/mu_eyebrow_15.png", R.mipmap.icon_light_makeup_eyebrow_15, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_16("MAKEUP_EYEBROW_16", "light_makeup/eyebrow/mu_eyebrow_16.png", R.mipmap.icon_light_makeup_eyebrow_16, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_17("MAKEUP_EYEBROW_17", "light_makeup/eyebrow/mu_eyebrow_17.png", R.mipmap.icon_light_makeup_eyebrow_17, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_18("MAKEUP_EYEBROW_18", "light_makeup/eyebrow/mu_eyebrow_18.png", R.mipmap.icon_light_makeup_eyebrow_18, R.string.makeup_radio_eyebrow),
|
||||
|
||||
MAKEUP_EYEBROW_19("MAKEUP_EYEBROW_19", "light_makeup/eyebrow/mu_eyebrow_19.png", R.mipmap.icon_light_makeup_eyebrow_19, R.string.makeup_radio_eyebrow),
|
||||
|
||||
// 睫毛
|
||||
MAKEUP_EYELASH_01("MAKEUP_EYELASH_01", "light_makeup/eyelash/mu_eyelash_01.png", R.mipmap.icon_light_makeup_eyelash_01, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_02("MAKEUP_EYELASH_02", "light_makeup/eyelash/mu_eyelash_02.png", R.mipmap.icon_light_makeup_eyelash_02, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_03("MAKEUP_EYELASH_03", "light_makeup/eyelash/mu_eyelash_03.png", R.mipmap.icon_light_makeup_eyelash_03, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_04("MAKEUP_EYELASH_04", "light_makeup/eyelash/mu_eyelash_04.png", R.mipmap.icon_light_makeup_eyelash_04, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_05("MAKEUP_EYELASH_05", "light_makeup/eyelash/mu_eyelash_05.png", R.mipmap.icon_light_makeup_eyelash_05, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_06("MAKEUP_EYELASH_06", "light_makeup/eyelash/mu_eyelash_06.png", R.mipmap.icon_light_makeup_eyelash_06, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_07("MAKEUP_EYELASH_07", "light_makeup/eyelash/mu_eyelash_07.png", R.mipmap.icon_light_makeup_eyelash_07, R.string.makeup_radio_eyelash),
|
||||
|
||||
MAKEUP_EYELASH_08("MAKEUP_EYELASH_08", "light_makeup/eyelash/mu_eyelash_08.png", R.mipmap.icon_light_makeup_eyelash_08, R.string.makeup_radio_eyelash),
|
||||
|
||||
// 眼线
|
||||
MAKEUP_EYELINER_01("MAKEUP_EYELINER_01", "light_makeup/eyeliner/mu_eyeliner_01.png", R.mipmap.icon_light_makeup_eyeliner_01, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_02("MAKEUP_EYELINER_02", "light_makeup/eyeliner/mu_eyeliner_02.png", R.mipmap.icon_light_makeup_eyeliner_02, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_03("MAKEUP_EYELINER_03", "light_makeup/eyeliner/mu_eyeliner_03.png", R.mipmap.icon_light_makeup_eyeliner_03, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_04("MAKEUP_EYELINER_04", "light_makeup/eyeliner/mu_eyeliner_04.png", R.mipmap.icon_light_makeup_eyeliner_04, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_05("MAKEUP_EYELINER_05", "light_makeup/eyeliner/mu_eyeliner_05.png", R.mipmap.icon_light_makeup_eyeliner_05, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_06("MAKEUP_EYELINER_06", "light_makeup/eyeliner/mu_eyeliner_06.png", R.mipmap.icon_light_makeup_eyeliner_06, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_07("MAKEUP_EYELINER_07", "light_makeup/eyeliner/mu_eyeliner_07.png", R.mipmap.icon_light_makeup_eyeliner_07, R.string.makeup_radio_eye_liner),
|
||||
|
||||
MAKEUP_EYELINER_08("MAKEUP_EYELINER_08", "light_makeup/eyeliner/mu_eyeliner_08.png", R.mipmap.icon_light_makeup_eyeliner_08, R.string.makeup_radio_eye_liner),
|
||||
|
||||
// 美瞳
|
||||
MAKEUP_EYEPUPIL_01("MAKEUP_EYEPUPIL_01", "light_makeup/eyepupil/mu_eyepupil_01.png", R.mipmap.icon_light_makeup_eyepupil_01, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_02("MAKEUP_EYEPUPIL_02", "light_makeup/eyepupil/mu_eyepupil_02.png", R.mipmap.icon_light_makeup_eyepupil_02, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_03("MAKEUP_EYEPUPIL_03", "light_makeup/eyepupil/mu_eyepupil_03.png", R.mipmap.icon_light_makeup_eyepupil_03, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_04("MAKEUP_EYEPUPIL_04", "light_makeup/eyepupil/mu_eyepupil_04.png", R.mipmap.icon_light_makeup_eyepupil_04, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_05("MAKEUP_EYEPUPIL_05", "light_makeup/eyepupil/mu_eyepupil_05.png", R.mipmap.icon_light_makeup_eyepupil_05, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_06("MAKEUP_EYEPUPIL_06", "light_makeup/eyepupil/mu_eyepupil_06.png", R.mipmap.icon_light_makeup_eyepupil_06, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_07("MAKEUP_EYEPUPIL_07", "light_makeup/eyepupil/mu_eyepupil_07.png", R.mipmap.icon_light_makeup_eyepupil_07, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_08("MAKEUP_EYEPUPIL_08", "light_makeup/eyepupil/mu_eyepupil_08.png", R.mipmap.icon_light_makeup_eyepupil_08, R.string.makeup_radio_contact_lens),
|
||||
|
||||
MAKEUP_EYEPUPIL_09("MAKEUP_EYEPUPIL_09", "light_makeup/eyepupil/mu_eyepupil_09.png", R.mipmap.icon_light_makeup_eyepupil_09, R.string.makeup_radio_contact_lens),
|
||||
|
||||
// 眼影
|
||||
MAKEUP_EYE_SHADOW_01("MAKEUP_EYESHADOW_01", "light_makeup/eyeshadow/mu_eyeshadow_01.png", R.mipmap.icon_light_makeup_eyeshadow_01, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_02("MAKEUP_EYESHADOW_02", "light_makeup/eyeshadow/mu_eyeshadow_02.png", R.mipmap.icon_light_makeup_eyeshadow_02, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_03("MAKEUP_EYESHADOW_03", "light_makeup/eyeshadow/mu_eyeshadow_03.png", R.mipmap.icon_light_makeup_eyeshadow_03, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_04("MAKEUP_EYESHADOW_04", "light_makeup/eyeshadow/mu_eyeshadow_04.png", R.mipmap.icon_light_makeup_eyeshadow_04, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_05("MAKEUP_EYESHADOW_05", "light_makeup/eyeshadow/mu_eyeshadow_05.png", R.mipmap.icon_light_makeup_eyeshadow_05, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_06("MAKEUP_EYESHADOW_06", "light_makeup/eyeshadow/mu_eyeshadow_06.png", R.mipmap.icon_light_makeup_eyeshadow_06, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_07("MAKEUP_EYESHADOW_07", "light_makeup/eyeshadow/mu_eyeshadow_07.png", R.mipmap.icon_light_makeup_eyeshadow_07, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_08("MAKEUP_EYESHADOW_08", "light_makeup/eyeshadow/mu_eyeshadow_08.png", R.mipmap.icon_light_makeup_eyeshadow_08, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_09("MAKEUP_EYESHADOW_09", "light_makeup/eyeshadow/mu_eyeshadow_09.png", R.mipmap.icon_light_makeup_eyeshadow_09, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_10("MAKEUP_EYESHADOW_10", "light_makeup/eyeshadow/mu_eyeshadow_10.png", R.mipmap.icon_light_makeup_eyeshadow_10, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_11("MAKEUP_EYESHADOW_11", "light_makeup/eyeshadow/mu_eyeshadow_11.png", R.mipmap.icon_light_makeup_eyeshadow_11, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_12("MAKEUP_EYESHADOW_12", "light_makeup/eyeshadow/mu_eyeshadow_12.png", R.mipmap.icon_light_makeup_eyeshadow_12, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_13("MAKEUP_EYESHADOW_13", "light_makeup/eyeshadow/mu_eyeshadow_13.png", R.mipmap.icon_light_makeup_eyeshadow_13, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_14("MAKEUP_EYESHADOW_14", "light_makeup/eyeshadow/mu_eyeshadow_14.png", R.mipmap.icon_light_makeup_eyeshadow_14, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_15("MAKEUP_EYESHADOW_15", "light_makeup/eyeshadow/mu_eyeshadow_15.png", R.mipmap.icon_light_makeup_eyeshadow_15, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_16("MAKEUP_EYESHADOW_16", "light_makeup/eyeshadow/mu_eyeshadow_16.png", R.mipmap.icon_light_makeup_eyeshadow_16, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_17("MAKEUP_EYESHADOW_17", "light_makeup/eyeshadow/mu_eyeshadow_17.png", R.mipmap.icon_light_makeup_eyeshadow_17, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_18("MAKEUP_EYESHADOW_18", "light_makeup/eyeshadow/mu_eyeshadow_18.png", R.mipmap.icon_light_makeup_eyeshadow_18, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_19("MAKEUP_EYESHADOW_19", "light_makeup/eyeshadow/mu_eyeshadow_19.png", R.mipmap.icon_light_makeup_eyeshadow_19, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_20("MAKEUP_EYESHADOW_20", "light_makeup/eyeshadow/mu_eyeshadow_20.png", R.mipmap.icon_light_makeup_eyeshadow_20, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_21("MAKEUP_EYESHADOW_21", "light_makeup/eyeshadow/mu_eyeshadow_21.png", R.mipmap.icon_light_makeup_eyeshadow_21, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
MAKEUP_EYE_SHADOW_22("MAKEUP_EYESHADOW_22", "light_makeup/eyeshadow/mu_eyeshadow_22.png", R.mipmap.icon_light_makeup_eyeshadow_22, R.string.makeup_radio_eye_shadow),
|
||||
|
||||
// 口红
|
||||
MAKEUP_LIPSTICK_01("MAKEUP_LIPSTICK_01", "light_makeup/lipstick/mu_lip_01.json", R.mipmap.icon_light_makeup_lip_01, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_02("MAKEUP_LIPSTICK_02", "light_makeup/lipstick/mu_lip_02.json", R.mipmap.icon_light_makeup_lip_02, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_03("MAKEUP_LIPSTICK_03", "light_makeup/lipstick/mu_lip_03.json", R.mipmap.icon_light_makeup_lip_03, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_10("MAKEUP_LIPSTICK_10", "light_makeup/lipstick/mu_lip_10.json", R.mipmap.icon_light_makeup_lip_10, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_11("MAKEUP_LIPSTICK_11", "light_makeup/lipstick/mu_lip_11.json", R.mipmap.icon_light_makeup_lip_12, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_12("MAKEUP_LIPSTICK_12", "light_makeup/lipstick/mu_lip_12.json", R.mipmap.icon_light_makeup_lip_12, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_13("MAKEUP_LIPSTICK_13", "light_makeup/lipstick/mu_lip_13.json", R.mipmap.icon_light_makeup_lip_13, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_14("MAKEUP_LIPSTICK_14", "light_makeup/lipstick/mu_lip_14.json", R.mipmap.icon_light_makeup_lip_14, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_15("MAKEUP_LIPSTICK_15", "light_makeup/lipstick/mu_lip_15.json", R.mipmap.icon_light_makeup_lip_15, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_16("MAKEUP_LIPSTICK_16", "light_makeup/lipstick/mu_lip_16.json", R.mipmap.icon_light_makeup_lip_16, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_17("MAKEUP_LIPSTICK_17", "light_makeup/lipstick/mu_lip_17.json", R.mipmap.icon_light_makeup_lip_17, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_18("MAKEUP_LIPSTICK_18", "light_makeup/lipstick/mu_lip_18.json", R.mipmap.icon_light_makeup_lip_18, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_19("MAKEUP_LIPSTICK_19", "light_makeup/lipstick/mu_lip_19.json", R.mipmap.icon_light_makeup_lip_19, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_20("MAKEUP_LIPSTICK_20", "light_makeup/lipstick/mu_lip_20.json", R.mipmap.icon_light_makeup_lip_20, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_21("MAKEUP_LIPSTICK_21", "light_makeup/lipstick/mu_lip_21.json", R.mipmap.icon_light_makeup_lip_21, R.string.makeup_radio_lipstick),
|
||||
|
||||
MAKEUP_LIPSTICK_22("MAKEUP_LIPSTICK_22", "light_makeup/lipstick/mu_lip_22.json", R.mipmap.icon_light_makeup_lip_22, R.string.makeup_radio_lipstick);
|
||||
|
||||
|
||||
private final String key;
|
||||
private final String path;
|
||||
private final int iconRes;
|
||||
private final int strRes;
|
||||
|
||||
LightMakeUpEnum(String key, String path, int iconRes, int strRes) {
|
||||
this.key = key;
|
||||
this.path = path;
|
||||
this.iconRes = iconRes;
|
||||
this.strRes = strRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取口红颜色
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public FUColorRGBData getLipColorRGBData() {
|
||||
double[] colorArray = loadRgbaColorFromLocal(FaceUnityData.mApplication, path);
|
||||
if (colorArray != null && colorArray.length == 4) {
|
||||
return new FUColorRGBData(colorArray[0] * 255, colorArray[1] * 255, colorArray[2] * 255, colorArray[3] * 255);
|
||||
}
|
||||
return new FUColorRGBData(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
/**
|
||||
* 读取 RGBA 颜色数据
|
||||
*
|
||||
* @param context
|
||||
* @param path path
|
||||
* @return
|
||||
*/
|
||||
public static double[] loadRgbaColorFromLocal(Context context, String path) {
|
||||
InputStream inputStream = FileUtils.readInputStreamByPath(context, path);
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
byte[] bytes = new byte[inputStream.available()];
|
||||
inputStream.read(bytes);
|
||||
JSONObject jsonObject = new JSONObject(new String(bytes));
|
||||
JSONArray jsonArray = jsonObject.optJSONArray("rgba");
|
||||
double[] colorArray = new double[jsonArray.length()];
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
colorArray[i] = jsonArray.optDouble(i);
|
||||
}
|
||||
return colorArray;
|
||||
} catch (IOException | JSONException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
import static android.content.Context.MODE_PRIVATE;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
|
||||
import com.faceunity.core.entity.FUBundleData;
|
||||
import com.faceunity.core.entity.FUColorRGBData;
|
||||
import com.faceunity.core.model.prop.humanOutline.HumanOutline;
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.FunctionEnum;
|
||||
import com.yunbao.faceunity.entity.PropCustomBean;
|
||||
import com.yunbao.faceunity.infe.AbstractPropCustomDataFactory;
|
||||
import com.yunbao.faceunity.utils.FaceUnityConfig;
|
||||
import com.yunbao.faceunity.utils.FaceUnityData;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* DESC:人像分割数据构造
|
||||
* Created on 2021/3/28
|
||||
*/
|
||||
public class PortraitSegmentSource {
|
||||
|
||||
private static final String BG_SEG_CUSTOM_FILEPATH = "bg_seg_custom";
|
||||
|
||||
/**
|
||||
* 缓存自定义添加人像
|
||||
*
|
||||
* @param path
|
||||
*/
|
||||
public static void saveCachePortraitSegment(String path) {
|
||||
SharedPreferences sp = FaceUnityData.mApplication.getSharedPreferences(BG_SEG_CUSTOM_FILEPATH, MODE_PRIVATE);
|
||||
sp.edit().putString(BG_SEG_CUSTOM_FILEPATH, path).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义添加人像
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String getCachePortraitSegment() {
|
||||
SharedPreferences sp = FaceUnityData.mApplication.getSharedPreferences(BG_SEG_CUSTOM_FILEPATH, MODE_PRIVATE);
|
||||
return sp.getString(BG_SEG_CUSTOM_FILEPATH, "");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构造道具队列
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<PropCustomBean> buildPropBeans() {
|
||||
ArrayList<PropCustomBean> propBeans = new ArrayList<>();
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_control_delete_all, null, AbstractPropCustomDataFactory.TYPE_NONE));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_control_add, null, AbstractPropCustomDataFactory.TYPE_ADD));
|
||||
PropCustomBean customBean = buildPropCustomBean(getCachePortraitSegment());
|
||||
if (customBean != null) {
|
||||
propBeans.add(customBean);
|
||||
}
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_human_outline, "effect/segment/human_outline.bundle", FunctionEnum.HUMAN_OUTLINE));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_boyfriend_1, "effect/segment/boyfriend1.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_boyfriend_2, "effect/segment/boyfriend3.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_boyfriend_3, "effect/segment/boyfriend2.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_hez_ztt_fu, "effect/segment/hez_ztt_fu.bundle", FunctionEnum.PORTRAIT_SEGMENT, R.string.hez_ztt_fu));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_gufeng_zh_fu, "effect/segment/gufeng_zh_fu.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_xiandai_ztt_fu, "effect/segment/xiandai_ztt_fu.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_sea_lm_fu, "effect/segment/sea_lm_fu.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
propBeans.add(new PropCustomBean(R.mipmap.icon_segment_ice_lm_fu, "effect/segment/ice_lm_fu.bundle", FunctionEnum.PORTRAIT_SEGMENT));
|
||||
return propBeans;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构造自定义人像分割
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public static PropCustomBean buildPropCustomBean(String path) {
|
||||
if (path != null && path.trim().length() > 0 && new File(path).exists()) {
|
||||
saveCachePortraitSegment(path);
|
||||
return new PropCustomBean(0, FaceUnityConfig.BUNDLE_BG_SEG_CUSTOM, FunctionEnum.BG_SEG_CUSTOM, 0, path );
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构造人像分割线模型
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public static HumanOutline getHumanOutline(String path) {
|
||||
HumanOutline humanOutline = new HumanOutline(new FUBundleData(path));
|
||||
humanOutline.setLineSize(2.8);
|
||||
humanOutline.setLineGap(2.8);
|
||||
humanOutline.setLineColor(new FUColorRGBData(255.0, 196.0, 0.0));
|
||||
return humanOutline;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,28 +1,79 @@
|
||||
package com.yunbao.faceunity.repo;
|
||||
|
||||
|
||||
import com.yunbao.faceunity.R;
|
||||
import com.yunbao.faceunity.entity.FunctionEnum;
|
||||
import com.yunbao.faceunity.entity.PropBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* DESC:道具数据构造
|
||||
* DESC:道具数据构造:道具贴图、AR面具、搞笑大头、表情识别、哈哈镜、手势识别、游戏
|
||||
* Created on 2021/3/28
|
||||
*/
|
||||
public class PropSource {
|
||||
|
||||
/**
|
||||
* 构造贴纸列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<PropBean> buildPropBeans() {
|
||||
public static ArrayList<PropBean> buildPropBeans(int propType) {
|
||||
ArrayList<PropBean> propBeans = new ArrayList<>();
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_sdlu, "sticker/sdlu.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_fashi, "sticker/fashi.bundle"));
|
||||
switch (propType) {
|
||||
case FunctionEnum.STICKER:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_cat_sparks, "effect/normal/cat_sparks.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_fu_zh_fenshu, "effect/normal/fu_zh_fenshu.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_sdlr, "effect/normal/sdlr.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_xlong_zh_fu, "effect/normal/xlong_zh_fu.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_newy1, "effect/normal/newy1.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_redribbt, "effect/normal/redribbt.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_daisypig, "effect/normal/daisypig.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_sticker_sdlu, "effect/normal/sdlu.bundle"));
|
||||
break;
|
||||
case FunctionEnum.AR_MASK:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_bluebird, "effect/ar/bluebird.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_lanhudie, "effect/ar/lanhudie.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_fenhudie, "effect/ar/fenhudie.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_tiger_huang, "effect/ar/tiger_huang.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_tiger_bai, "effect/ar/tiger_bai.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_baozi, "effect/ar/baozi.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_tiger, "effect/ar/tiger.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_ar_xiongmao, "effect/ar/xiongmao.bundle"));
|
||||
break;
|
||||
case FunctionEnum.BIG_HEAD:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head, "effect/big_head/big_head.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head_husky_face, "effect/big_head/big_head_facewarp2.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head_sausage_mouth, "effect/big_head/big_head_facewarp4.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head_blush, "effect/big_head/big_head_facewarp5.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head_dark_circles, "effect/big_head/big_head_facewarp6.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_big_head_smiling_head, "effect/big_head/big_head_smile.bundle", R.string.xiaobianzi_zh_fu));
|
||||
break;
|
||||
case FunctionEnum.EXPRESSION_RECOGNITION:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_future_warrior, "effect/expression/future_warrior.bundle", R.string.future_warrior));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_jet_mask, "effect/expression/jet_mask.bundle", R.string.jet_mask));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_sdx2, "effect/expression/sdx2.bundle", R.string.sdx2));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_luhantongkuan_ztt_fu, "effect/expression/luhantongkuan_ztt_fu.bundle", R.string.luhantongkuan_ztt_fu));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_qingqing_ztt_fu, "effect/expression/qingqing_ztt_fu.bundle", R.string.qingqing_ztt_fu));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_xiaobianzi_zh_fu, "effect/expression/xiaobianzi_zh_fu.bundle", R.string.xiaobianzi_zh_fu));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_expression_xiaoxueshen_ztt_fu, "effect/expression/xiaoxueshen_ztt_fu.bundle", R.string.xiaoxueshen_ztt_fu));
|
||||
break;
|
||||
case FunctionEnum.FACE_WARP:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_face_warp_2, "effect/facewarp/facewarp2.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_face_warp_3, "effect/facewarp/facewarp3.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_face_warp_4, "effect/facewarp/facewarp4.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_face_warp_5, "effect/facewarp/facewarp5.bundle"));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_face_warp_6, "effect/facewarp/facewarp6.bundle"));
|
||||
break;
|
||||
case FunctionEnum.GESTURE_RECOGNITION:
|
||||
propBeans.add(new PropBean(R.mipmap.icon_control_delete_all, null));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_rain, "effect/gesture/ctrl_rain.bundle", R.string.push_hand));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_snow, "effect/gesture/ctrl_snow.bundle", R.string.push_hand));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_flower, "effect/gesture/ctrl_flower.bundle", R.string.push_hand));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_koreaheart, "effect/gesture/ssd_thread_korheart.bundle", R.string.fu_lm_koreaheart));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_six, "effect/gesture/ssd_thread_six.bundle", R.string.ssd_thread_six));
|
||||
propBeans.add(new PropBean(R.mipmap.icon_gesture_cute, "effect/gesture/ssd_thread_cute.bundle", R.string.ssd_thread_cute));
|
||||
break;
|
||||
}
|
||||
return propBeans;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user