Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RECUPERER LES DIMENSIONS IMAGE JPEG ET PSD (PHOTOSHOP) SANS OCX SANS API


Information sur la source

Catégorie :Graphique Classé sous : dimension, jpg, jpeg, image, psd Niveau : Débutant Date de création : 03/10/2006 Date de mise à jour : 16/10/2006 16:19:08 Vu : 10 080

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Avec ce code , vous pouvez recuperer facilement les dimension Width et Height reels d'une image Jpeg sans passer par un PictureBox ou un StdPicture ou Cdib, meme pas d'api , rien.

Copiez simplement ce ptit bout de code dans un module

Utilisation :

Private Sub Command1_Click()
Dim o As SIZE
Dim ErrorH As Integer
ErrorH = JpgSize("c:\surf41.jpg", o)
If ErrorH = 0 Then
    Text1 = o.cx & " x " & o.cy
Else
    MsgBox GetErrorString(ErrorH)
End If

End Sub
 

Source

  • Option Base 0
  • Option Explicit
  • 'RogerStudio
  • 'JpgSize
  • 'Fonction qui recupere la dimension d'un image JPG rapidement
  • 'Sans control Picture ou CDib
  • 'Simple ouvertur du fichier , recherche des valeurs dans l'entete.
  • 'Entrée : Nom et chemin complet du fichier Jpg
  • ' Dimension de structure SIZE
  • 'Sortie : NULL si Reussi
  • ' >0 en cas d'erreur
  • 'Reference Doc : http://www.landscapeimage.com/ThumbHTML/help/exif_file_format.html
  • 'http://www.w3.org/Graphics/JPEG/jfif3.pdf
  • 'Travail perso de recherche sur le format JFIF Version 1.1 et 1.2
  • Private PHeight As Long, PWidth As Long 'Resultats des recherches
  • Private Free As Integer 'numero de fichier libre
  • Private Temp() As Byte, Temp1() As Byte
  • Private MarkerLenght As Integer 'Longeur du markeur
  • Private IsJpg(1) As Byte '2 Premiers octets pour verifier l'entet du Jpg
  • Private AppMarker(1) As Byte 'Structure du marker (FFD8 FFD0 FFC0 FFE1 FFE0 .... FFxx)
  • Private MarkerOffset As Long 'Offset du marker
  • Private Mark As Integer
  • Private Origin As Long 'Pour la boucle Get
  • Private NotFound As Boolean
  • Private LngS As String * 4 'Phrase fixe de 4 octets pour la mise en forme Hexa
  • Private IntS1 As String * 2 ' // de 2 octets
  • Private IntS2 As String * 2 ' // //
  • Private IntS3 As String * 2 ' // //
  • Private IntS4 As String * 2 ' // //
  • Private X1 As Long 'Boucles
  • 'Psd format
  • Private LngS1 As String * 8 'Phrase fixe de 8 octets pour la mise en forme Hexa
  • Private PsdSignature As Long
  • Private PsdVersionFormat As Integer
  • Private PsdRows As Long
  • Private PsdColumns As Long
  • Public Type SIZE
  • cx As Long
  • cy As Long
  • End Type
  • Public Function PhotoShopFileSize(SzFileName As String, ByRef Dimension As SIZE) As Integer
  • On Error GoTo Fin
  • If ExistFile(SzFileName) = False Then PhotoShopFileSize = 1: Exit Function
  • Free = FreeFile
  • Open SzFileName For Binary As #Free
  • Get #Free, , PsdSignature
  • 'Verifie que l'entete est bien "8BPS"
  • If Hex(PsdSignature) <> "53504238" Then PhotoShopFileSize = 5: Close #Free: Exit Function
  • Get #Free, , PsdVersionFormat
  • 'Verifie que la version est a 1
  • If Hex(PsdVersionFormat) <> "100" Then PhotoShopFileSize = 6: Close #Free: Exit Function
  • 'debu a offset 15
  • Seek #Free, 15
  • ReDim Temp(3)
  • Get #Free, , Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • IntS3 = String(2 - Len(Hex(Temp(2))), "0") & Hex(Temp(2))
  • IntS4 = String(2 - Len(Hex(Temp(3))), "0") & Hex(Temp(3))
  • LngS1 = IntS1 & IntS2 & IntS3 & IntS4
  • PHeight = Val("&H" & LngS1)
  • Get #Free, , Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • IntS3 = String(2 - Len(Hex(Temp(2))), "0") & Hex(Temp(2))
  • IntS4 = String(2 - Len(Hex(Temp(3))), "0") & Hex(Temp(3))
  • LngS1 = IntS1 & IntS2 & IntS3 & IntS4
  • PWidth = Val("&H" & LngS1)
  • Dimension.cx = PWidth
  • Dimension.cy = PHeight
  • PhotoShopFileSize = 0
  • Fin:
  • Close #Free
  • If Err Then PhotoShopFileSize = Err.Number
  • End Function
  • Public Function JpgSize(SzFileName As String, ByRef Dimension As SIZE) As Integer
  • On Error GoTo Fin
  • 'Verifie que le fichier existe
  • If ExistFile(SzFileName) = False Then JpgSize = 1: Exit Function
  • Free = FreeFile
  • Open SzFileName For Binary As #Free
  • Get #Free, , IsJpg 'FFD8 = Fichier Jpg
  • If Hex(IsJpg(0)) <> "FF" And Hex(IsJpg(1)) <> "D8" Then JpgSize = 2: GoTo Fin
  • 'LE fichier est bien un Jpg
  • 'On recupere le premier marker
  • Get #Free, , AppMarker 'Marker FFE0 ou FFE1 'Les autres fichiers ne sont pas geré pour le moment
  • 'Le marker est suivi de sa longeur 2octets
  • ReDim Temp(1)
  • Get #Free, , Temp
  • MarkerLenght = ("&H" & Hex(Temp(0)) & Hex(Temp(1)))
  • MarkerOffset = 5 'C'est obligatoirement le premier marker
  • 'A quel genre de jpg a t'on affaire ? avec Exif ou sans Exif ?
  • 'FFE0 Sans exif , entete simple JFIF
  • 'FFE1 Avec exif, entete Exif
  • If Hex(AppMarker(1)) = "E0" Then 'JFIF
  • 'Fichier Jfif
  • 'verifie que c'est bien un Jfif, Recupere les 5 prochain bytes
  • 'ca doit etre 4A 46 49 46 00
  • ' J F I F 0
  • ReDim Temp(4)
  • Get #Free, , Temp
  • If Hex(Temp(0)) <> "4A" Then JpgSize = 3: GoTo Fin
  • If Hex(Temp(1)) <> "46" Then JpgSize = 3: GoTo Fin
  • If Hex(Temp(2)) <> "49" Then JpgSize = 3: GoTo Fin
  • If Hex(Temp(3)) <> "46" Then JpgSize = 3: GoTo Fin
  • If Hex(Temp(4)) <> "0" Then JpgSize = 3: GoTo Fin
  • ReDim Temp(1)
  • ReDim Temp1(1)
  • NotFound = True
  • 'a l 'offset "MArkerLenght" , on doit avoir un FF xx puis FFxx ....
  • 'Rechercher le marker FFC0
  • Do
  • Seek #Free, MarkerLenght + MarkerOffset
  • 'Offset en cours =MarkerLenght + MarkerOffset
  • Get #Free, , Temp 'recupere le marker
  • MarkerOffset = Seek(1)
  • Get #Free, , Temp1 'recupere la taille du marker
  • MarkerLenght = ("&H" & Hex(Temp1(0)) & Hex(Temp1(1)))
  • If Hex(Temp(0)) = "FF" And Hex(Temp(1)) = "C0" Then NotFound = False
  • Loop While NotFound
  • 'Marker FFC0 trouvé ! cool
  • ReDim Temp(0)
  • Get #Free, , Temp 'je ne sais pas a quoi correspond ce byte , c'est souvent 8 !
  • 'mais bon passons
  • ReDim Temp(1)
  • 'Ici on recupere la hauteur
  • Get #Free, , Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • LngS = IntS1 & IntS2
  • PHeight = Val("&H" & LngS)
  • 'et ici la longeur
  • Get #Free, , Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • LngS = IntS1 & IntS2
  • PWidth = Val("&H" & LngS)
  • JpgSize = 0
  • 'Fichier JFIF normal terminé
  • 'Retourne 0 (pas d'erreur)
  • 'Et les valeurs dans la streucture
  • Dimension.cx = PWidth
  • Dimension.cy = PHeight
  • ElseIf Hex(AppMarker(1)) = "E1" Then 'Exif
  • 'Exif presents , il faut chercher dans les marques exif ,
  • 'car au markeur FFC0 , c'est la dimension de la miniaturre . et non de l'image
  • 'Le numero de case est : A002 pour la longuer
  • 'Le numero de case est : A003 pour la hauteur
  • '****************
  • 'Codage Motorola ou Intel ?
  • '**************
  • 'Recherche du marker "Exif"
  • ReDim Temp(5)
  • Origin = 0
  • NotFound = True
  • Do
  • Origin = Origin + 1
  • Get #1, Origin, Temp
  • If Temp(0) = 69 And Temp(1) = 120 And Temp(2) = 105 And Temp(3) = 102 And Temp(4) = 0 And Temp(5) = 0 Then NotFound = False
  • Loop While NotFound
  • Origin = Origin + 6
  • ReDim Temp(1)
  • Get #1, Origin, Temp
  • Debug.Print Temp(0)
  • Debug.Print Temp(1)
  • Codage = None
  • If Temp(0) = 77 And Temp(1) = 77 Then Codage = Motorola
  • If Temp(0) = 73 And Temp(1) = 73 Then Codage = Intel
  • If Codage = None Then JpgSize = 5: GoTo Fin
  • Dim Marke As Integer
  • If Codage = Intel Then Marke = &HA002
  • If Codage = Motorola Then Marke = &H2A0
  • Origin = 1
  • NotFound = True
  • Do
  • 'Recherche du premier marker : a002
  • Get #1, Origin, Mark
  • Origin = Origin + 1
  • DoEvents
  • If Mark = Marke Then NotFound = False
  • Loop While NotFound
  • 'Premier marker A002 Trouvé
  • If Codage = Intel Then
  • Origin = Origin + 7
  • '4 Derniers octets de la structure de 12
  • Get #1, Origin, PWidth
  • Origin = Origin + 4
  • ElseIf Codage = Motorola Then
  • Origin = Origin + 7
  • ReDim Temp(1)
  • Get #1, Origin, Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • LngS = IntS1 & IntS2
  • PWidth = Val("&H" & LngS)
  • Origin = Origin + 4
  • End If
  • 'on recomence pour Le deuxieme
  • If Codage = Intel Then Marke = &HA003
  • If Codage = Motorola Then Marke = &H3A0
  • Get #1, Origin, Mark
  • If Mark = Marke Then
  • For X1 = 1 To 3
  • Get #1, , Mark
  • Next X1
  • If Codage = Intel Then
  • Origin = Origin + 8
  • '4 Derniers octets de la structure de 12
  • Get #1, Origin, PHeight
  • ElseIf Codage = Motorola Then
  • Origin = Origin + 8
  • ReDim Temp(1)
  • Get #1, Origin, Temp
  • IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
  • IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
  • LngS = IntS1 & IntS2
  • PHeight = Val("&H" & LngS)
  • End If
  • Else
  • JpgSize = 4: GoTo Fin
  • End If
  • JpgSize = 0
  • 'Fichier exif terminé
  • 'Retourne 0 (pas d'erreur)
  • 'Et les valeurs dans la streucture
  • Dimension.cx = PWidth
  • Dimension.cy = PHeight
  • End If
  • Fin:
  • Close #Free
  • If Err Then JpgSize = Err.Number
  • End Function
  • Private Function ExistFile(ByVal sSpec As String) As Boolean
  • On Error Resume Next
  • Call FileLen(sSpec)
  • ExistFile = (Err = 0)
  • End Function
  • Public Function GetErrorString(Index As Integer) As String
  • Select Case Index
  • Case 1: GetErrorString = "Le fichier specifié n'existe pas"
  • Case 2: GetErrorString = "Le fichier specifié n'est pas un JPG"
  • Case 3: GetErrorString = "LE fichier est bien un Jpg mais contient une mauvaise entete !"
  • Case 4: GetErrorString = "Marqueur mal placé , non trouvé , peut etre encodage MM"
  • End Select
  • End Function
  • 'Erreur
  • '1 : Le fichier n'existe pas
  • '2 : Le fichier n'est pas un JPG
  • '3 : Fichier Jpg mais mauvaise entete !
  • '4 : Marqueur mal placé , non trouvé , peut etre encodage MM
Option Base 0
Option Explicit

'RogerStudio
'JpgSize
'Fonction qui recupere la dimension d'un image JPG rapidement
'Sans control Picture ou CDib
'Simple ouvertur du fichier , recherche des valeurs dans l'entete.

'Entrée :   Nom et chemin complet du fichier Jpg
'           Dimension de structure SIZE

'Sortie :   NULL si Reussi
'           >0 en cas d'erreur




'Reference Doc : http://www.landscapeimage.com/ThumbHTML/help/exif_file_format.html
'http://www.w3.org/Graphics/JPEG/jfif3.pdf
'Travail perso de recherche sur le format JFIF Version 1.1 et 1.2

Private PHeight As Long, PWidth As Long         'Resultats des recherches
Private Free As Integer                         'numero de fichier libre
Private Temp() As Byte, Temp1() As Byte
Private MarkerLenght As Integer                 'Longeur du markeur
Private IsJpg(1) As Byte                        '2 Premiers octets pour verifier l'entet du Jpg
Private AppMarker(1) As Byte                    'Structure du marker (FFD8 FFD0 FFC0 FFE1 FFE0 .... FFxx)
Private MarkerOffset As Long                    'Offset du marker
Private Mark As Integer

Private Origin As Long      'Pour la boucle Get
Private NotFound As Boolean

Private LngS As String * 4      'Phrase fixe de 4 octets pour la mise en forme Hexa
Private IntS1 As String * 2     ' // de 2 octets
Private IntS2 As String * 2     ' //    //
Private IntS3 As String * 2     ' //    //
Private IntS4 As String * 2     ' //    //


Private X1 As Long              'Boucles

'Psd format
Private LngS1 As String * 8      'Phrase fixe de 8 octets pour la mise en forme Hexa
Private PsdSignature As Long
Private PsdVersionFormat As Integer
Private PsdRows As Long
Private PsdColumns As Long




Public Type SIZE
    cx As Long
    cy As Long
End Type






Public Function PhotoShopFileSize(SzFileName As String, ByRef Dimension As SIZE) As Integer
On Error GoTo Fin
If ExistFile(SzFileName) = False Then PhotoShopFileSize = 1: Exit Function
Free = FreeFile

Open SzFileName For Binary As #Free
Get #Free, , PsdSignature
'Verifie que l'entete est bien "8BPS"
If Hex(PsdSignature) <> "53504238" Then PhotoShopFileSize = 5: Close #Free: Exit Function

Get #Free, , PsdVersionFormat

'Verifie que la version est a 1
If Hex(PsdVersionFormat) <> "100" Then PhotoShopFileSize = 6: Close #Free: Exit Function

'debu a offset 15
Seek #Free, 15
ReDim Temp(3)
Get #Free, , Temp
IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
IntS3 = String(2 - Len(Hex(Temp(2))), "0") & Hex(Temp(2))
IntS4 = String(2 - Len(Hex(Temp(3))), "0") & Hex(Temp(3))
LngS1 = IntS1 & IntS2 & IntS3 & IntS4
PHeight = Val("&H" & LngS1)

Get #Free, , Temp
IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
IntS3 = String(2 - Len(Hex(Temp(2))), "0") & Hex(Temp(2))
IntS4 = String(2 - Len(Hex(Temp(3))), "0") & Hex(Temp(3))
LngS1 = IntS1 & IntS2 & IntS3 & IntS4
PWidth = Val("&H" & LngS1)

Dimension.cx = PWidth
Dimension.cy = PHeight
PhotoShopFileSize = 0

Fin:
Close #Free
If Err Then PhotoShopFileSize = Err.Number
End Function





Public Function JpgSize(SzFileName As String, ByRef Dimension As SIZE) As Integer
On Error GoTo Fin
'Verifie que le fichier existe
If ExistFile(SzFileName) = False Then JpgSize = 1: Exit Function
    
Free = FreeFile
Open SzFileName For Binary As #Free
    Get #Free, , IsJpg     'FFD8 = Fichier Jpg
    If Hex(IsJpg(0)) <> "FF" And Hex(IsJpg(1)) <> "D8" Then JpgSize = 2: GoTo Fin
    
    'LE fichier est bien un Jpg
    'On recupere le premier marker
    Get #Free, , AppMarker        'Marker  FFE0 ou FFE1    'Les autres fichiers ne sont pas geré pour le moment
    'Le marker est suivi de sa longeur 2octets
    ReDim Temp(1)
    Get #Free, , Temp
    MarkerLenght = ("&H" & Hex(Temp(0)) & Hex(Temp(1)))
    MarkerOffset = 5        'C'est obligatoirement le premier marker
    
    'A quel genre de jpg a t'on affaire ? avec Exif ou sans Exif ?
    'FFE0 Sans exif , entete simple JFIF
    'FFE1 Avec exif, entete Exif
    
    If Hex(AppMarker(1)) = "E0" Then    'JFIF
        'Fichier Jfif
        'verifie que c'est bien un Jfif, Recupere les 5 prochain bytes
        'ca doit etre 4A 46 49 46 00
        '              J  F  I  F  0
        
        ReDim Temp(4)
        Get #Free, , Temp
        If Hex(Temp(0)) <> "4A" Then JpgSize = 3: GoTo Fin
        If Hex(Temp(1)) <> "46" Then JpgSize = 3: GoTo Fin
        If Hex(Temp(2)) <> "49" Then JpgSize = 3: GoTo Fin
        If Hex(Temp(3)) <> "46" Then JpgSize = 3: GoTo Fin
        If Hex(Temp(4)) <> "0" Then JpgSize = 3: GoTo Fin
    
        ReDim Temp(1)
        ReDim Temp1(1)
        NotFound = True
        'a l 'offset "MArkerLenght" , on doit avoir un FF xx  puis FFxx ....
        'Rechercher le marker FFC0
        Do
            Seek #Free, MarkerLenght + MarkerOffset
            'Offset en cours =MarkerLenght + MarkerOffset
            Get #Free, , Temp      'recupere le marker
            MarkerOffset = Seek(1)
            Get #Free, , Temp1         'recupere la taille du marker
            MarkerLenght = ("&H" & Hex(Temp1(0)) & Hex(Temp1(1)))
            If Hex(Temp(0)) = "FF" And Hex(Temp(1)) = "C0" Then NotFound = False
            
        Loop While NotFound
        'Marker FFC0 trouvé ! cool
        
        ReDim Temp(0)
        Get #Free, , Temp  'je ne sais pas a quoi correspond ce byte , c'est souvent 8 !
                        'mais bon passons
        ReDim Temp(1)
        'Ici on recupere la hauteur
        Get #Free, , Temp
        IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
        IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
        LngS = IntS1 & IntS2
        PHeight = Val("&H" & LngS)
        'et ici la longeur
        Get #Free, , Temp
        IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
        IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
        LngS = IntS1 & IntS2
        PWidth = Val("&H" & LngS)
        JpgSize = 0
        'Fichier JFIF normal terminé
        'Retourne 0 (pas d'erreur)
        'Et les valeurs dans la streucture
        Dimension.cx = PWidth
        Dimension.cy = PHeight
        
        
    ElseIf Hex(AppMarker(1)) = "E1" Then 'Exif
        'Exif presents , il faut chercher dans les marques exif ,
        'car au markeur FFC0 , c'est la dimension de la miniaturre . et non de l'image
        'Le numero de case est : A002 pour la longuer
        'Le numero de case est : A003 pour la hauteur
        
        
'****************
'Codage Motorola ou Intel ?
'**************
'Recherche du marker "Exif"
ReDim Temp(5)
Origin = 0
NotFound = True
Do
    Origin = Origin + 1
    Get #1, Origin, Temp
    If Temp(0) = 69 And Temp(1) = 120 And Temp(2) = 105 And Temp(3) = 102 And Temp(4) = 0 And Temp(5) = 0 Then NotFound = False
Loop While NotFound
Origin = Origin + 6
ReDim Temp(1)
Get #1, Origin, Temp
Debug.Print Temp(0)
Debug.Print Temp(1)
Codage = None
If Temp(0) = 77 And Temp(1) = 77 Then Codage = Motorola
If Temp(0) = 73 And Temp(1) = 73 Then Codage = Intel
If Codage = None Then JpgSize = 5: GoTo Fin



        
        Dim Marke As Integer
        If Codage = Intel Then Marke = &HA002
        If Codage = Motorola Then Marke = &H2A0
        Origin = 1
        NotFound = True
        Do
            'Recherche du premier marker : a002
            Get #1, Origin, Mark
            Origin = Origin + 1
            DoEvents
            If Mark = Marke Then NotFound = False
        Loop While NotFound
        'Premier marker A002 Trouvé
        
    If Codage = Intel Then
        Origin = Origin + 7
        '4 Derniers octets de la structure de 12
        Get #1, Origin, PWidth
        Origin = Origin + 4
    ElseIf Codage = Motorola Then
         Origin = Origin + 7
         ReDim Temp(1)
         Get #1, Origin, Temp
         
        IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
        IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
        LngS = IntS1 & IntS2
        PWidth = Val("&H" & LngS)
        Origin = Origin + 4
    End If
        
        'on recomence pour Le deuxieme
        If Codage = Intel Then Marke = &HA003
        If Codage = Motorola Then Marke = &H3A0
        Get #1, Origin, Mark
        If Mark = Marke Then
            For X1 = 1 To 3
            Get #1, , Mark
            Next X1
            
        If Codage = Intel Then
        Origin = Origin + 8
        '4 Derniers octets de la structure de 12
        Get #1, Origin, PHeight
    ElseIf Codage = Motorola Then
         Origin = Origin + 8
         ReDim Temp(1)
         Get #1, Origin, Temp
         
        IntS1 = String(2 - Len(Hex(Temp(0))), "0") & Hex(Temp(0))
        IntS2 = String(2 - Len(Hex(Temp(1))), "0") & Hex(Temp(1))
        LngS = IntS1 & IntS2
        PHeight = Val("&H" & LngS)
    End If
            
        
        
        Else
            JpgSize = 4: GoTo Fin
        End If
        JpgSize = 0
        'Fichier exif  terminé
        'Retourne 0 (pas d'erreur)
        'Et les valeurs dans la streucture
        Dimension.cx = PWidth
        Dimension.cy = PHeight
        
    End If



Fin:
Close #Free
If Err Then JpgSize = Err.Number
End Function

Private Function ExistFile(ByVal sSpec As String) As Boolean
    On Error Resume Next
    Call FileLen(sSpec)
    ExistFile = (Err = 0)
End Function


Public Function GetErrorString(Index As Integer) As String
Select Case Index

    Case 1: GetErrorString = "Le fichier specifié n'existe pas"
    Case 2: GetErrorString = "Le fichier specifié n'est pas un JPG"
    Case 3: GetErrorString = "LE fichier est bien un Jpg mais contient une mauvaise entete !"
    Case 4: GetErrorString = "Marqueur mal placé , non trouvé , peut etre encodage MM"

End Select
End Function



'Erreur
'1 : Le fichier n'existe pas
'2 : Le fichier n'est pas un JPG
'3 : Fichier Jpg mais mauvaise entete !
'4 : Marqueur mal placé , non trouvé , peut etre encodage MM

Conclusion

j'ai testé sur des jpg provenant d'un apareil canon eos 350, donc avec EXIF
et sur des vielles photo jpg JFIF ver 1.1 et 1.2.

 

Historique

07 octobre 2006 21:37:53 :
- Remplacement des #1 par #Free - Ajout de fonction PhotoShopFileSize (Recupere les dimension d'une image Psd (Photoshop)
07 octobre 2006 21:39:33 :
J'avais oublié les variables
16 octobre 2006 16:19:08 :
Gestion du codage Intel et Moto (un peu bankal , mais ca marche)

Commentaires et avis

signaler à un administrateur
Commentaire de hackademius le 03/10/2006 23:20:00

Avec ca , vous pouvez recuprer facilement les infos exif du jpeg , c assez simple en fait , mais fo comprendre les marqueurs et aimer l'exa.
J'espere avoir assez commenté.

NB: J'ai fais cette recherche pour mon code de timeline, Pour les bmp c'est assez facile , une structure type existe , il n'y plus qu'a lire l'entete du fichier , mais pour les jpg , c'est autre chose , comme l'entete change a chaque image et meme des fois a chaque ouverture par un logiciel.

En esperant que ca serve a d'autres....

signaler à un administrateur
Commentaire de bouv le 04/10/2006 11:28:05

Hum, un code qui va surement me servir.

signaler à un administrateur
Commentaire de Renfield le 04/10/2006 11:54:28 administrateur CS

ces entêtes sont forcément présentes ?

signaler à un administrateur
Commentaire de hackademius le 04/10/2006 15:16:46

ah oui , un fichier jpg doit avoir une entete precise, mais qui change selon sa provenance , sa version , le logiciel d'edition ....
Mais il toutes les entetes on la meme bouille :
Marker longueur du marker data Marker Longueur data ....
Apres il faut savoir comment lire ces marqueurs, c'est ca le plus dur et le plus varié.











signaler à un administrateur
Commentaire de VBEnJ0Y le 04/10/2006 18:34:17

Salut,

Je n'ai pas regardé le code mais une classe similaire existe déjà:
http://edais.mvps.org/Code/Libraries/JPEGInfo/index.html

...et il y en a aussi pour plein de formats:
http://edais.mvps.org/Code/Libraries/index.html

...et une améliorée pour le format GIF avec gestion des frames:
http://www.vbfrance.com/codes/CLSGIFINFO-CLASSE-POUR-GIF-ANIMES_36882.aspx

Voilà, bonne continuation

VBEnJ0Y

signaler à un administrateur
Commentaire de ld40 le 04/10/2006 19:47:53

désolé, ça marche pas avec mes photos kodak.

signaler à un administrateur
Commentaire de asimengo le 05/10/2006 10:08:03

Que se passe t-il si les informations de dimensions sont falsifiées (fichier ouvert en binary et modif des valeurs).

signaler à un administrateur
Commentaire de hackademius le 05/10/2006 16:20:52

VbEnjoy : j'ai cherhé partout pour avoir des infos sur ces jpg et j'ai rien trouvé a part les documents cités dans mes commentaires, bah s'il y a mieu , bon bah les autres pourront les prendre , je n'y vois aucun incoveignant , code source = libre de droits = partage , chacun et libre de prendre le code qu'il veut quand il veut.

Ld40 : Est ce ke tu a un meesage d'erreur , si oui , je suppose que c'est ca : "Marqueur mal placé , non trouvé , peut etre encodage MM", Le code source ne prend pas en charge pour le moment le codage motorola,  Si ce n'est pas ca,  Peut tu m'envoyer une de tes photos kodak pour ke je voi l'entete ?


Asimengo : bah si c'est juste les valeur des dimension , bah tu aura ces fausses valeurs , je voi pas l'interet de falsifier une entete de fichier ? a part pour le rendre illisible par aucun programme  , mais bon , sinon , si tu modifie carement l'entete , le programme va generer une erreur , Fin de fichier atteinte dans la boucle , et tu n'aura rien en sortie. c'est tout .

signaler à un administrateur
Commentaire de VBEnJ0Y le 05/10/2006 21:40:46

Tout à fait hackademius, j'ai juste mis ça pour faire partager ces ressources si ça peut servir...

J'ai testé ton code et ça fonctionnait impec !

Je mets 10/10 pour le travail fourni parceque faire un projet comme ça avec si peu d'infos et toutes en anglais c'est quand même pas de la tarte (j'ai fais la même chose pour les GIF) ^^

signaler à un administrateur
Commentaire de hackademius le 05/10/2006 21:56:46

tu m'etone ! que c'est galere pour comprendre, maintenant , il faut que je fasse pareil pour les mpeg , comprendre leur fonctionnement , leurs entetes .... c'est pas gagné ca .

Je tâcherai de metre le code a jour pour le support du codeage motorola , bon y'a ps grand chose , les octets sont juste inversé en lecture (Poid Fort Poid faile) mais bon , fo le faire.

signaler à un administrateur
Commentaire de hackademius le 07/10/2006 21:41:27

Ajouter dans la fonction GetErrorString()


    Case 5: GetErrorString = "Fichier Source non PSD, Mauvais format"
    Case 6: GetErrorString = "Mauvais format de version Photoshop"

Pour la gestion des Psd.

signaler à un administrateur
Commentaire de hackademius le 17/10/2006 14:20:16

c'a yes , le code prend en charge le codage Motorola et Intel , normalement , il peut donc gerer tous les jpg.
Si queulqun a une image Jpg qui ne passe pas, bah il peu me lenvoyer pour que je mette a jour.
On sais jamais , y'a peut etre des jpg qui ne sont pas aux normes.
envoyez ici : admin@rogerstudio.com

@+

signaler à un administrateur
Commentaire de ld40 le 17/10/2006 20:26:05

impeccable, ça marche!

à noter:

Dans ta partie motorola,
il manque quelque chose du style:

Dim motorola As String
Dim intel As String
Dim none As String
Dim codage As String

motorola = "motorola"
intel = "intel"
none = "none"

signaler à un administrateur
Commentaire de hackademius le 18/10/2006 23:02:36

ah nan , milles escuses , j'ai oublié de metre a jour la partie declaration.
Rajouter ca dans la partie du haut.

Private Enum CodageType
    Motorola = 1
    Intel = 2
    None = 3
End Enum
Dim Codage As CodageType

Merci Ld40 pour cette remarque.

signaler à un administrateur
Commentaire de fdiedler2000 le 18/08/2007 19:51:05

comment faire la meme chose mais en vb.net ?

signaler à un administrateur
Commentaire de hackademius le 18/11/2007 13:07:13

pour le vb net , je ne peut pas t'aider , je n'ai pas vb net et je n'ai absolument rien compris a VB net.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

brouiller un jpg [ par vegetalain ] Salut, je voulais savoir si il était possible de crypter une image jpg ou jpeg, et de la sauvegarder "autrement" qu'en bmp?...Les sources que j'ai pu convertir une image .emf en .jpg [ par dimitriour ] bonjour,je cherche un exécutable pour convertir une image .emf en .jpg avec la possibilité de choisir le ratio de compression pour ne pas trop dégrade Données gps à inscrire dans l'EXIF d'une image jpg [ par charbonn ] BonjourJe tente d'écrire mes données gps dans les property d'une image jpg.J'ai examiné les codes sources, dont le meilleur, à mon avis, ExifWorks.Lir dimension image [ par gabkiel ] Bonjour,je voudrais savoir comment connaitre les dimensions d'une image grace à vbj'ai déja regardé le post de franck569 mais sa technique ne marche p reglage qualité jpg [ par Ghall ] bonjours à tous voila en fait j'aimerais savoir, comment regler la qualité de mon image jpg enregistrée.Pour enregistrer j'utilise cette méthode"Pictu image [ par simofid ] je me demande comment on peut changer la taille dZune image :par exemple, nous avons le fichier image.jpg 800*600 pxl et on veut creer un autre fichie Récupérer lien image dans code source d'une page internet. [ par z980x ] Salut &#224; tous !J'ai besoin d'aide pour quelque chose qui vous semblera sans doute simple, mais bon... Voila mon probl&#232;me, je dois r&#233;cup Besoin d'information et d'aide [ par glm2006 ] Bonjour tout le monde!j'essaye de reduire la taille d'une image .jpg  pour l'afficher dans ma form mais j'arrive pas  a le faire, j'ai utilisé  " Pain recadrage et resize d'une image jpg [ par benthi ] est il possible, à partir de VB6, de lancer la commande de recadrage puis la commande de resize sur une image jpg situé dans un répertoire précis. Redimensionner une image dans une PictureBox [ par kraft ] Bonjour,J'ai créé picturebox ayant les dimensions suivantes:Picture1.Width = 4215Picture1.Height = 3255Comment faire pour qu'une image insérée aie ces


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par