Запись EXIF-данных из байтового массива в Android - PullRequest
1 голос
/ 09 мая 2019

Я пишу приложение камеры для Android на Java. Столкнувшись с проблемой ротации, которая требовала от меня ориентации по данным Exif, мне стало интересно, есть ли способ добавить свои собственные теги.

Я нашел класс ExifInterface, предоставленный в SDK, начиная с версии 24.

Способ создания объекта:

ExifInterface exific = new ExifInterface(new ByteArrayInputStream(jpeg));

Объект jpeg имеет тип byte[], переданный обратному вызову Camera.PictureCallback onPictureTaken.

Согласно документации , существует метод setAttribute, который я пытался использовать таким образом:

exific.setAttribute("MY_OWN_TAG", "somevalue");

Я также пытался использовать один из предоставленных тегов:

exific.setAttribute(ExifInterface.TAG_ARTIST, "myself");

Потом (другим способом) я попытался прочитать тег:

try{
    ExifInterface exific = new ExifInterface(new ByteArrayInputStream(jpeg));
    String rv = exific.getAttribute(tag);
    Log.d(TAG, "Obtained value for tag " + tag + ": " + rv);
    return rv;
} catch(IOException ioe){
    Log.d(TAG, "Exif interface query failed.");
}

Зарегистрированное значение равно нулю.

Несколько вещей приходят на ум:

  • Я бы сказал, что проблема в том, что я создаю объект, используя ByteArrayInputStream? Мне кажется, что setAttribute молча терпит неудачу, потому что поток только вход. Увы, я не вижу другого способа создания объекта с использованием байтового массива.
  • Я попытаюсь сделать то же самое, используя файл, только для целей тестирования, но природа моего приложения была бы лучше, если бы я манипулировал байтовым массивом.

Итак, есть ли способ записи в данные Exif с использованием массива байтов?

...