Base64 문자열을 비트 맵 이미지로 변환하여 ImageView에 표시하는 방법은 무엇입니까? Android 앱의

BitMap 이미지를 나타내는 Base64 String이 있습니다.

내 Android 앱의 ImageView에서 사용하려면 해당 문자열을 BitMap 이미지로 다시 변환해야합니다.

어떻게합니까?

이것은 이미지를 base64 문자열로 변환하는 데 사용하는 코드입니다.

//proceso de transformar la imagen BitMap en un String:
//android:src="c:\logo.png"
Resources r = this.getResources();
Bitmap bm = BitmapFactory.decodeResource(r, R.drawable.logo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray();
//String encodedImage = Base64.encode(b, Base64.DEFAULT);
encodedImage = Base64.encodeBytes(b);


답변

기본적으로 다른 내장 메소드를 사용하여 코드를 되돌릴 수 있습니다.

byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

답변

이 질문에 여전히 관심이있는 사람에게 : If : 1-decodeByteArray는 null 2-Base64를 반환합니다.

해결책은 다음과 같습니다.-API에서 보낸 값이 Base64로 인코딩되어 있고 비트 맵 객체로 캐스트하려면 먼저 디코딩해야합니다. Base64로 인코딩 된 문자열을 살펴보십시오.

데이터 : 이미지 / jpg; base64

Base64.decode는이를 해독 할 수 없으므로 인코딩 된 문자열에서 제거해야합니다.

final String encodedString = "data:image/jpg;base64, ....";
final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")  + 1);

이제 pureBase64Encoded 오브젝트를 디코딩 할 준비가되었습니다.

final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);

이제 아래 줄을 사용하여 이것을 비트 맵 객체 로 바꾸십시오 ! :

비트 맵 decodedBitmap = BitmapFactory.decodeByteArray (decodedBytes, 0, decodedBytes.length);

또는 훌륭한 라이브러리 Glide를 사용하는 경우 :

Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);

이것은 일을해야합니다! 이것에 하루가 낭비 되었고이 솔루션을 찾았습니다!

참고 : 여전히 나쁜 base64 오류가 발생하면 Base64.URL_SAFE 등과 같은 다른 Base64.decode 플래그를 고려하십시오.


답변

이것은 매우 오래된 스레드이지만 @Anirudh가 직면 한 것처럼 NULL반환 을 관리하는 데 많은 개발 시간이 필요했기 때문에이 답변을 공유한다고 생각했습니다 BitmapFactory.decodeByteArray().

는 IF encodedImage문자열이 있습니다 JSON응답, 단순히 사용하는 Base64.URL_SAFE대신Base64.DEAULT

byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

답변

온라인으로 확인하려면 사용할 수 있습니다

http://codebeautify.org/base64-to-image-converter

이런 식으로 문자열을 이미지로 변환 할 수 있습니다

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView image =(ImageView)findViewById(R.id.image);

        //encode image to base64 string
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

        //decode base64 string to image
        imageBytes = Base64.decode(imageString, Base64.DEFAULT);
        Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
        image.setImageBitmap(decodedImage);
    }
}

http://www.thecrazyprogrammer.com/2016/10/android-convert-image-base64-string-base64-string-image.html


답변

이 쉬운 해결책을 찾았습니다

비트 맵에서 Base64로 변환하려면이 방법을 사용하십시오.

private String convertBitmapToBase64(Bitmap bitmap) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream .toByteArray();
    return Base64.encodeToString(byteArray, Base64.DEFAULT);
}

Base64에서 비트 맵으로 변환 또는 되돌리기

private Bitmap convertBase64ToBitmap(String b64) {
    byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
}