使用相机Intent旋转相机图像

时间:2016-05-17 15:19:03

标签: android orientation exif android-camera-intent

我使用各种设备对摄像头意图捕获图像存在无穷无尽的问题,对于某些设备,ExifInterface和使用此处提到的内容解析器都无法解决我的问题:

Why does an image captured using camera intent gets rotated on some devices on Android?

关于某些设备中的ExifInterface,它总是返回ExifInterface.undefined(零)。 至于内容解析器,当我查询方向时,我也得到零,有时也不正确。

具体我在这里使用了user2832184答案:

How can i find the orientation of a picture taken with Intent MediaStore.ACTION_IMAGE_CAPTURE?

建议的其他任何解决方案?

我需要原生相机应用程序的全部功能,所以我无法切换到相机api并从头开始构建所有内容。

我也不介意使用第三方解决方案来解决这个问题。

3 个答案:

答案 0 :(得分:2)

如果图像缺少方向标题,那么你无能为力。某些设备(例如,HTC M7 GPE)具有无法对JPEG中的方向标题进行编码的混乱固件。但是,其他设备将正确编码图像,并且它恰好处于正确的方向,因此不需要标头。没有好的方法可以通过编程方式区分这些情况,除了通过硬编码的设备列表给您带来麻烦。

即使对于那些硬编码设备,您也遇到了问题:从技术上讲,您不知道正确的方向是什么。用户可能已从您的应用中输入了相机应用,旋转了设备,拍摄了照片,将设备旋转回原来的方向,然后才返回到您的应用。

您的选择是:

  1. 完全忽略这个问题。

  2. 忽略此问题,但为用户提供一些手动请求旋转图像的功能。

  3. 拥有出现问题的硬编码设备列表,并在适当的时候警告用户该问题。

  4. 拥有出现问题的硬编码设备列表,如果用户在其中一台设备上拍照,则假设控制权返回给您时设备的方向是设备的方向从用户拍照时开始。然后,根据需要旋转图像。

  5. 这些都不是完美的解决方案。

答案 1 :(得分:0)

这里接受的答案是: Controlling the camera to take pictures in portrait doesn't rotate the final images 为我工作,所以如果有人偶然发现,你可能想看看它。 (获取EXIF方向属性并相应地旋转图像)

答案 2 :(得分:0)

您可以使用Glide库:

Glide.with(this).load(image_uri).into(productIconIv);

其中image_uri是您的图像URI,productIconIvImageView