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

Android Camera2 JPG to Base64 is rotated 90 degrees counter clockwise

我正在研究用 Camera2 拍照的方法 API。我从克隆 Google 的示例应用存储库开始。

sample app有效;当通过设备上的文件浏览器查看时以及我在 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);
}

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

这是将 Base64 转换为 JPG 的错误方法吗?我是否错误地解析了字节?

编码没问题。不同的硬件有不同的传感器方向,它们通常对图像和视频有 90 度的方向。所以如果你直接把一帧转成字节,你会得到旋转后的图像。

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