티스토리 뷰

안드로이드

Bitmap to Byte Array

성현아빠 2020. 2. 21. 11:24

서버에 이미지파일을 전송하는데

thumbnail 이미지 파일도 전송을 해달라고 요청이 왔어요.

 

검색을 하다보니 썸네일 이미지를 파일로 저장해서 보내는것들이 있었지만,

파일로 저장하면 안되는 조건이라 몇일을 검색해서 방법을 찾았네요. ^^

 

안드로이드 스튜디오 3.6으로 업그레이드 하면서 androidX 적용하고 코드에 에러가 발생했어요.

 

현재 수정된 방법

implementation 'com.github.bumptech.glide:glide:4.11.0'

파일명으로 bitmap 이미지를 가져와서 변환하는 방법이 있었네요.

val outputStream: OutputStream? = ByteArrayOutputStream()
val originalBitmap = BitmapFactory.decodeFile(thumbnailFileString)
val thumbnailBitmap = Bitmap.createScaledBitmap(originalBitmap, 120, 120, true)
thumbnailBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)

 

============================================================================

 

아래는 glide 3.7.0 버전에서 작업한 내용이에요.

implementation 'com.github.bumptech.glide:glide:3.7.0'

이미지 파일 -> Bitmap -> ByteArrayOutputStream으로 변환했어요.

 

1. 이미지 파일을 120x120 크기의 bitmap으로 변환(Glide 이용)

val thumbnailBitmap = Glide.with(context)
    .load(thumbnailFileString)  // 파일을 읽어서 변환
    .asBitmap()
    .into(120,120)
    .get()

 

2. Bitmap 이미지를 OutputStream에 compress 변환 및 ByteArray로 전달

var outputStream: OutputStream? = ByteArrayOutputStream()
thumbnailBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)

return outputStream.toString().toByteArray()

 

아직 서버에 전송된 파일을 확인 못햇지만 일단 서버연결 성공하여 

서버 전송된 파일은 나중에 확인.

 

p.s. 서버에서 썸네일 만들면 안되나??

 

참고: Bitmap을 Compress 작업할 때 OutputStream을 어떻게 받아야 할지 몰라 참고하게 되었는데 원하는걸 여기에서 찾게 되었네요.

https://examples.javacodegeeks.com/core-java/io/outputstream/java-io-outputstream-example/