Android Base64 Decoding

2024. 1. 3. 23:00·Android

🎉 개요

안드로이드에서 서버측에 이미지를 받는 과정에서  Base64로 인코딩하여 전달 받습니다. 이 과정에서 이미지 처리가 정확히 어떻게 이루지는 것인지 한번 알아보겠습니다.

 

🎉 이미지 전송

갤러리에서 가져온 이미지의 Uri를 절대 경로로 반환합니다. 상대 경로를 사용하는 이유는 상대 경로보다 절대 경로를 사용하는 것이 더 정확하다고 하네요!

// 절대경로 변환
fun absolutelyPath(path: Uri, context : Context): String {
    val proj: Array<String> = arrayOf(MediaStore.Images.Media.DATA)
    val c: Cursor? = context.contentResolver.query(path!!, proj, null, null, null)
    val index = c?.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
    c?.moveToFirst()

    val result = c?.getString(index!!)

    return result!!
}

 

서버측에 전송할 enctype 은 Multipart입니다. 

 

HTTP multipart/form-data

이번엔 node.js로 이미지를 전송하는 서버를 만들던 중 multipart/form-data란 개념이 있어 알아보고 HTTP, multipart에 대해서도 알아보겠습니다. 1. HTTP(Hypertext Transfer Protocol)란? 인터넷 상에서 클라이언트

chanho-study.tistory.com

 

@Multipart
@POST("/db/upload") // 서버 엔드포인트 URL, HTTP POST 요청
suspend fun registStore(
    @Part storeimage: MultipartBody.Part, // 이미지 데이터를 나타내는 파라미터
    @Part("storename") storename: RequestBody,
    @Part("ceoName") ceoName: RequestBody,
    @Part("CRN") CRN: RequestBody,
    @Part("contact") contact: RequestBody,
    @Part("address") address: RequestBody,
    @Part("latitude") latitude: RequestBody,
    @Part("longitude") longitude: RequestBody,
    @Part("kind") kind: RequestBody
): ResponseBody

 

  • file : 절대 경로로 가져온 이미지를 통해 File 객체를 생성합니다.
  • requestFile : 파일을 RequestBody로 변환합니다.   image/*는 파일의 MIME 타입을 나타내며, 이 경우에는 이미지 파일을 나타냅니다.
  • body : Retrofit interface에 POST Request에서 storeImage의 Type이 MulitpartBody.part로 지정되어있습니다. 그러므로 최종 Data Type은 Multipartbody.Part Type이여야 합니다. 
val file = File(absolutelyPath(imgUri, context))
val requestFile = file.asRequestBody("image/*".toMediaTypeOrNull())
val body = MultipartBody.Part.createFormData("storeimage", file.name, requestFile)

🎉 이미지 받기

저는 서버에서 이미지를 전송할 때 Base64로 인코딩하여 전송하였습니다. Base64란 무엇일까요 ?

  • 이진 데이터를 텍스트로 인코딩합니다. 이진 데이터를 ASCII 문자로만 이루어진 문자열로 변환합니다
  • 주로 바이너리 데이터를 텍스트 형식으로 전송하거나 저장할 때 사용됩니다.
fun StringToBitmaps(image: String): Bitmap? {
    try{
        val encodedByte: ByteArray = Base64.decode(image, Base64.DEFAULT);
        val bitmap: Bitmap = BitmapFactory.decodeByteArray(encodedByte, 0, encodedByte.size)
        return bitmap
    }catch (e: Exception){
        Log.d("StringToBitmaps", "$e")
        return null
    }
}
  • 서버에서 Base64로 전송한 데이터를 디코딩하여 ByteArray로 변환합니다.
  • 디코딩된 이미지를 Bitmap 객체로 변환합니다.

'Android' 카테고리의 다른 글

[Android]Android Memory Process  (1) 2024.01.07
Android Daum 우편번호 서비스 API With FireBase Hosting  (2) 2024.01.04
Android LayoutInflater  (2) 2023.12.26
Android Fragment Life Cycle  (1) 2023.12.26
Android Activity Life Cycle  (3) 2023.12.26
'Android' 카테고리의 다른 글
  • [Android]Android Memory Process
  • Android Daum 우편번호 서비스 API With FireBase Hosting
  • Android LayoutInflater
  • Android Fragment Life Cycle
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • 우아한테크코스 (6)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (8)
      • Android (38)
      • PROJECT (11)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (4)
      • 컨퍼런스 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DataSource
    value class
    repository
    Repository Pattern
    sealed class
    컴포즈 디자인 시스템
    Compose Typography
    view 생명주기
    flow
    2025 우아콘 후기
    android Room
    ThrottleFirst
    callbackflow
    thread Context Switching
    retrofit call
    process Context Switching
    android view lifecylce
    코틀린 코루틴의 정석
    의존성 주입
    android clean architecture
    안드로이드 디자인 시스템
    DI
    Throttle
    Room
    Two pass process
    orbit
    MVI
    Clean Architecture
    coroutine Context Switching
    STATEFLOW
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
빨주노초잠만보
Android Base64 Decoding
상단으로

티스토리툴바