首页 > 解决方案 > Android Camera2 JPG to Base64 逆时针旋转90度

问题描述

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

示例应用程序有效;当通过设备上的文件浏览器查看时,以及在我的 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 a JPG的错误方式吗?我是否错误地解析了字节?

标签: androidbase64android-camera2

解决方案


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

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


推荐阅读