Page 1 sur 1

Métadonnées d'un jpg

Publié : sam. 02/janv./2010 13:57
par MetalOS
Salut tous le monde, je fais de la photos depuis très peut de temp et j'aimerais pouvoir me faire un petit visualiseur de photos très simple. Bon jusque là pas de problème, mais j'aimerais pouvoir extraire et afficher les métadonnées qui ce trouve dans le jpg.

Dans les métadonnées ont retrouve les informations sur le boitier utilisé, le focal, la vitesse d'obturation, le temps de pause...etc.

Je ne c'est pas comment faire avec PureBasic pour récupérer ces données. Ne faut t'il pas utiliser une lib pour pouvoir le faire. Pouvez vous m'aider ou me donner quelque pistes ? Merci d'avance.

Re: Métadonnées d'un jpg

Publié : sam. 02/janv./2010 14:26
par jbernard13
tu utilise quel appareil photos? je suppose que tu acheter LIghtRoom aussi

Re: Métadonnées d'un jpg

Publié : sam. 02/janv./2010 14:53
par MetalOS
J'utilise un reflex Nikon D3000 avec un 18/105, autrement non je ne possède pas lightroom. j'hésite entre acheter lightroom, et Capture NX de Nikon ou photoshop.

Re: Métadonnées d'un jpg

Publié : sam. 02/janv./2010 15:21
par MetalOS
J'ai trouvé ca sur le forum anglais (Auteur: Sparkie).

Code : Tout sélectionner

;- Endian procs by wilbert - Thank you
Procedure.w xchEndianW(e.w)
  ProcedureReturn (e & $FF) << 8 + (e >> 8) & $FF
EndProcedure

Procedure xchEndianL(e.l)
  ProcedureReturn (e & $FF) << 24 + (e & $FF00) << 8 + (e >> 8) & $FF00 + (e >> 24) & $FF
EndProcedure

Procedure GetCameraModel(file$)
  ReadFile(0, file$)
  ; --> Bypass header
  FileSeek(0, 3)
  If ReadByte(0) &$FF = $E1
    Header = 12
  Else
    Header = 30
  EndIf
  FileSeek(0, Header)
  ; --> Bytes 0-1 is word order 18761 ($4949) is Intel and 19789 ($4D4D) is Motorola
  wordOrder = ReadWord(0)
  If wordOrder = $4949 Or wordOrder = $4D4D
    ; --> Intel byte order II
    ; --> Motorola byte order MM
    ; --> Bytes 2-3 is TIFF format, it's always 42 ($2A). If not, give up.
    If wordOrder = $4949
      tifFormat = ReadWord(0); bytes 2-3
    Else
      tifFormat = xchEndianW(ReadWord(0)); bytes 2-3
    EndIf
    If tifFormat = $2A
      ; --> Bytes 4-7 is starting offset for IFD (Image File Directory)
      If wordOrder = $4949
        ifd1 = ReadLong(0)
      Else
        ifd1 = xchEndianL(ReadLong(0))
      EndIf
      ; --> Move to start of IFD
      FileSeek(0, ifd1 + Header)
      ; --> First 2 bytes of IFD is number of field entries
      If wordOrder = $4949
        nFields = ReadWord(0)
      Else
        nFields = xchEndianW(ReadWord(0))
      EndIf
      ; --> Loop through all fields to get info
      For i = 1 To nFields
        ; --> Bytes 0-1 contain the Tag for the field.
        If wordOrder = $4949
          currentTag = ReadWord(0)
        Else
          currentTag = xchEndianW(ReadWord(0))
        EndIf
        Select currentTag
          Case $0110
            cam$ = "Model: "
          Case $010F
            cam$ = "Make: "
        EndSelect
        If currentTag = $0110 Or currentTag = $010F; use $0110 For model And $010F For make
          ; --> Bytes 2-3 contain the field Type.
          If wordOrder = $4949
            fieldType = ReadWord(0)
          Else
            fieldType = xchEndianW(ReadWord(0))
          EndIf
          ; --> Bytes 4-7 contain the  Length of the field.
          fieldLength = ReadLong(0);  Bytes 4-7 contain the  Length of the field.
          ;tiffData(currentTag)\length = fieldLength
          If fieldLength <= 4
            currentloc = Loc(0)
            AddGadgetItem(0, -1, ReadString(0))
            FileSeek(0, currentloc + 4)
          Else
            currentloc = Loc(0)
            ; --> Bytes 8-11 contain the field value (if value fits into 4 bytes
            If wordOrder = $4949
              fieldValue = ReadLong(0)
            Else
              fieldValue = xchEndianL(ReadLong(0))
            EndIf
            FileSeek(0, fieldValue + Header)
            AddGadgetItem(0, -1, cam$ + ReadString(0))
            FileSeek(0, currentloc + 4)
          EndIf
        Else
          FileSeek(0, Loc(0)+10)
        EndIf
      Next
    EndIf
  EndIf
  CloseFile(0)
EndProcedure

If OpenWindow(0, 10, 10, 300, 500, "Test", #PB_Window_SystemMenu)
  ListViewGadget(0, 10, 40, 280, 440)
  ButtonGadget(1, 10, 10, 100, 20, "Open File")
 
  Repeat
    event = WaitWindowEvent()
    If EventGadget() = 1 And EventType() = #PB_EventType_LeftClick
      fileopen$ = (OpenFileRequester("Select image", "", "JPG files (JPG)|*.jpg;*.jpeg", 0))
      If fileopen$
        GetCameraModel(fileopen$)
      EndIf
    EndIf
  Until event = #PB_Event_CloseWindow
EndIf
End 

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 9:31
par Thyphoon
si j'étais toi j'utiliserais Exiftools en ligne de commande, c'est gratuit et on fait pas mieux pour lire et ecrire des métadonnées !
http://www.sno.phy.queensu.ca/~phil/exiftool/
c'est ce que je j'utilise :P
:)

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 11:25
par Progi1984
Pour les Exifs, utilise RWFreeImage du projet RWrappers.

C'est un wrapper de FreeImage.

Lien : http://code.google.com/p/rwrappers/sour ... /FreeImage

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 14:10
par Le Soldat Inconnu
ça semble super intéressant mais je pige pas comment le télécharger .... :mrgreen:

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 14:14
par Thyphoon
Le Soldat Inconnu a écrit :ça semble super intéressant mais je pige pas comment le télécharger .... :mrgreen:
les différents fichier sont là :

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 17:10
par Le Soldat Inconnu
J'arrive quand même à ouvrir un lien, je ne suis encore gâteux :mrgreen:

j'ai vu les fichiers, j'arrive à voir le contenu des fichiers PB. Mais comment je fais pour télécharger chaque fichiers ? j'arrive juste à visualiser. C'est ça mon souci.
Je voulais tout récupérer pour regarder ça, car ça m'intéresse aussi de pouvoir lire les exif des jpg, notamment l'orientation de l'image.

Re: Métadonnées d'un jpg

Publié : mer. 06/janv./2010 17:54
par cederavic
Pour les fichier PB, tu click sur le "nom", ça t'affiche la source puis click droit sur View Raw File à droite et Enregistre la cible du lien sous...
Bien l'bonjour à toi au passage 8)

Re: Métadonnées d'un jpg

Publié : jeu. 07/janv./2010 11:35
par MetalOS
Merci pour vos réponses, je vais regarder ca de suite :wink:

Re: Métadonnées d'un jpg

Publié : jeu. 07/janv./2010 11:55
par Progi1984
cederavic a écrit :Pour les fichier PB, tu click sur le "nom", ça t'affiche la source puis click droit sur View Raw File à droite et Enregistre la cible du lien sous...
Bien l'bonjour à toi au passage 8)
Que dire de plus ?