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

时间:2019-03-05 10:40:45

标签: android delphi jpeg exif delphi-10.3-rio

我需要使用Android应用(从Camera或Gallery)拍照,并检查其EXIF日期时间(以及其他几个属性)。我已经成功实现了JPG图像的接收并将其加载到TStream和GUI图像组件中。但是我在提取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;

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

如何读取EXIF数据?

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

1 个答案:

答案 0 :(得分: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信息。