如何在用 Delphi 编写的 Android 应用程序中读取 JPG EXIF 数据?

How to read JPG EXIF data in Android app written with Delphi?

我需要使用 Android 应用程序(从相机或从图库)拍照并检查其 EXIF 日期时间(以及其他几个属性)。我已成功实现接收 JPG 图像并将其加载到 TStream 和 GUI Image 组件中。但是我在提取 EXIF 数据时遇到问题。

我尝试了以下代码(它的变体可在 Internet 上找到):

procedure ReadEXIF(aPath: string);
var
  LEXIF: JExifInterface;
  LDateTaken: string;
begin
  // Path looks like:
  // /data/data/com.embarcadero.SimpleLogin/cache/IMG_20190305_085250104151537.jpg
  LEXIF := TJExifInterface.JavaClass.init(StringToJString(aPath));
  LDateTaken := JStringToString(LEXIF.getAttribute(TJExifInterface.JavaClass.TAG_DATETIME));
  Log.d(LDateTaken);
end;

但是 returns "Raw image not detected" 错误。

如何读取 EXIF 数据?

P.S。尝试了 CCR-EXIF 库,但它不会针对 FMX 进行编译(其代码中有太多 Ansi 引用)。
P.P.S。我已经验证接收到的图像有 EXIF 数据(将它从流保存到其他位置并检查)

我能够使用以下低级代码读取 EXIF(将一些杂散字符更改为字节以使其编译并适用于 Android/FMX):http://www.bvbcode.com/code/37ghxe42-1643402

ex := TExif.Create;
ex.ReadFromFile(aPath);
Log.d('DateTime: %s', [ex.DateTime]);
ex.Free;

此处提供另一种工作方法:https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/ObtainPhotoInfoDemo 该演示基本上告诉 OS 拍照并将其保存在指定的文件名下。稍后该文件名可用于提取 EXIF 信息。