Android Camera2 JPG至Base64逆时针旋转90度

Android Camera2 JPG至Base64逆时针旋转90度,android,base64,android-camera2,Android,Base64,Android Camera2,我正在研究一种用Camera2API拍照的方法。我从克隆谷歌的示例应用程序库开始 工程;通过设备上的文件浏览器查看以及在Windows计算机上查看时,它会保存图像并正确定向 但是,当我尝试用将图像转换为Base64的代码替换将图像保存到文件系统的代码时,该字符串(解码时)显示为逆时针旋转90度。我见过类似的问题,声称图像本身是旋转的,但在本例中,它只是base64表示。以下是我对示例应用程序所做的代码更改: @Override public void onImageAvailable(Image

我正在研究一种用Camera2API拍照的方法。我从克隆谷歌的示例应用程序库开始

工程;通过设备上的文件浏览器查看以及在Windows计算机上查看时,它会保存图像并正确定向

但是,当我尝试用将图像转换为Base64的代码替换将图像保存到文件系统的代码时,该字符串(解码时)显示为逆时针旋转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);
}
我在日志行上放置了一个断点,以便可以提取编码字符串的整个值。我使用了一些在线工具,例如,出于某种原因,它似乎向左旋转了90度


这是一个错误的方式来Base64的JPG?我分析字节的方法有误吗?

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


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

我认为Base64编码没有任何问题。很多设备都有90度的摄像机方位。当你在横向模式下拍照时,它可能会改变。这也因原始设备制造商的不同而有所变化。三星有时有不同的定位。您可以从相机配置中获取方向。我通过将MSSensorOrientation调整为不同的值(如0、270等)以编程方式更改了传感器方向。这会导致保存到文件系统的图像旋转,但base64字符串仍以相同方向解码。非常混乱。保存文件时,文件中有包含方向的EXIF元数据,gallery应用程序使用该元数据显示正确的方向。@Froyo谢谢。请随意留下这个答案,这样我就可以接受了。