Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
7 / 7 / 4
Регистрация: 08.10.2012
Сообщений: 93
1

Спецификация EXIF: обратиться к метаданным файла

10.12.2012, 19:25. Показов 2410. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прочитал спецификацию EXIF. Знаю коды тегов фотографии. Как теперь имея файл обратиться к этому тегу (прочитать информацию)?
Например, зная код тега 271 (в нём лежит производитель фотоаппарата), как обратиться к этому коду, чтобы узнать какой производитель там записан?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2012, 19:25
Ответы с готовыми решениями:

Чтение EXIF данных JPG файла
Всем добрый день. Помогите понять как прочитать метаданные файла. Планирую использовать...

Как считать дату из EXIF jpeg файла?
Как считать дату из EXIF jpeg файла?

Редактирование/создание EXIF заголовка jpeg файла
Очень нужны исходники программы позволяющей редактировать и создавать EXIF заголовки у jpeg файлов...

Спецификация файла. WTF?
Здравствуйте. Что такое спецификация файла (в контексте данной задачи)? В Google ничего понятного...

8
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
04.11.2014, 15:02 2
Предлагаю возразить тему.
Понимаю что бинарные файлы это тяжеловато для начинающих, и все же прошу разъяснить "ФИЗИКУ" данного конкретного процесс.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
#define FNAME "C:\\Users\\RUNA\\Desktop\\12.jpg" 
 
int main() 
{
    int buffer[20] ;                      //
  
    char fname[40] = FNAME;  // массив для пути и названия файла
    FILE *fp; 
    
    if ((fp=fopen(fname, "rb")) == NULL)  // Проверка на доступность файла
    {
        printf("Error read file");
        getch();
        return;
         }
 
/* позиция в потоке на адрес мета данных 9000h версия EXIF*/
   fseek(fp, 0x9000, 0);
 
/* отображение данных */
    fread(buffer,10, 1, fp);   // ВОТ ТУТ не понимаю 2-3 параметр
     printf("%s\n", buffer);
  
    fclose(fp);  // закрытие файла
    getch();
    
    system("pause");    
    return 0;
}
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
06.11.2014, 23:00 3
Цитата Сообщение от Fanera Посмотреть сообщение
fread(buffer,10, 1, fp);
ну тут идет чтение по большей мере 1 элемента(размер элемента 10 байт)
(в данном примере при успешном выполнении с файла будет считано 1*10 байт )
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
06.11.2014, 23:19 4
Цитата Сообщение от Fanera Посмотреть сообщение
fseek(fp, 0x9000, 0);
Лучшего примера не смогли найти?
Вложения
Тип файла: 7z exif.cc.7z (840 байт, 31 просмотров)
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
07.11.2014, 17:41 5
nxnx,
значит допустим мне нужно считать 2 значения из файла адрес известен, значения 0A 20 (2592) // кстати разумное число разрешение по X
команда должна выглядеть так
C++
1
fead (buffer, 2,1,fp)
при том что
C++
1
int buffer
, правильно?
дальше идет преобразование в строку и получаем 8202 потому что считывается наоборот 20 0A ...
в чем моя ошибка?
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
07.11.2014, 18:18 6
да, правильно, только использовать fread нужно правильно:
C
1
2
int buffer=0;//обнуление обязательно
fread(&buffer,2,1,fp);
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
07.11.2014, 18:47 7
nxnx, Обнулял.
Может с функцией преобразования намудрил?

C++
1
2
3
4
5
6
7
8
      fseek(fp,  0x0145c, 0); 
      int xd=0;
      char xds[10];
      
       fread(&xd,2,1,fp);
       sprintf(xds,"%d ",xd);
       printf(" X = %s \n ",xds);
       fseek(fp, 0x00000000, 0);
дамп такой

Спецификация EXIF: обратиться к метаданным файла


0x0145c = 0A
0x0145d = 20
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
07.11.2014, 21:16 8
C
1
2
3
4
5
fseek(fp,  0x0145c, 0); 
      int xd=0;      
       fread(&xd,2,1,fp);
       printf(" X = %d \n ",xd);
       fseek(fp, 0x00000000, 0);//возможно это в начало переместить
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
08.11.2014, 09:25 9
nxnx, пробовал и так, понимаю что приведение типов сработает и выводим по %d (десятичное) ответ такой же 8202 (dec) = 20 A0 (hex).

PS
пороверил комп процедурой как байты считаюсь B или L - индеан, L- индеан.

Добавлено через 11 часов 45 минут
Сделал сдвинув на 8 первое число и сложив со вторым.
0
08.11.2014, 09:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2014, 09:25
Помогаю со студенческими работами здесь

Добавить наименование jpeg-файла в его exif описание
Необходимо добавить наименование файла в его же описание, исключая его расширение: Файлов очень...

Как CLR находит вызываемый метод по метаданным?(+об устройстве IL кода)
Допустим, есть код: using System public class Example{ public static void Main(){ ...

Как обратиться из файла к форме?
Добрый вечер друзья. В приложенных ниже кодах я не стал писать &quot;using&quot;, но у меня они есть. Я...

Обратиться к полям json файла
Здравствуйте! Нужно обратиться к полям файла расхоложенного на сервере Date Open High Low Close...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru