2010-04-02 8 views
3

J'essaye d'écrire du code pour extraire des informations Exif d'un fichier JPG. Exif est stocké dans le segment APP1 d'un fichier JPG. Selon the Exif spec, le format du segment APP1 est censé commencer comme ceci:Codage de longueur de segment JPG

FF E1  // APP1 segment marker 
nn nn  // Length of segment 
45   // 'E' 
78   // 'x' 
69   // 'i' 
66   // 'f' 

Et il va jusqu'à ce qu'il y est un FF suivi par autre chose que FF ou 00. En regardant un JPG dans un éditeur hexadécimal, je peux voir FF E1 et la chaîne Exif, mais j'ai du mal à décoder les octets de longueur. Un exemple: Dans un jpg, mon éditeur hexadécimal me dit que le segment APP1 a une longueur de 686 octets, mais que les octets de longueur sont F7 C8.

Comment utiliser ces octets pour obtenir 686 décimales?

Edit: Voici la première partie du fichier exemple:

FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 

Edit: En fait, je pense que je pourrais savoir ce qui se passe ici. Est-ce que le segment APP1 "contient" d'autres segments? Par exemple, si les données de vignettes ont été considérées comme étant dans APP1, cette longueur semble plus raisonnable. Quelqu'un peut-il confirmer/infirmer cela?

+1

Etes-vous sûr que le segment APP1 n'est pas 63432 octets? Comment savez-vous que c'est 686? C'est probablement 686 plus la taille de la vignette. – Gabe

+0

@gabe J'ai recherché les octets de marqueur 'FF xx' suivants d'un nouveau segment. Est-ce exact? – Blorgbeard

+0

Oui, je m'attendrais à ce qu'un FFDB soit le prochain marqueur (DQT). – Gabe

Répondre

3

Il s'avère que le segment APP1 inclut la vignette (voir le document EXIF ​​lié et descend jusqu'à la page logique 12), donc le 686 est un hareng rouge (probablement le nombre d'octets jusqu'à la vignette). F7C8 est le nombre réel d'octets jusqu'au segment DQT, et il est si grand parce qu'il inclut une vignette.

1

Vous ne pouvez pas. Ces octets ne représentent pas 686, mais les octets de longueur précèdent la chaîne "Exif".

Sans voir le fichier, il est impossible de diagnostiquer. Il peut être utile de publier les 20 premiers octets hexadécimaux de votre fichier.

+0

Fait, s'il vous plaît jeter un oeil à mes modifications. – Blorgbeard