투케이2K

558. (kotlin/코틀린) 안드로이드 zxing 라이브러리 사용해 QR 및 Barcode 이미지 파일 (png, jpg) 스캔 수행 본문

Kotlin

558. (kotlin/코틀린) 안드로이드 zxing 라이브러리 사용해 QR 및 Barcode 이미지 파일 (png, jpg) 스캔 수행

투케이2K 2026. 1. 1. 12:27
728x90

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 기술 구분 : Android / zxing / QR / Barcode


- 사전) ZXing 라이브러리 설명 정리 : 

  >> zxing 이란 안드로이드에서 QR 코드 생성 및 QR 스캔, Barcode 스캔에 도움을 주는 라이브러리 입니다

  >> zxing 특징 : 

    - Intents를 통해 사용할 수 있습니다​

    - UI 및 논리의 고급 사용자 정의를 위해 활동에 포함할 수 있습니다.

    - 가로 또는 세로 모드에서 스캔을 수행할 수 있습니다.

    - 카메라는 빠른 시작 시간을 위해 백그라운드 스레드에서 관리됩니다.


- 사전) 안드로이드 Build.gradle 설정 사항 : 

    android {

        // [컴파일 버전]
        compileSdk 34

        // [Config 셋팅]
        defaultConfig {
            // ----------------------------
            applicationId "com.example.appproject" // 앱 아이디
            // ----------------------------
            versionCode 1 // 빌드 버전
            // ----------------------------
            versionName '1.0.1' // 빌드 네임
            // ----------------------------
            minSdk 24 // 최소 빌드 버전
            // ----------------------------
            targetSdk 34 // TODO 타겟 빌드 버전
            // ----------------------------
        }

        // [컴파일 자바 버전 지정]
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        // [아파치 http 사용 설정]
        useLibrary ('org.apache.http.legacy')
    }

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

// ----------------------------------------------------------------------
// TODO [SEARCH FAST] : [Observable] : [QR 및 Barcode 저장 된 이미지 스캔 메소드]
// ----------------------------------------------------------------------
// TODO [필요 설치 라이브러리] :
// ----------------------------------------------------------------------
/*
* implementation 'com.journeyapps:zxing-android-embedded:3.5.0'
* implementation "com.google.zxing:core:3.3.0"
* */
// ----------------------------------------------------------------------
// TODO [호출 방법 소스 코드]
// ----------------------------------------------------------------------
/*
try {

    val assetManager = assets
    val inputStream = assetManager.open("testQrImg.png")

    val bitmap = BitmapFactory.decodeStream(inputStream)

    if (inputStream != null) {
        try {
            inputStream.close()
        } catch (ignored: IOException) {
        }
    }

    C_Ui_View.getQrBarcodeImageFileScan(this@A_Webview, bitmap)

}
catch (Exception e){
    e.printStackTrace();
}
*/
// ----------------------------------------------------------------------
fun getQrBarcodeImageFileScan(mContext: Context?, bitmap: Bitmap?): String {

    // [리턴 변수 선언]
    var returnData = ""
    var M_LOG = ""


    // [로직 처리 수행]
    try {

        if (mContext != null && bitmap != null) {
            val newBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)

            val width = newBitmap.width
            val height = newBitmap.height
            val pixels = IntArray(width * height)

            newBitmap.getPixels(pixels, 0, width, 0, 0, width, height)

            val source = RGBLuminanceSource(width, height, pixels)

            val binaryBitmap = BinaryBitmap(HybridBinarizer(source))

            val reader = MultiFormatReader()

            val hints: MutableMap<DecodeHintType, Any?> = EnumMap(
                DecodeHintType::class.java
            )

            hints[DecodeHintType.TRY_HARDER] = true
            hints[DecodeHintType.CHARACTER_SET] = "UTF-8"
            hints[DecodeHintType.POSSIBLE_FORMATS] = Arrays.asList( // TODO 포맷 제한
                BarcodeFormat.QR_CODE,
                BarcodeFormat.CODE_128 //BarcodeFormat.CODE_39,
                //BarcodeFormat.EAN_13,
                //BarcodeFormat.EAN_8,
                //BarcodeFormat.UPC_A,
                //BarcodeFormat.DATA_MATRIX,
                //BarcodeFormat.PDF_417
            )

            reader.setHints(hints)

            val result = reader.decode(binaryBitmap)

            Log.d("BARCODE_TYPE", result.barcodeFormat.toString())
            Log.d("BARCODE_TEXT", result.text)

            /*
            BARCODE_TYPE: CODE_128
            BARCODE_TEXT: 123456789012
            */

            returnData = result.text
            M_LOG = "[Success] : Qr 및 Barcode 이미지 스캔 성공"
        } else {
            M_LOG = "[Error] : Input Context Or Bitmat Is Null"
        }

    } catch (e: Exception) {
        e.printStackTrace()

        M_LOG = "[Exception] : " + e.message.toString()
    }


    // ===============================================================
    S_Log._F_(mContext!!, "Qr 및 Barcode 이미지 파일 스캔 수행 실시", arrayOf(
        "M_LOG :: $M_LOG",
        "ReturnData :: $returnData"
    ))
    // ===============================================================


    // [리턴 변수 반환]
    return returnData
}

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[zxing 라이브러리 사용해 QR 코드 스캔 실시]

https://kkh0977.tistory.com/732

https://blog.naver.com/kkh0977/222347746837?trackingCode=blog_bloghome_searchlist


[참고 사이트] [온라인] QR 코드 생성 사이트

https://blog.naver.com/kkh0977/223112864218?trackingCode=blog_bloghome_searchlist


[라이브러리] [Android] zxing (Java / QR / Barcode)

https://blog.naver.com/kkh0977/222914899604?trackingCode=blog_bloghome_searchlist


[Mobile] 모바일 ( android , ios ) 에서 QR 코드 스캔 후 정보 확인 및 다시 스캔 로직 수행

https://blog.naver.com/kkh0977/223624907452?trackingCode=blog_bloghome_searchlist


[Mobile] 모바일 ( android , ios ) 에서 QR 코드 생성 시 화면 밝기 및 QR 코드 사이즈 최대 표시 Alert 팝업창 활성

https://blog.naver.com/kkh0977/223624876714?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments