【问题标题】:Save image from Google Photos with full info/details from Uri - Android使用来自 Uri - Android 的完整信息/详细信息保存来自 Google 照片的图像
【发布时间】:2018-07-16 05:10:24
【问题描述】:

我正在使用 ExifInterface,它需要图像路径来从 Uri 中获取纬度/经度等信息。我可以从 Uri 获取保存在设备上的图像的路径并将其发送到 ExifInterface 以获取详细信息。

但是,这不适用于 Google 相册云上的图片。从图库中选择时,照片会自动下载,但 ExifInterface 无法检索任何信息,因为 cursor.getString(index) 为空。

所以我尝试将图像保存到存储中,如下所述: Getting path from Uri from Google Photos app

然后,当我使用 Google 照片应用打开保存的文件时,我看不到位置详细信息。但是,如果我通过单击“保存”从 Google 照片应用程序手动保存图像,则该图像会显示位置详细信息。

保存图像文件时是否要保存图像详细信息?

【问题讨论】:

    标签: android save-image


    【解决方案1】:

    我正在使用 ExifInterface,它需要图像路径来从 Uri 获取纬度/经度等信息。

    您可以使用ContentResolver 及其openInputStream() 方法在Uri 标识的内容上获取InputStream。然后,将 InputStream 传递给 the ExifInterface constructor

    请注意,图像不要求 JPEG 格式(EXIF 标记可用)或 JPEG 图像具有地理标记。

    从图库中选择时,照片会自动下载,但 ExifInterface 无法检索任何信息,因为 cursor.getString(index) 为空。

    没有要求Uri 指向一条内容(例如照片)来支持任何涉及Cursor 的内容。

    所以我尝试将图像保存到存储中,如下所述:Getting path from Uri from Google Photos app

    您可以将InputStream 提供给ExifInterface 并用更少的代码获得相同的结果。

    然后,当我使用 Google 照片应用打开保存的文件时,我看不到位置详细信息

    Uri 可能指向缺少您要查找的 EXIF 标记的内容。也许无论出于何种原因,谷歌照片都会单独保留这些信息。这取决于创建 Google 照片的开发者。

    问题也可能在于您如何手动测试。

    无论如何,首先将InputStream 直接传递给ExifInterface 并以这种方式检查EXIF 标签。也许你会得到更好的结果。

    【讨论】:

    • 如果我错了,请纠正我,但 InputStream 是否真的保留了 EXIF 数据?如果流本身确实有数据,那么构造函数需要 API 24。
    • @MadDim:“如果我错了,请纠正我,但 InputStream 是否真的保留了 EXIF 数据?” - 是的。 “构造函数需要 API 24”——您正在查看框架 ExifInterface。永远不要使用它,因为它有安全问题。使用库 ExifInterface(Android 支持库或 AndroidX,取决于您的设置)。
    • 非常感谢。我从来没有意识到有一个单独的依赖关系。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多