Как читать данные JPG EXIF ​​в приложении Android, написанном на Delphi? - PullRequest
0 голосов
/ 05 марта 2019

Мне нужно сделать снимок с помощью приложения для 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 ​​(сохранил его из потока в другое место и проверил)

1 Ответ

0 голосов
/ 05 марта 2019

Мне удалось прочитать 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 Демонстрация в основном говорит ОС сделать фотографию и сохранить ее под указанным именем файла. Позже это имя файла может быть использовано для извлечения информации EXIF.

...