Получить время съемки фото?

Всем привет,
Прошу помощи, как получить реальную дату съемки DateTime Original?
exif.getAttribute(ExifInterface.TAG_DATETIME);
Это возвращает последнее изменение фотографии. Но не дату съемки.
Через EXIF-O-Matic я вижу что есть теги. А вот андроид их не видит. даже галерея не видит DateTime Original.

Скажите какие нюансы работы с exif есть в андроиде? Как прочитать настоящий тег?
  • Вопрос задан
  • 2551 просмотр
Пригласить эксперта
Ответы на вопрос 1
@constv
Формат EXIF
а вот так я вытащил оригинальную дату и в придачу другие теги, если count/count2(размер значения) больше 4, то value/value2 - это смещение от начала TIFF заголовка до значения, иначе value/value2 - это и есть значение
private static void readExif(RandomAccessFile raf, int offset) throws IOException{
		raf.seek(12+offset);

		short entries = raf.readShort();
		System.out.println(String.format("IFD entries = %d", entries));
		for(short i=0; i<entries; i++){
			short tag = raf.readShort();
			short type = raf.readShort();
			int count = raf.readInt();
			int offsetOrValue = raf.readInt();
			System.out.println(String.format("tag = %x type = %x count = %d offsetOrvalue = %d", tag, type, count, offsetOrValue));
			long currPointer = raf.getFilePointer();
			if(tag==-30871){
				raf.seek(12+offsetOrValue);
				short entries2 = raf.readShort();
				for(short j=0; j<entries2; j++){
					short tag2 = raf.readShort();
					short type2 = raf.readShort();
					int count2 = raf.readInt();
					int offsetOrValue2 = raf.readInt();
					System.out.println(String.format("tag = %x type = %d count = %d offsetOrvalue = %d", tag2, type2, count2, offsetOrValue2));
					long currPointer2 = raf.getFilePointer();
					if(tag2==-28669){
						raf.seek(12+offsetOrValue2);
						byte[] bb = new byte[count2];
						raf.read(bb);
						System.out.println("DateTimeOriginal = "+new String(bb));
						raf.seek(currPointer2);
					}
				}
				raf.seek(currPointer);
			}
		}
		int nextOffset = raf.readInt();
		if(nextOffset>0)
			readExif(raf, nextOffset);
	}

	public static void main(String args[]) {
		try {
			RandomAccessFile raf = new RandomAccessFile(new File("D:\\Archive\\MyPhotosAndVideos\\IMG_20140920_130624.jpg"), "r");
			raf.seek(12);
			raf.readShort();
			raf.readShort();
			readExif(raf, raf.readInt());
			raf.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы