我有一个表示BitMap图像的Base64字符串。
我需要再次将该String转换为BitMap图像,以便在我的Android应用中的ImageView上使用它
怎么做?
这是我用来将图像转换为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);
答案 0 :(得分:305)
您可以使用其他一些内置方法基本上恢复您的代码。
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
答案 1 :(得分:54)
对于仍然对此问题感兴趣的任何人: 如果: 1-decodeByteArray返回null 2-Base64.decode抛出bad-base64异常
以下是解决方案: - 您应该考虑从API发送给您的值是Base64编码并应首先解码,以便将其转换为Bitmap对象! - 看看你的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);
现在只需使用下面的行将其转换为位图对象! :
Bitmap decodingBitmap = BitmapFactory.decodeByteArray(decodingBytes,0, decodedBytes.length);
或者如果你正在使用伟大的图书馆 Glide :
Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);
这应该可以胜任!它浪费了一天时间来实现这个解决方案!
注意强>: 如果您仍然遇到bad-base64错误,请考虑其他Base64.decode标记,如Base64.URL_SAFE等等
答案 2 :(得分:14)
这是一个非常古老的主题,但我想分享这个答案,因为我需要花费大量的开发时间来管理NULL
{@ 1}} @Anirudh面临的回归。
如果BitmapFactory.decodeByteArray()
字符串是encodedImage
响应,只需使用JSON
代替Base64.URL_SAFE
Base64.DEAULT
答案 3 :(得分:8)
要在线查看,您可以使用
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);
}
}
答案 4 :(得分:1)
这是一个很好的示例:
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
找到了示例这是过去唯一对我有用的代码。
答案 5 :(得分:1)
在 Kotlin 中你可以使用如下扩展函数:
fun String.base64ToByteCode() = Base64.decode(this.substring(this.indexOf(",") + 1), Base64.DEFAULT)
并将其称为如下:
yourBase64String.base64ToByteCode()
答案 6 :(得分:0)
我找到了这个简单的解决方案
要从位图转换为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);
}
答案 7 :(得分:0)
我已经尝试了所有的解决方案,这个对我有用
let temp = base64String.components(separatedBy: ",")
let dataDecoded : Data = Data(base64Encoded: temp[1], options:
.ignoreUnknownCharacters)!
let decodedimage = UIImage(data: dataDecoded)
yourImage.image = decodedimage