Есть ли любой 3-й API части для андроида для чтения тегов exif из изображения, которые поддерживают уровень API, запускающийся от 1,5.
Библиотека извлечения метаданных Дрю Ноукс хорошо работает для извлечения тегов 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;
}
Если интересно, вы пробовали использовать родной класс ExifInterface ?
http://developer.android.com/reference/android/media/ExifInterface.html
Должно быть быстрее, чем использование сторонней библиотеки ;)