Я пишу приложение камеры для 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 с использованием массива байтов?