Вопрос

Есть ли какая -либо 3 -я часть API для Android для чтения тегов ESIF из изображения, который поддерживает уровень API, начиная с 1,5.

Это было полезно?

Решение

А Библиотека извлечения метаданных Drew Nooakes хорошо работает для извлечения тегов Exif в более ранних версиях Android платформы, с небольшой модификацией. Анкет Я использую его на Android 1.6 для извлечения тегов из изображений JPEG.

Примечание: новые версии Метаданный-экспрактор Работайте непосредственно на Android без модификации.

Вам нужно будет скачать и создайте исходный код самостоятельно и упаковывайте его с вашим приложением. (Я использую релиз 2.3.1.) Внесите следующие изменения в com.drew.imaging.jpeg.JpegMetadataReader:

  • Удалите следующее оператор импорта:

    import com.sun.image.codec.jpeg.JPEGDecodeParam;

  • Удалить следующий метод (который вам не понадобится на Android):

    public static Metadata readMetadata(JPEGDecodeParam decodeParam) { ... }

Удалить com.drew.metadata.SampleUsage Класс, который ссылается на метод, удаленный выше. Также удалите все тестовые пакеты.

Это все, что нужно. Вот пример использования JpegMetadataReader Чтобы извлечь тег даты из изображения JPEG, хранящегося на SD-карте:

import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifDirectory;

// other imports and class definition removed for brevity

public static Date extractExifDateTime(String imagePath)
{
    Log.d("exif", "Attempting to extract EXIF date/time from image at " + imagePath);
    Date datetime = new Date(0); // or initialize to null, if you prefer
    try
    {
        Metadata metadata = JpegMetadataReader.readMetadata(new File(imagePath));
        Directory exifDirectory = metadata.getDirectory(ExifDirectory.class);

        // these are listed in order of preference
        int[] datetimeTags = new int[] { ExifDirectory.TAG_DATETIME_ORIGINAL,
                                         ExifDirectory.TAG_DATETIME,
                                         ExifDirectory.TAG_DATETIME_DIGITIZED };
        int datetimeTag = -1;
        for (int tag : datetimeTags)
        {
            if (exifDirectory.containsTag(tag))
            {
                datetimeTag = tag;
                break;
            }
        }

        if (datetimeTag != -1)
        {
            Log.d("exif", "Using tag " + exifDirectory.getTagName(datetimeTag) + " for timestamp");

            SimpleDateFormat exifDatetimeFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
            datetime = exifDatetimeFormat.parse(exifDirectory.getString(datetimeTag));
        }
        else
        {
            Log.d("exif", "No date/time tags were found");
        }
    }
    catch (Exception e)
    {
        Log.w("exif", "Unable to extract EXIF metadata from image at " + imagePath, e);
    }
    return datetime;
}

Другие советы

Вы хотите включить ресурс в сам банку, и прочитайте файл с помощью этого API:

getresourceasstream

Поэтому сначала вам необходимо убедиться, что ресурс находится в банке (откройте его вверх и убедитесь, что он там), и два убедитесь, что вы используете вызов API, такой как этот, а не файловые механизмы IO (потому что изображение будетбыть в банке; не на файловой системе).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top