java - Bad Base - 尝试发送图像时出现 64 错误
问题描述
我希望在两个设备之间共享页面的屏幕截图。屏幕截图存储在位图中,然后我将其转换为字节数组,然后将其转换为 Base 64 中的字符串。然后将字符串发送到将显示图像的处理程序。在我尝试解码图像后,它给了我一个:java.lang.IllegalArgumentException: bad base-64
我已经尝试以不同的方式发送图像,并尝试了所有不同的 Base 64 方法,例如 Base64.DEFAULT、URLSAFE、NOPADDING 等...
这是我创建屏幕截图并发送的地方:
Bitmap b =
Screenshot.takescreenshotofRootView(MainActivity.imageView);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG,100,baos);
byte[] bytea = baos.toByteArray();
String temp = Base64.encodeToString(bytea, Base64.DEFAULT);
sendReceive.write(temp.getBytes());
这是我处理这些数据的地方
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_READ:
MainActivity.imageView.setImageBitmap(bitm);
byte[] readBuff = (byte[]) msg.obj;
String tempMsg = new String(readBuff, 0, msg.arg1);
byte [] encodeByte = Base64.decode(tempMsg,Base64.URL_SAFE);
Bitmap bitms
= BitmapFactory.decodeByteArray(encodeByte,0,encodeByte.length);
MainActivity.imageView.setImageBitmap(bitms);
break;
}
return true;
}
});
解决方案
您可能会在没有意识到的情况下收到 OutOfMemoryError,从而使您的 base64 字符串无效。您应该使用 try/catch 块包装您的代码,以查看是否发生这种情况。这是我的一些代码中的一个示例:
String imageString = "";
try {
if (this.theBitmap != null) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
this.theBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
imageString = Base64.encodeToString(bytes, Base64.DEFAULT);
}
}catch(OutOfMemoryError E){
Log.e("MyApp", "Out Of Memory error");
}
推荐阅读
- docusignapi - DocuSign 如何将私钥保存为 .PEM 文件
- c# - 如何记录未经授权的访问尝试
- angular - 角度 laravel 未经授权的 401 错误
- hadoop - 安装 hadoop 后出现“WARN hdfs.DFSClient: DataStreamer Exception”
- python - 我应该在张量流中将什么样的形状输入到这个占位符中?
- c - 简单的递归函数误解
- android - 使用高于 15.0.0 版本的 FireStore 会导致错误
- python - 变量范围附加一个数字
- php - org.json.JSONException:java.lang.String 类型的值记录无法转换为 JSONObject
- pandas - 在熊猫中使用关键字计数创建新变量