java - 是否可以让 BitmapFactory.decodeFile() 尊重 EXIF?

标签 java android image bitmap exif

在我的测试中,BitmapFactory.decodeFile() 创建的 Bitmap 不遵循 EXIF header 。

例如,当我调用 Bitmap.getWidth() 时,设备拍摄的肖像图像不会根据相机方向旋转实际像素数据,而是将其存储在 EXIF header 中和 Bitmap.getHeight(),它们返回不正确的值(高度为宽度,反之亦然)。

有没有办法让 BitmapFactory.decodeFile() 遵守 EXIF 并生成正确的 Bitmap

如果不是,推荐的处理此问题的模式是什么?

没有经验丰富的 Android 开发人员的建议,我看到的唯一方法是预处理拍摄的图像(加载、根据 EXIF 旋转并保存)。但除了巨大的处理开销之外,对于大相机分辨率,这可能会导致 OutOfMemoryException(在无法通过使用 BitmapFactory.Options.inSampleSize 来降低质量的情况下)加载缩小图像)。

最佳答案

您现在可以使用 Glide 做到这一点。请参阅此处的“后台线程”部分:

https://bumptech.github.io/glide/doc/getting-started.html

Bitmap bitmap = Glide.with(context).asBitmap().load(new File(fileName)).skipMemoryCache(true).submit().get();

Glide 考虑了 EXIF。您需要在后台线程上加载它。我使用的是 Glide 4.9.0

关于java - 是否可以让 BitmapFactory.decodeFile() 尊重 EXIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552108/

相关文章:

java - 访问实例变量或局部变量

java - Struts2参数拦截器中的错误

html - 使图像布局为 'inline-block',底部有悬停标题

html - 编辑背景图像

java - 为什么 Android aosp 中没有构建 JAVA 库?

java - 如何通过Selenium和Page Factory实现AjaxElementLocatorFactory?

java - GSON + 共享首选项在 Android 内存上下文中如何工作?

Android GoogleMap v2 自定义信息窗口大小

java - 当我将 DisplayHomeAsUpEnabled 设置为 true 时,为什么我的应用程序崩溃了?

html - 当您将鼠标悬停在图像所在的 div 上时,如何淡化图像?