Запись метаданных EXIF ​​в изображения в Android

Я хочу сохранить некоторые метаданные в изображениях. Мое приложение камеры дает мне растровое изображение, которое я храню в устройстве хранения (MediaStore). Вдобавок к этому я хочу добавить несколько тегов к картинке в ее метаданные. Я думаю, что EXIF ​​— хороший способ сделать это. Но я не мог найти хороших ссылок о том, как это сделать.

Если есть какие-то инструменты для решения этой задачи в программировании для Android, сообщите мне.

Спасибо


person vpk    schedule 14.07.2010    source источник
comment
ExifInterface может быть несколько ненадежным — я видел, как он портит данные EXIF ​​при определенных обстоятельствах. Более надежным вариантом, который обрабатывает больше тегов EXIF ​​(включая пользовательские теги EXIF), является Sanselan Android. code.google.com/p/sanselanandroid Примеры использования Sanselan Android приведены здесь: massapi.com/ источник/sanselan-0.97-инкубатор/src/test/java/org/   -  person Theo    schedule 09.12.2012
comment
Ознакомьтесь с этим.   -  person dragon66    schedule 30.03.2015


Ответы (2)


Хорошо, Кто-то (офлайн) указал мне на полезный ресурс. ExifInterface похоже на то, что я искал. Android-er имеет сообщение, демонстрирующее, как читать метаданные EXIF ​​в Android, и я думаю, что написание не должно сильно отличаться.

Не знаю, а можно ли в EXIF ​​писать произвольные метаданные, т.е. кроме указанных в документации ExifInterface (например, широта, долгота, и т.д). Если нет, то каким может быть предпочтительный метод записи произвольных метаданных в файлы изображений?

Спасибо

person vpk    schedule 14.07.2010
comment
Не могли бы вы сделать новый вопрос из вашего 2-го абзаца, чтобы мы могли правильно ответить на него? (ИМХО ответ да) - person MikeD; 09.04.2013
comment
только что сделал: stackoverflow.com/ вопросы/15901971/ - person vpk; 09.04.2013
comment
Я также нашел эту библиотеку полезной: github.com/dragon66/pixymeta-android - person vir us; 30.05.2017

public static void writeFile (File photo, double latitude, double longitude) throws IOException{
    ExifInterface exif = null;

    try{
        Log.v("latiDouble", ""+latitude);
        Log.v("longiDouble", ""+longitude);
        exif = new ExifInterface(photo.getCanonicalPath());
        if (exif != null) { 
            double latitu = latitude;
            double longitu = longitude;
            double alat = Math.abs(latitu);
            double along = Math.abs(longitu);
            String stringLati = convertDoubleIntoDegree(alat);
            String stringLongi = convertDoubleIntoDegree(along);
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, stringLati);
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, stringLongi);
            Log.v("latiString", ""+ stringLati);
            Log.v("longiString", ""+ stringLongi);
            exif.saveAttributes();
            String lati = exif.getAttribute (ExifInterface.TAG_GPS_LATITUDE);
            String longi = exif.getAttribute (ExifInterface.TAG_GPS_LONGITUDE);
            Log.v("latiResult", ""+ lati);
            Log.v("longiResult", ""+ longi);
        } 
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Я скопировал ответ из здесь

person M.Hefny    schedule 09.11.2014