마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 Bitmap Base64 인코딩 질문

0 추천

Bitmap 이미지를 Base64로 인코딩 할려고합니다

    public String BitmapToBase64(Bitmap bm){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] bImage = baos.toByteArray();
        String base64 = Base64.encodeToString(bImage, Base64.DEFAULT);
        return base64;
    }

Bitmap으로 가져올때 원본이미지 용량이 235KB 이지만 Base64 인코딩해서 txt 파일로 만들었을때 용량이 2.27MB 로 8배정도 커집니다. Base64로 인코딩시 얼마간 용량이 좀 커진다는건 알고 있지만 이정도는 너무 커지네요ㅠㅠ 인코딩한 문자열을 다시 디코딩해서 Bitmap이미지로 만들고 이미지 파일로 만들었을경우 이미지 용량이 1.68MB 이네요..  

다시말해 원본이미지(235KB) ->Base64인코딩(2.27MB) ->Base64디코딩 -> 변환이미지(1.68MB) 이렇습니다.

위에소스는 인코딩시 소스구 아래소스는 디코딩 소스입니다.

    public Bitmap Base64ToBitmap(String base64){
        byte[] bImage = Base64.decode(base64, Base64.DEFAULT);
        ByteArrayInputStream bais = new ByteArrayInputStream(bImage);
        Bitmap bitmap = BitmapFactory.decodeStream(bais);
        return bitmap;
    }

인코딩 디코딩을 거친 파일이 원본파일보다 8배정도 커지고 있습니다. ㅠㅠ 

왜그런지 해결을 못하고 있습니다.

 

 

 

play1235 (120 포인트) 님이 2015년 12월 18일 질문

2개의 답변

0 추천
base64 를 디코딩 하면서 bitmap 생성 시 compress 옵션에 값을 조정해보세요
aucd29 (218,390 포인트) 님이 2015년 12월 18일 답변
원본 그대로 하기위해서 compress 100으로 줬습니다
그게 그 의미가 아닌데 말이죠
0 추천
정상입니다. base64의 경우 size가 X라면   (((x)+2) / 3 * 4 + 1) 가 인코딩한 길이가 되는데 그걸 string으로 내보내다 보니 길이가 엄청 늘어난듯 합니다.

통신을 할 것도 아니구 DB같은데 스트링으로 넣으실 것도 아닌데  base64인코딩을 하시는 이유를 모르겠네요..

 base64처리 하지 마시고 바이너리로 사용하시는게 좋을 듯 합니다.
익명사용자 님이 2015년 12월 21일 답변
...