Métadonnées d'un jpg

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Métadonnées d'un jpg

Message 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.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Métadonnées d'un jpg

Message par jbernard13 »

tu utilise quel appareil photos? je suppose que tu acheter LIghtRoom aussi
Jbernard13
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Métadonnées d'un jpg

Message 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.
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Métadonnées d'un jpg

Message 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 
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Métadonnées d'un jpg

Message 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
:)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Métadonnées d'un jpg

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Métadonnées d'un jpg

Message par Le Soldat Inconnu »

ça semble super intéressant mais je pige pas comment le télécharger .... :mrgreen:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Métadonnées d'un jpg

Message 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à :
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Métadonnées d'un jpg

Message 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.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Métadonnées d'un jpg

Message 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)
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Métadonnées d'un jpg

Message par MetalOS »

Merci pour vos réponses, je vais regarder ca de suite :wink:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Métadonnées d'un jpg

Message 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 ?
Répondre