android - 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的错误方式吗?我是否错误地解析了字节?
解决方案
编码没有问题。不同的硬件具有不同的传感器方向,它们通常具有 90 度的图像和视频方向。因此,如果您直接将帧转换为字节,您将获得旋转后的图像。
相机按原样保存图像,但添加有关方向的 EXIF 元数据。图库应用程序将读取此方向元数据并以正确的方向加载位图。
推荐阅读
- php - Docker - 无法加载动态库“gd2”
- php - 什么是单句/点“。” 在 YAML 中是什么意思?
- web - 正则表达式提取第一个单词并将 One 替换为 1
- c# - 我们如何使用 C# 在 SharePoint 中获取当前的身份验证模式
- python - 从 PDF 文档中提取文本和标签
- python - 如何修复“AttributeError:'str'对象没有属性'content'”python错误
- python - 如何检查DOM中是否存在元素?
- python - 校正图像
- node.js - MongoDB聚合:按类别分组并总结金额
- apache-kafka - 结构化从 Kafka 主题接收的数据