【发布时间】:2019-06-27 15:48:47
【问题描述】:
我正在研究一种使用 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 的错误方式吗?我是否错误地解析了字节?
【问题讨论】:
-
我不认为 Base64 编码有什么问题。许多设备的相机都有 90 度方向。当您以横向模式拍摄照片时,它可能会发生变化。这也会根据原始设备制造商而改变。例如。三星有时有不同的方向。您可以从相机配置中获取方向。
-
我通过将 mSensorOrientation 调整为不同的值(如 0、270 等)以编程方式更改了传感器方向。这导致保存到文件系统的图像被旋转,但 base64 字符串仍在解码相同的方向。非常混乱。
-
保存文件时,它具有包含方向的 EXIF 元数据,图库应用程序使用它来显示正确的方向。
-
@Froyo 谢谢。请随时将此作为答案,以便我接受。
标签: android base64 android-camera2