Commit a51d9a99 authored by yinjiacheng's avatar yinjiacheng

update 身份证、营业执照上传前压缩优化

parent 0ac4ebf6
package com.yidian.common.utils
import android.content.Context
import android.graphics.Bitmap
import id.zelory.compressor.Compressor
import id.zelory.compressor.constraint.destination
import id.zelory.compressor.constraint.format
import id.zelory.compressor.constraint.quality
import id.zelory.compressor.constraint.resolution
import kotlinx.coroutines.Dispatchers
import java.io.File
/**
* author: yinjiacheng
* date: 7/15/21 10:55 PM
* description: 图片压缩工具
* https://github.com/zetbaitsu/Compressor
*/
object ImageCompressUtils {
/**
* 图片压缩
* @param srcFile 源文件
* @param destFile 目标文件
* @param destWidth 目标宽度
* @param destHeight 目标高度
* @param quality 压缩质量
* @param format 压缩格式
* @param syncOrAsync 同步or异步
*/
suspend fun compress(
context: Context,
srcFile: File,
destFile: File? = null,
destWidth: Int? = null,
destHeight: Int? = null,
quality: Int? = null,
format: Bitmap.CompressFormat = Bitmap.CompressFormat.JPEG,
syncOrAsync: Boolean = false
): File {
return Compressor.compress(context, srcFile, if (syncOrAsync) Dispatchers.Main else Dispatchers.IO) {
destFile?.let { destination(it) }
destWidth?.let { width -> destHeight?.let { height -> resolution(width, height) } }
quality?.let { quality(it) }
format(format)
}
}
}
...@@ -112,4 +112,9 @@ object Constant { ...@@ -112,4 +112,9 @@ object Constant {
// 服务端返回的业务错误码 // 服务端返回的业务错误码
const val ERROR_CODE_PERSONAL_AUTH_INFO_DUPLICATE = 2103010 // 身份证号已认证并且认证手机号不是当前手机号 const val ERROR_CODE_PERSONAL_AUTH_INFO_DUPLICATE = 2103010 // 身份证号已认证并且认证手机号不是当前手机号
// 身份证、营业执照压缩参数
const val COMPRESS_DEST_WIDTH = 480 // 目标宽度
const val COMPRESS_DEST_HEIGHT = 640 // 目标高度
const val COMPRESS_DEST_QUALITY = 50 // 目标质量
} }
...@@ -14,10 +14,12 @@ import android.view.ViewGroup ...@@ -14,10 +14,12 @@ import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.tbruyelle.rxpermissions3.RxPermissions import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.common.base.BaseFragment import com.yidian.common.base.BaseFragment
import com.yidian.common.constant.GlobalConstants import com.yidian.common.constant.GlobalConstants
import com.yidian.common.utils.ImageCompressUtils
import com.yidian.framework.mobile.insight.manage.XInsight import com.yidian.framework.mobile.insight.manage.XInsight
import com.yidian.framework.mobile.insight.ocr.BusinessLicenseCallBack import com.yidian.framework.mobile.insight.ocr.BusinessLicenseCallBack
import com.yidian.framework.mobile.insight.ocr.BusinessLicenseResult import com.yidian.framework.mobile.insight.ocr.BusinessLicenseResult
...@@ -33,6 +35,7 @@ import com.yidian.shenghuoquan.newscontent.utils.FileUtil ...@@ -33,6 +35,7 @@ import com.yidian.shenghuoquan.newscontent.utils.FileUtil
import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthBusinessInfoEditView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthBusinessInfoEditView
import com.yidian.utils.ToastUtil import com.yidian.utils.ToastUtil
import kotlinx.coroutines.launch
import java.io.File import java.io.File
/** /**
...@@ -214,11 +217,20 @@ class LifeAccountBusinessLicenseAuthFragmentV2 : ...@@ -214,11 +217,20 @@ class LifeAccountBusinessLicenseAuthFragmentV2 :
*/ */
private fun startBusinessLicenseOCR() { private fun startBusinessLicenseOCR() {
// 上传前压缩图像 // 上传前压缩图像
BitmapUtil.compressImage( lifecycleScope.launch {
commonPath + Constant.FILE_PATH_BUSINESS_LICENSE, activity?.let {
10 ImageCompressUtils.compress(
it,
File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE),
File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE),
Constant.COMPRESS_DEST_WIDTH, Constant.COMPRESS_DEST_HEIGHT, Constant.COMPRESS_DEST_QUALITY
) )
XInsight.getBusinessLicenseOcrInfo(File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE), this) }
XInsight.getBusinessLicenseOcrInfo(
File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE),
this@LifeAccountBusinessLicenseAuthFragmentV2
)
}
} }
/** /**
......
...@@ -12,8 +12,10 @@ import android.view.View ...@@ -12,8 +12,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.tbruyelle.rxpermissions3.RxPermissions import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.common.base.BaseFragment import com.yidian.common.base.BaseFragment
import com.yidian.common.utils.ImageCompressUtils
import com.yidian.framework.mobile.insight.config.IdentityCardType import com.yidian.framework.mobile.insight.config.IdentityCardType
import com.yidian.framework.mobile.insight.config.ScreenOrientation import com.yidian.framework.mobile.insight.config.ScreenOrientation
import com.yidian.framework.mobile.insight.faceid.LiveVerifyCallBack import com.yidian.framework.mobile.insight.faceid.LiveVerifyCallBack
...@@ -43,6 +45,9 @@ import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthImageView ...@@ -43,6 +45,9 @@ import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthImageView
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountFaceAuthView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountFaceAuthView
import com.yidian.shenghuoquan.newscontent.widget.PrivacyAgreementView import com.yidian.shenghuoquan.newscontent.widget.PrivacyAgreementView
import com.yidian.utils.ToastUtil import com.yidian.utils.ToastUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File import java.io.File
/** /**
...@@ -292,10 +297,6 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu ...@@ -292,10 +297,6 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu
data?.data, data?.data,
cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE
) )
BitmapUtil.compressImage(
cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE,
10
)
startIDCardVerify(Constant.ID_CARD_PORTRAIT_FACE) startIDCardVerify(Constant.ID_CARD_PORTRAIT_FACE)
} else { } else {
val bitmap = BitmapUtil.generateBitmapFromUri( val bitmap = BitmapUtil.generateBitmapFromUri(
...@@ -309,10 +310,6 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu ...@@ -309,10 +310,6 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu
data?.data, data?.data,
cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE
) )
BitmapUtil.compressImage(
cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE,
10
)
startIDCardVerify(Constant.ID_CARD_NATIONAL_EMBLEM_FACE) startIDCardVerify(Constant.ID_CARD_NATIONAL_EMBLEM_FACE)
} }
} }
...@@ -357,11 +354,31 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu ...@@ -357,11 +354,31 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu
* @param face 身份证两面标识 * @param face 身份证两面标识
*/ */
private fun startIDCardVerify(face: Int) { private fun startIDCardVerify(face: Int) {
val uploadFile = if (face == Constant.ID_CARD_PORTRAIT_FACE) { lifecycleScope.launch {
// 压缩图片
val uploadFile = withContext(Dispatchers.IO) {
if (face == Constant.ID_CARD_PORTRAIT_FACE) {
activity?.let {
ImageCompressUtils.compress(
it,
File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE),
File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE),
Constant.COMPRESS_DEST_WIDTH, Constant.COMPRESS_DEST_HEIGHT, Constant.COMPRESS_DEST_QUALITY
)
}
File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE) File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE)
} else { } else {
activity?.let {
ImageCompressUtils.compress(
it,
File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE),
File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE),
Constant.COMPRESS_DEST_WIDTH, Constant.COMPRESS_DEST_HEIGHT, Constant.COMPRESS_DEST_QUALITY
)
}
File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE) File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE)
} }
}
XInsight.identityCardVerify( XInsight.identityCardVerify(
if (face == Constant.ID_CARD_PORTRAIT_FACE) IdentityCardType.PORTRAIT else IdentityCardType.NATIONAL_EMBLEM, if (face == Constant.ID_CARD_PORTRAIT_FACE) IdentityCardType.PORTRAIT else IdentityCardType.NATIONAL_EMBLEM,
uploadFile, uploadFile,
...@@ -415,7 +432,7 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu ...@@ -415,7 +432,7 @@ class LifeAccountIDCardAuthFragmentV2 : BaseFragment<FragmentLifeAccountIdCardAu
} }
} }
}) })
}
} }
override fun authPersonCheckSuccess() { override fun authPersonCheckSuccess() {
......
...@@ -54,9 +54,11 @@ object BitmapUtil { ...@@ -54,9 +54,11 @@ object BitmapUtil {
fun generateFileFromBitmap(bitmap: Bitmap?, quality: Int, destPath: String) { fun generateFileFromBitmap(bitmap: Bitmap?, quality: Int, destPath: String) {
val file = File(destPath) val file = File(destPath)
if (file.exists()) file.delete() if (file.exists()) file.delete()
file.parentFile?.mkdirs() if (file.parentFile?.exists() == false) file.parentFile?.mkdirs()
file.createNewFile() file.createNewFile()
bitmap?.compress(Bitmap.CompressFormat.JPEG, quality, FileOutputStream(destPath)) val outputStream = FileOutputStream(destPath)
bitmap?.compress(Bitmap.CompressFormat.JPEG, quality, outputStream)
outputStream.close()
} }
/** /**
......
...@@ -112,7 +112,9 @@ ext.dependencies = [ ...@@ -112,7 +112,9 @@ ext.dependencies = [
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper //https://github.com/CymChad/BaseRecyclerViewAdapterHelper
'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4', 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4',
// PictureSelector2.0 https://github.com/LuckSiege/PictureSelector // PictureSelector2.0 https://github.com/LuckSiege/PictureSelector
'io.github.lucksiege:pictureselector:v2.7.3-rc05' 'io.github.lucksiege:pictureselector:v2.7.3-rc05',
// Compressor https://github.com/zetbaitsu/Compressor
'id.zelory:compressor:3.0.1'
], ],
other : [ other : [
':CommonLib:Common' ':CommonLib:Common'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment