在我的测试中,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/