Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Exif informace - výpis v C/C++

Ano ale informace ktora k tomu tagu patri moze byt offset od nejakeho bodu, na ktorom je ten text (napr. datum). V pripade textovych tagov to tak aj je, teraz som si to pozrel v exif specifikacii. Ten exif header je dost komplikovany, to si MUSIS precitat presne a aj pochopit.
http://www.exif.org/specifications.html stiahni si specifikaciu 2.2, a tam na strane 116 mas priklad APP1 pre intel endian (II), na stranke 108 mas priklad pre motorola endian (MM), musis si vsimnut aj to ze tagy (resp. vsetky viacbajtove cisla) maju v jednom pripade (intel endian) prehodene byty (byty sa citaju zprava dolava), to by si mal tiez brat do uvahy ak detekujes v EXIf hlavicke "II".
No a tie tabulky su to co je v jpeg chunku FF E1, po tom ako tam je 2byty dlzky a "Exif" a 2byty 00.
T.j. najdes si jpeg chunk FF, E1, 2byty dlzka, "Exif", 00, 00, a za nimi nasleduje struktura podobna jak na strane 108 alebo 116, a tento bod je odteraz offset 0 (tych exif informacii). Napevno je tam 8bytov: 2byty Byte Order (toto si musis zapamatat pre cely zbytok algoritmu ci mas intel endian alebo nie), potom 2byty 002A, potom 4byty offset 0-teho IFD, na ktory by si mal preskocit, rata sa to od toho offsetu tychto EXIF informacii, takze offset 8 je hned nasledujuci bajt (ak tam bude nieco ine jak 8 tak musis preskocit hodnota minus 8 bytov). potom preskocis 2byty interoperability number a potom mas tagy toho 0-teho IFD. Vsimni si ze tie tagy maju pevnu strukturu, 2byty tag, 2byty typ, 4byty dlzka dat, a 4byty offset dat (offset sa rata od toho EXIF offsetu 0, a nie od zaciatku suboru).
A v tej tabulke vidis napriklad ze v tom 0-tom IFD existuje aj tag DateTime (Tag ID 0132 resp. 3201 u intel endianu), a to bude offset na ten datum co tam vidis vo svojom subore. Ten tag 0132 (resp. 3201 pre II) musis hladat, nemozes sa spoliehat ze bude furt na stejnom offsete. Potom pri prechadzani tych tagov musis davat pozor na tag EXIF IFD Offset tam mozu byt dalsie tagy (napr. moze ale NEMUSI tam byt aj tag 9003 (resp 0390 pre II), a ak tam ten tag je, tak bude v subore ulozeny datum a cas este raz (t.j. 2x), neskor. Takze podla toho co pises tak bud nehladas tie tagy spravne ale prehladavs cely subor co JE ZLE ! Bajty 90 03 sa ti mozu nachadzat v subore milionkrat (ako data) a NEbude to tag! Musis prechadzat celu retaz presne podla specifikacie a cislo tagu testovat LEN na mieste kde naozaj to cislo tagu aj ma byt.
Medzi tymi tagmni davas pozor napr. aj ci tam neni tag GPS IFD offset apod. A potom nakoniec tam bude Next IFD offset, co je offset 1-eho IFD ak tam nejaky je (offset sa rata od zaciatku EXIF a nie od zaciatku suboru). Len teraz nejak nechapem jak ma clovek rozpoznat ze uz to neni dalsi tag, ale ze to je ten "Next Ifd Offset". Si to skus najst v tej specifikacii nejak tam musi niekde byt dlzka toho 0-teho IFD alebo co. Ta dlzka asi neni pevna si vsimni ze v roznych prikladoch je dlzka rozna, tie tagy tam mozu a nemusia byt. Neviem zhlavy jak mas rozpoznat koniec IFD tabulky, musis studovat specifikaciu.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny