将Android Camera2 JPG转换为Base64逆时针旋转90度

时间:2019-06-27 15:48:47

标签: android base64 android-camera2

我正在研究使用Camera2 API拍照的方法。我首先克隆了Google的示例应用程序存储库。

sample app有效;通过设备上的文件浏览器以及在Windows计算机上查看图像时,它可以保存图像并正确定向。

但是,当我尝试将将图像保存到文件系统的代码替换为将图像转换为Base64的代码时,该String(解码时)看起来会逆时针旋转90度。我看到过类似的问题,声称图像本身是旋转的,但在这种情况下,它只是base64表示形式。这是我对示例应用程序进行的代码更改:

@Override
public void onImageAvailable(ImageReader reader) {
    Image image = reader.acquireLatestImage();
    ByteBuffer buffer = image.getPlanes()[0].getBuffer();
    byte[] bytes = new byte[buffer.capacity()];
    buffer.get(bytes);

    byte[] encodedBytes = Base64.encode(bytes,Base64.NO_WRAP);
    String encodedString = new String(encodedBytes);

    Log.wtf(TAG, "Base64 JPG: " + encodedString);
}

我在日志行上放置了一个断点,所以我可以提取编码字符串的整个值。我使用了几种在线工具,例如this one,由于某种原因,它似乎向左旋转了90度。

这是将Base64转换为JPG的错误方法吗?我解析字节不正确吗?

1 个答案:

答案 0 :(得分:1)

编码没有问题。不同的硬件具有不同的传感器方向,并且它们通常对图像和视频具有90度的方向。因此,如果直接将帧转换为字节,则会得到旋转的图像。

相机会按原样保存图像,但会添加有关方向的EXIF元数据。 Gallery应用程序将读取此方向元数据,并以正确的方向加载位图。