Android Studio中如何对拍摄的Aadhaar卡图片进行卡号打码处理
Aadhaar卡图片卡号打码实现方案
一、获取拍摄后的图片文件
你已经通过File Provider实现相机拍照功能,拍摄完成后会拿到图片的Uri,先将其转换为可操作的Bitmap:
fun uriToBitmap(context: Context, uri: Uri): Bitmap? { return try { val inputStream = context.contentResolver.openInputStream(uri) BitmapFactory.decodeStream(inputStream) } catch (e: IOException) { e.printStackTrace() null } }
二、打码实现方案
1. 固定区域打码(卡号位置固定场景)
如果Aadhaar卡的卡号在图片中的位置相对固定(提前测试确定坐标范围),直接在对应区域绘制黑色矩形覆盖:
fun addMaskToFixedArea(bitmap: Bitmap, maskRect: Rect): Bitmap { val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) val canvas = Canvas(mutableBitmap) val paint = Paint().apply { color = Color.BLACK style = Paint.Style.FILL } canvas.drawRect(maskRect, paint) return mutableBitmap }
使用时传入测试好的卡号区域Rect(比如Rect(120, 520, 780, 610)),即可生成打码后的Bitmap。
2. 自动识别卡号后打码(卡号位置不固定场景)
借助OCR工具识别卡号位置后打码,以Google ML Kit为例:
步骤1:添加依赖
在build.gradle中引入ML Kit文本识别依赖:
dependencies { implementation 'com.google.mlkit:text-recognition:16.0.0' }
步骤2:识别卡号位置
fun recognizeAadhaarNumber(context: Context, bitmap: Bitmap, callback: (Rect?) -> Unit) { val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) val image = InputImage.fromBitmap(bitmap, 0) recognizer.process(image) .addOnSuccessListener { result -> val aadhaarRegex = Regex("\\d{4}\\s\\d{4}\\s\\d{4}") // Aadhaar卡号格式匹配 for (block in result.textBlocks) { if (aadhaarRegex.matches(block.text)) { callback(block.boundingBox) return@addOnSuccessListener } } callback(null) } .addOnFailureListener { e -> e.printStackTrace() callback(null) } }
步骤3:根据识别结果打码
调用上述识别方法拿到卡号区域后,复用addMaskToFixedArea方法完成打码。
三、保存打码后的图片
将处理后的Bitmap保存回原文件或新文件,确保File Provider可正常访问:
fun saveBitmapToFile(bitmap: Bitmap, file: File) { try { val outputStream = FileOutputStream(file) bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream) outputStream.flush() outputStream.close() } catch (e: IOException) { e.printStackTrace() } }
注意事项
- 处理大图片时建议先压缩,避免内存溢出;
- 使用ML Kit OCR可配置离线模型,无需依赖网络;
- 覆盖原图片后,需通知系统媒体库更新,避免读取缓存内容。
内容的提问来源于stack exchange,提问作者Ambika
相关产品推荐
相关产品推荐

