Base64 문자열을 비트맵 이미지로 변환하여 이미지 보기에 표시하는 방법은 무엇입니까?
비트맵 이미지를 나타내는 Base64 String이 있습니다.
Android 앱의 ImageView에서 사용하려면 해당 문자열을 다시 BitMap 이미지로 변환해야 합니다.
어떻게 하죠?
이미지를 base64 String으로 변환할 때 사용하는 코드입니다.
//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);
이 질문에 여전히 관심이 있는 모든 사람에게:경우: 1-decodeByteArray가 null 2-Base64를 반환합니다.decode는 bad-Base64 예외를 발생시킵니다.
해결책은 다음과 같습니다. -API에서 보내진 값이 Base64 Encoded이고 비트맵 객체에 캐스트하기 위해서는 먼저 디코딩되어야 합니다! -Base64 Encoded String에서 시작하는 경우
데이터:image/javg;base64
Base64.decode는 디코딩할 수 없으므로 인코딩된 String에서 제거해야 합니다.
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.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);
이 정도면 될 겁니다!그것은 어느 날 이 일에 시간을 낭비하고 이 해결책에 도달했습니다!
참고: 여전히 bad-base64 오류가 발생하는 경우 Base64와 같은 다른 Base64.decode 플래그를 고려합니다.URL_SAFE 등
이것은 매우 오래된 스레드이지만 관리하는 데 개발 시간이 많이 소요되어 이 답변을 공유하려고 생각했습니다.NULL
의 환부BitmapFactory.decodeByteArray()
@Anirudh가 직면했던 것처럼.
만약에encodedImage
문자열은 a.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);
}
}
이것은 훌륭한 샘플입니다.
String base64String = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAA...";
String base64Image = base64String.split(",")[1];
byte[] decodedString = Base64.decode(base64Image, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
imageView.setImageBitmap(decodedByte);
샘플은 다음 사이트에서 찾을 수 있습니다.
이것이 과거에 나에게 효과가 있었던 유일한 코드입니다.
이 쉬운 해결책을 찾았습니다.
비트맵에서 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);
}
Kotlin에서는 다음과 같이 확장 기능을 사용할 수 있습니다.
fun String.base64ToByteCode() = Base64.decode(this.substring(this.indexOf(",") + 1), Base64.DEFAULT)
그리고 그것을 아래와 같이 부릅니다.
yourBase64String.base64ToByteCode()
이 솔루션은 잘 작동하고 있습니다. 만약 null을 받으시면 저에게 알려주세요.
private void bytesToImage(ImageView imageView, String base64String) {
if (!base64String.isEmpty()) {
byte[] bytes = Base64.decode(base64String, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Glide.with(this).load(decodedByte).into(imageView);
}
나는 모든 해결책을 시도해 보았는데 이 방법은 나에게 효과가 있었습니다.
let temp = base64String.components(separatedBy: ",")
let dataDecoded : Data = Data(base64Encoded: temp[1], options:
.ignoreUnknownCharacters)!
let decodedimage = UIImage(data: dataDecoded)
yourImage.image = decodedimage
Kotlin에서는 아래와 같이 ImageView에 확장 기능을 만들 수 있습니다.
fun ImageView.loadFromBase64(encodedImageString: String) {
try {
val base64Image = encodedImageString.split(",")[1]
val decodedString = Base64.decode(base64Image, Base64.DEFAULT)
val bitmap =
BitmapFactory.decodeByteArray(decodedString,0,decodedString.size)
setImageBitmap(bitmap)
} catch (e: Exception) {
Timber.d("Error loading image from base64: ${e.message}")
}
}
사용 시점에서 다음 작업을 쉽게 수행할 수 있습니다.
imageView.loadFromBase64(encodedImageString)
언급URL : https://stackoverflow.com/questions/4837110/how-to-convert-a-base64-string-into-a-bitmap-image-to-show-it-in-a-imageview
'programing' 카테고리의 다른 글
오류 2026:tls/ssl 오류:Sslv3 경고 핸드셰이크 실패 (0) | 2023.09.14 |
---|---|
여러 nginx 서버 블록을 구성할 수 없습니다. (0) | 2023.09.14 |
동일한 글꼴에 대해 여러 글꼴 파일을 추가하는 방법? (0) | 2023.09.14 |
Windows Ubuntu의 python에 패턴 모듈을 설치할 수 없습니다. (0) | 2023.09.14 |
C에서 캐스팅이 정수로 두 배 증가할 때 오버플로 처리 (0) | 2023.09.14 |