0

我需要使用 Android 应用(来自相机或画廊)拍照并检查其 EXIF 日期时间(以及其他几个属性)。我已经成功实现了 JPG 图像的接收并将其加载到 TStream 和 GUI Image 组件中。但我无法提取 EXIF 数据。

我已经尝试了以下代码(并且它是互联网上可用的变体):

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;

但它返回“未检测到原始图像”错误。

如何读取 EXIF 数据?

PS 尝试了 CCR-EXIF 库,但它不会为 FMX 编译(整个代码中有太多 Ansi 引用)。
PPS 我已验证接收到的图像具有 EXIF 数据(将其从流中保存到其他位置并检查)

4

1 回答 1

0

我能够通过使用以下低级代码(将一些杂散字符更改为字节以使其编译并适用于 Android/FMX)来读取 EXIF: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 该演示基本上告诉操作系统拍照并将其保存在指定的文件名下。稍后,该文件名可用于提取 EXIF 信息。

于 2019-03-05T12:02:56.217 回答