我有一个代表位图图像的Base64字符串。
我需要将字符串转换为位图图像再次使用它在ImageView在我的Android应用程序
怎么做呢?
这是我用来将图像转换为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);
这是一个很好的例子:
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);
样本见于:https://freakycoder.com/android-notes-44-how-to-convert-base64-string-to-bitmap-53f98d5e57af
这是过去唯一对我有用的代码。
这是一个很好的例子:
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);
样本见于:https://freakycoder.com/android-notes-44-how-to-convert-base64-string-to-bitmap-53f98d5e57af
这是过去唯一对我有用的代码。
这是一个非常老的线程,但认为分享这个答案,因为它花了很多我的开发时间来管理BitmapFactory.decodeByteArray()的NULL返回@Anirudh已经面临。
如果encodedImage字符串是一个JSON响应,只需使用Base64。URL_SAFE而不是Base64。DEAULT
byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
对于仍然对这个问题感兴趣的人:
如果:
1-decodeByteArray返回null
2-Base64.decode抛出bad-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);
这个应该能搞定!它在这个问题上浪费了一天时间,然后想出了这个解决方案!
注意:
如果你仍然得到bad-base64错误,考虑其他Base64.decode标志,如Base64。URL_SAFE等等