【问题标题】:Camera image rotated using camera Intent使用相机意图旋转的相机图像
【发布时间】:2016-05-17 15:19:03
【问题描述】:

我在使用各种设备拍摄图像时遇到了无穷无尽的问题,对于某些设备,这里提到的 ExifInterface 和使用 contentresolver 都不能解决我的问题:

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

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

特别是我在这里使用了 user2832184 答案:

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

还有其他解决方案建议吗?

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

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

【问题讨论】:

  • 请详细说明准确您的问题是什么,准确您尝试了什么,以及准确为什么解决方案失败。
  • @CommonsWare 我已经编辑了我的问题

标签: android orientation exif android-camera-intent


【解决方案1】:

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

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

您的选择是:

  1. 完全忽略问题。

  2. 忽略问题,但让用户能够手动请求您旋转图像。

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

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可以使用Glide 库:

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

    image_uri 是您的图像 URI,productIconIv 是 ImageView

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2020-02-11
      • 1970-01-01
      • 2013-06-02
      • 2017-06-30
      相关资源
      最近更新 更多