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);
}
}
답변
이 쉬운 해결책을 찾았습니다
비트 맵에서 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);
}