在stackoverflow上有很多类似的问题,但我还没有找到解决我的问题的问题。所以我问了一个新问题。
我的问题是android中的图像的base64编码似乎没有给出可以在PHP中解码的字符串。
在android中我从相机或图库中获取位图:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
bitmap = (Bitmap) extras.get("data");
}
}
然后我将位图编码为字符串:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, baos);
byte[] byteArray = baos.toByteArray();
String encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
我已经在调试模式下将字符串拉出来并将其放入php函数中:
header('Content-Type:image/jpeg;');
echo base64_decode($imageString); //Image string is the value pulled out of the debugger
最初我让android脚本直接执行POST请求,但它没有任何区别所以这就像我可以完成这个过程一样简单。我尝试过使用不同的base64标志,例如NO_WRAP,但它没有任何区别。在线base64图像解码器也不能使用android生成的字符串。
我错过了什么?
更新:我的测试我将调试后的字符串复制出来并手动将其放入PHP中,这有点像红色鲱鱼。这应该有效,但我认为字符串的长度造成了问题。我遇到的实际问题似乎是当我准备发布请求时,base64字符串正在发生变化,+
变为空格。我认为这发生在我将map
属性转换为jsonObject
时,然后将其作为字符串输出到请求的主体。我不想改变我的请求管理器所以现在我这样做:
使用Base64.URL_SAFE
在PHP中使用str_replace
将-
更改为+
,将_
更改为/
。
这似乎现在正在运作,虽然str_replace
似乎有点笨拙。