2 / 2 / 1
Регистрация: 21.04.2013
Сообщений: 205
1

Редактирование/создание EXIF заголовка jpeg файла

13.11.2014, 11:09. Показов 3696. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень нужны исходники программы позволяющей редактировать и создавать EXIF заголовки у jpeg файлов , поделитесь пожалуйста если у кого есть.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2014, 11:09
Ответы с готовыми решениями:

Структура jpeg файла
не знаю в какой раздел это писать... посему прошу прощения за неточность.. растолкуйте пожалуйста...

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

Считывание Exif информации картинки jpeg
Добрый день! Подскажите пожалуйста как лучше считать данные, а именно информацию GPS с Exif. На...

Jpeg файл - достать дату съемки (exif)
Как в delphi написать функцию для считывания информации о дате фотографии? то есть на входе строка...

3
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
17.11.2014, 13:46 2
http://http://www.sentex.net/~mwandel/jhead/
http://http://libexif.sourceforge.net
бог в помощь..
0
2 / 2 / 1
Регистрация: 21.04.2013
Сообщений: 205
17.11.2014, 15:12  [ТС] 3
может вы сможете мне помочь?
я разбираю код jhead, и мне надо понять как записать свой тег(TAG_FOCALLENGHT) в exif...

При повторном разборе jhedом тег находится, данные не верны
вообще последовательность тегов и данных не очень ясна

вот функция которая записывает теги из jhead
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
void create_EXIF(void)
{
    char Buffer[256];
 
    unsigned short NumEntries;
    int DataWriteIndex;
    int DateIndex;
    int DirIndex;
    int DirContinuation;
    
    MotorolaOrder = 0;
 
    memcpy(Buffer+2, "Exif\0\0II",8);
    Put16u(Buffer+10, 0x2a);
 
    DataWriteIndex = 16;
    Put32u(Buffer+12, DataWriteIndex-8); // first IFD offset.  Means start 16 bytes in.
 
    {
        DirIndex = DataWriteIndex;
        NumEntries = 2;
        DataWriteIndex += 2 + NumEntries*12 + 4;
 
        Put16u(Buffer+DirIndex, NumEntries); // Number of entries
        DirIndex += 2;
  
        // Enitries go here...
        {
 
            // Date/time entry
            Put16u(Buffer+DirIndex, TAG_DATETIME);         // Tag
            Put16u(Buffer+DirIndex + 2, FMT_STRING);       // Format
            Put32u(Buffer+DirIndex + 4, 20);               // Components
            Put32u(Buffer+DirIndex + 8, DataWriteIndex-8); // Pointer or value.
            DirIndex += 12;
 
            DateIndex = DataWriteIndex;
            if (ImageInfo.numDateTimeTags){
                // If we had a pre-existing exif header, use time from that.
                memcpy(Buffer+DataWriteIndex, ImageInfo.DateTime, 19);
                Buffer[DataWriteIndex+19] = '\0';
            }else{
                // Oterwise, use the file's timestamp.
                FileTimeAsString(Buffer+DataWriteIndex);
            }
            DataWriteIndex += 20;
        
            // Link to exif dir entry
            Put16u(Buffer+DirIndex, TAG_EXIF_OFFSET);      // Tag
            Put16u(Buffer+DirIndex + 2, FMT_ULONG);        // Format
            Put32u(Buffer+DirIndex + 4, 1);                // Components
            Put32u(Buffer+DirIndex + 8, DataWriteIndex-8); // Pointer or value.
            DirIndex += 12;
//-----------------ВОТ ТУТ Я ПЫТАЮСЬ ВПИХНУТЬ СВОЮ СЕКЦИЮ---------------------
//                Put16u(Buffer+DirIndex, TAG_FOCALLENGTH);         // Tag
//                Put16u(Buffer+DirIndex + 2, FMT_URATIONAL);       // Format
//                Put32u(Buffer+DirIndex + 4, 1);                   // Components
//                Put32u(Buffer+DirIndex + 8, DataWriteIndex-8); // Pointer or value.
//                DirIndex += 12;
 
//СКОРЕЕ ВСЕГО ЗАПИСЫВАЮ НЕ ТУДА, А ТОГДА КУДА ЗАПИСЫВАТЬ?
//                Buffer[DataWriteIndex] = ImageInfo.FocalLength;
//                DataWriteIndex += 8;
//---------------------------------------------------------------------------------------
        }
 
        // End of directory - contains optional link to continued directory.
        DirContinuation = DirIndex;
    }
    {
 
        DirIndex = DataWriteIndex;
        NumEntries = 1;
        DataWriteIndex += 2 + NumEntries*12 + 4;
 
        Put16u(Buffer+DirIndex, NumEntries); // Number of entries
        DirIndex += 2;
 
        // Original date/time entry
        Put16u(Buffer+DirIndex, TAG_DATETIME_ORIGINAL);         // Tag
        Put16u(Buffer+DirIndex + 2, FMT_STRING);       // Format
        Put32u(Buffer+DirIndex + 4, 20);               // Components
        Put32u(Buffer+DirIndex + 8, DataWriteIndex-8); // Pointer or value.
        DirIndex += 12;
 
        memcpy(Buffer+DataWriteIndex, Buffer+DateIndex, 20);
        DataWriteIndex += 20;
 
 
        
        // End of directory - contains optional link to continued directory.
        Put32u(Buffer+DirIndex, 0);
    }
 
    {
        //Continuation which links to this directory;
        Put32u(Buffer+DirContinuation, DataWriteIndex-8);
        DirIndex = DataWriteIndex;
        NumEntries = 2;
        DataWriteIndex += 2 + NumEntries*12 + 4;
 
        Put16u(Buffer+DirIndex, NumEntries); // Number of entries
        DirIndex += 2;
        {
            // Link to exif dir entry
            Put16u(Buffer+DirIndex, TAG_THUMBNAIL_OFFSET);         // Tag
            Put16u(Buffer+DirIndex + 2, FMT_ULONG);       // Format
            Put32u(Buffer+DirIndex + 4, 1);               // Components
            Put32u(Buffer+DirIndex + 8, DataWriteIndex-8); // Pointer or value.
            DirIndex += 12;
        }
 
        {
            // Link to exif dir entry
            Put16u(Buffer+DirIndex, TAG_THUMBNAIL_LENGTH);         // Tag
            Put16u(Buffer+DirIndex + 2, FMT_ULONG);       // Format
            Put32u(Buffer+DirIndex + 4, 1);               // Components
            Put32u(Buffer+DirIndex + 8, 0); // Pointer or value.
            DirIndex += 12;
        }
        // End of directory - contains optional link to continued directory.
        Put32u(Buffer+DirIndex, 0);
    }
 
  //  printf("DataWriteIndex(3) %d <-------------------------\n", DataWriteIndex);
 
 
    Buffer[0] = (unsigned char)(DataWriteIndex >> 8);
    Buffer[1] = (unsigned char)DataWriteIndex;
 
    // Remove old exif section, if there was one.
    RemoveSectionType(M_EXIF);
 
    {
        // Sections need malloced buffers, so do that now, especially because
        // we now know how big it needs to be allocated.
        unsigned char * NewBuf = malloc(DataWriteIndex);
        printf("DataWriteIndex %d <-------------------------\n", DataWriteIndex);
        if (NewBuf == NULL){
            ErrFatal("Could not allocate memory");
        }
        memcpy(NewBuf, Buffer, DataWriteIndex);
 
        CreateSection(M_EXIF, NewBuf, DataWriteIndex);
 
        // Re-parse new exif section, now that its in place
        // otherwise, we risk touching data that has already been freed.
        process_EXIF(NewBuf, DataWriteIndex);
    }
}
0
12 / 11 / 6
Регистрация: 05.10.2013
Сообщений: 219
17.11.2014, 17:25 4
mhg,
Я не знаю твой уровень подготовленности по данному вопросу но попробуй для начала вычитать EXIF,
все не так просто, при чем метки надо ловить а потом уже встраивать в структуры и расшифровывать..
начни с этого
https://www.cyberforum.ru/grap... 94210.html
0
17.11.2014, 17:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2014, 17:25
Помогаю со студенческими работами здесь

Создание и редактирование cmd-файла с использованием bat-файла
Нужно создать cmd файл в %systemroot% и отредактировать его из bat'ника

Создание и редактирование файла
Привет! Помогите решить задачу, не знаю как сделать! Короче сама задача: Создать файл на диске...

Редактирование атрибутов JPEG файлов
Проблема состоит в следующем. Есть JPEG файл с внедренным в него описанием и всякими мета тегами....

Создание и редактирование .dat файла
Написать программу, которая формирует новый файл последовательного доступа, в котором исключены...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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