不使用 ExifInterface 获取位图方向
Get bitmap orientation without using ExifInterface
我需要弄清楚如何从位图中获取方向。事情是 - 图像并不总是出现在设备上,所以我不能使用 ExifInterface 来获取方向信息。
不知何故它总是横向显示位图,长度和宽度属性对我没有太大帮助。
有谁知道如何在没有 ExifInterface 的情况下完成此操作?
我知道我可以将方向作为属性存储在数据库中,但如果有另一种方式 - 我更喜欢那样。
提前致谢
已编辑:
我应该补充 - 位图作为字节数组从站点下载,因此它可以在最终用户实际决定下载之前作为预览呈现给设备上的最终用户。希望这更有意义
如果您有 JPEG 数据,您可以尝试读取 EXIF headers。您的选择是:
使用the ExifInterface
from the Android SDK,尽管这需要您将 JPEG 数据导入文件
使用其他一些更灵活的 EXIF 解析代码,例如 this stuff from the AOSP Mms app,它可以处理流和 byte[]
(请参阅该目录中的 ExifInterface
和它的 readExif()
方法集)
在您的情况下,您可能会遇到一些问题:
预览可能缺少 EXIF header,具体取决于预览图像的创建方式。如果是这种情况,并且您控制了 preview-creation 过程,您也许能够修复 server-side.
这仅在您的预览图像为 JPEG 时有效。如果它们是其他格式(例如 PNG),EXIF headers 将会丢失。同样,如果是这种情况,您可以解决此 server-side,例如让预览生成器根据原始图像的 EXIF header 正确旋转图像。
如果你没有 Orientation
EXIF header,并且你不控制服务器,那你就完蛋了。
您也可以使用我的 metadata-extractor 库,它可以从多种图像类型中读取大量元数据,而且效率很高。
Metadata metadata = ImageMetadataReader.readMetadata(stream);
我需要弄清楚如何从位图中获取方向。事情是 - 图像并不总是出现在设备上,所以我不能使用 ExifInterface 来获取方向信息。 不知何故它总是横向显示位图,长度和宽度属性对我没有太大帮助。
有谁知道如何在没有 ExifInterface 的情况下完成此操作?
我知道我可以将方向作为属性存储在数据库中,但如果有另一种方式 - 我更喜欢那样。
提前致谢
已编辑: 我应该补充 - 位图作为字节数组从站点下载,因此它可以在最终用户实际决定下载之前作为预览呈现给设备上的最终用户。希望这更有意义
如果您有 JPEG 数据,您可以尝试读取 EXIF headers。您的选择是:
使用the
ExifInterface
from the Android SDK,尽管这需要您将 JPEG 数据导入文件使用其他一些更灵活的 EXIF 解析代码,例如 this stuff from the AOSP Mms app,它可以处理流和
byte[]
(请参阅该目录中的ExifInterface
和它的readExif()
方法集)
在您的情况下,您可能会遇到一些问题:
预览可能缺少 EXIF header,具体取决于预览图像的创建方式。如果是这种情况,并且您控制了 preview-creation 过程,您也许能够修复 server-side.
这仅在您的预览图像为 JPEG 时有效。如果它们是其他格式(例如 PNG),EXIF headers 将会丢失。同样,如果是这种情况,您可以解决此 server-side,例如让预览生成器根据原始图像的 EXIF header 正确旋转图像。
如果你没有 Orientation
EXIF header,并且你不控制服务器,那你就完蛋了。
您也可以使用我的 metadata-extractor 库,它可以从多种图像类型中读取大量元数据,而且效率很高。
Metadata metadata = ImageMetadataReader.readMetadata(stream);