Android base64编码图像与PHP base64解码不兼容

时间:2016-06-28 03:23:26

标签: java php android image-processing base64

在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似乎有点笨拙。

0 个答案:

没有答案