Android中如何开发一个证件照DIY小程序
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍"Android中如何开发一个证件照DIY小程序",在日常操作中,相信很多人在Android中如何开发一个证件照DIY小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年11月13日Android中如何开发一个证件照DIY小程序
这篇文章主要介绍"Android中如何开发一个证件照DIY小程序",在日常操作中,相信很多人在Android中如何开发一个证件照DIY小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android中如何开发一个证件照DIY小程序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1 开发准备
1.1 在项目级gradle里添加华为maven仓
打开AndroidStudio项目级build.gradle文件。
增量添加如下maven地址:
buildscript { repositories { maven {url 'http://developer.huawei.com/repo/'} } }allprojects { repositories { maven { url 'http://developer.huawei.com/repo/'} }}1.2 在应用级的build.gradle里面加上SDK依赖
把人脸识别的SDK和基础SDK引入
dependencies{ // 引入基础SDK implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300' // 引入人脸检测能力包 implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:1.0.2.301' }1.3 在AndroidManifest.xml文件里面增量添加模型自动下载
要使应用程序能够在用户从华为应用市场安装您的应用程序后,自动将最新的机器学习模型更新到用户设备,请将以下语句添加到该应用程序的AndroidManifest.xml文件中:
1.4 在AndroidManifest.xml文件里面申请相机和存储权限
2 代码开发关键步骤
2.1 动态权限申请
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (!allPermissionsGranted()) { getRuntimePermissions(); }}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode != PERMISSION_REQUESTS) { return; } boolean isNeedShowDiag = false; for (int i = 0; i < permissions.length; i++) { if (permissions[i].equals(Manifest.permission.READ_EXTERNAL_STORAGE) && grantResults[i] != PackageManager.PERMISSION_GRANTED) { // 如果相机或者存储权限没有授权,则需要弹出授权提示框 isNeedShowDiag = true; } } if (isNeedShowDiag && !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) { AlertDialog dialog = new AlertDialog.Builder(this) .setMessage(getString(R.string.camera_permission_rationale)) .setPositiveButton(getString(R.string.settings), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); // 根据包名打开对应的设置界面 startActivityForResult(intent, 200); startActivity(intent); } }) .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).create(); dialog.show(); }}2.2 创建图像分割检测器
可以通过图像分割检测配置器"MLImageSegmentationSetting"创建图像分割检测器。
MLImageSegmentationSetting setting = new MLImageSegmentationSetting.Factory() .setAnalyzerType(MLImageSegmentationSetting.BODY_SEG) .setExact(true) .create(); this.analyzer = MLAnalyzerFactory.getInstance().getImageSegmentationAnalyzer(setting);
2.3 通过android.graphics.Bitmap创建"MLFrame"对象用于分析器检测图片
可以通过图像分割检测配置器"MLImageSegmentationSetting"创建图像分割检测器。
MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();
2.4 调用"asyncAnalyseFrame "方法进行图像分割。
// 创建一个task,处理图像分割检测器返回的结果。 Tasktask = analyzer.asyncAnalyseFrame(frame); // 异步处理图像分割检测器返回结果 Task task = this.analyzer.asyncAnalyseFrame(mlFrame); task.addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(MLImageSegmentation mlImageSegmentationResults) { // Transacting logic for segment success. if (mlImageSegmentationResults != null) { StillCutPhotoActivity.this.foreground = mlImageSegmentationResults.getForeground(); StillCutPhotoActivity.this.preview.setImageBitmap(StillCutPhotoActivity.this.foreground); StillCutPhotoActivity.this.processedImage = ((BitmapDrawable) ((ImageView) StillCutPhotoActivity.this.preview).getDrawable()).getBitmap(); StillCutPhotoActivity.this.changeBackground(); } else { StillCutPhotoActivity.this.displayFailure(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // Transacting logic for segment failure. StillCutPhotoActivity.this.displayFailure(); return; } });
2.5 更换图片背景。
this.backgroundBitmap = BitmapUtils.loadFromPath(StillCutPhotoActivity.this, id, targetedSize.first, targetedSize.second);BitmapDrawable drawable = new BitmapDrawable(backgroundBitmap);this.preview.setDrawingCacheEnabled(true);this.preview.setBackground(drawable);this.preview.setImageBitmap(this.foreground);this.processedImage = Bitmap.createBitmap(this.preview.getDrawingCache());this.preview.setDrawingCacheEnabled(false);
到此,关于"Android中如何开发一个证件照DIY小程序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
检测
图像
程序
开发
检测器
学习
应用
证件
文件
应用程序
权限
人脸
可以通过
图片
基础
增量
方法
更多
模型
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么将函数写进数据库
网络安全怎么治理论文
博思视频控制服务器
网络安全信息专业课程
昆达软件开发
数据库如何删除多个记录
平板app服务器连接失败
数据库用什么软件修复
web服务器web应用程序
一个软件开发人员
消息引擎和数据库
江苏华夏网络技术有限公司
怎么看数据库字符多少
我的世界 国际版 服务器 免费
全运会网络安全工作要求
韩城租房软件开发
四川安卓软件开发如何收费
eplan注意数据库以损坏
网络安全方向有什么
微信支付服务器设置密码
聚信科技软件开发
建立云数据库需要什么
数据库ldf文件
数据库的操作方式有哪两种
您已违反网络安全
服务器连接电脑视频
sql数据库怎么下载网址
云易网络技术
软件开发人员费用
实现平台无关性web数据库技术