IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Recupérer les dimensions d'un Jpeg


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut Recupérer les dimensions d'un Jpeg
    Salut,

    Oui, je suis en train de voir si il ya un moyen simple de récupérer la hauteur et la largeur d'une image jpeg, mais en regardant les specifications du format, j'ai pas l'impression que ces infos soient directement dans le header.
    Je dois le faire en C sous Linux et si possible sans utiliser de librairie (ou alors une toute petite (pas de GD)).

    Merci

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Les fichier jpg sont constitués de blocs délimités par le code $ff ($ = hexa). 
     
    Après ce marqueur de bloc, on trouve : 
     
    - le type de bloc sur 1 octect
    - la longeur du bloc sur 2 octets (poids fort, poids faible) la longeur du bloc inclus les 2 octets défnissant cette longueur.
    - le contenu du bloc sur (longeur - 2 octets)
     
    Les 2 premiers octets sont la signature d'un fichier de type jfif ($ff, $d8).
     
    Les types de blocs qui nous interessent sont :
     
    $e0 : 
    - 4 premier octets : signature sous forme de chaine de caractère 'JFIF'
     
    $c0 ou $c2 :
    - 1 octet
    - 2 octets : hauteur (poids fort, poids faible)
    - 2 octets : largeur (poids fort, poids faible)
     
    $d9:
    - fin du fichier
    algo que j'imagine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    # j'indice mes tableaux à partir de 0
    ouvrir fichier
    typefichier = lire 2 octets
     
    si typefichier == $FD$D8
      marqueur = lire 1 octet
      tant que marqueur = $ff
        signaturebloc = lire 1 octet
        longueurbloc = lire 2 octets
        bloc = lire (longeurbloc - 2) octets
     
        si signaturebloc = $c0 ou signaturebloc = $c2
          hauteur = bloc[1] * 256 + bloc[2]
          largeur = bloc[3] * 256 + bloc[4]
        fin si
     
        si signaturebloc = $e0
          si bloc[0:3] <> 'JFIF'
             ' ce n'est pas un fichier JPEG
             sortie tant que
          fin si
        fin si
     
        si signaturebloc = $d9
          ' fin du fichier
           sortie tant que
        fin si
     
        marqueur = lire 1 octet
      fin tant que
    fin si
     
    fermer le fichier
    Le code en python pour ceux qui veulent tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    f = open ("D:/Temp/amisoft/original/image/formulaire.jpg", "rb")
     
    typefichier = f.read(2)
    if typefichier == '\xff\xd8':
      marqueur = f.read(1)
      while marqueur == '\xff':
        signaturebloc = f.read(1)
        length = ord(f.read(1)) * 256 + ord(f.read(1))
        buff = f.read(length-2)
     
        if signaturebloc == '\xc0' or signaturebloc == '\xc2':
          h = ord(buff[1])*256 + ord(buff[2])
          w = ord(buff[3])*256 + ord(buff[4])
          print "Hauteur = %s, largeur = %s" % (h, w)
     
        if signaturebloc == '\xe0':
          if buff[:4] != 'JFIF':
            break
          else:
            print "C'est bien un fichier JPEG"
     
        if signaturebloc == '\xd9':
          break
     
        marqueur = f.read(1)
     
    f.close()
    Essayez python, ca vaut le coup
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Merci

    Oui c'est bien ça, il fallait chercher un "start of frame" marqué par 0xC0 à 0xC2 (il faut chercher un ou plusieurs 0xFF de la frame precedente avant)

    Ceci m'a aiguillé :
    http://www.faqs.org/faqs/jpeg-faq/part1/ (faq 22)
    Ainsi que ceci :
    http://dev.w3.org/cvsweb/Amaya/libjpeg/rdjpgcom.c?rev=1.2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recupérer les dimensions de la fenêtre du navigateur
    Par Mageni dans le forum GWT et Vaadin
    Réponses: 5
    Dernier message: 09/01/2014, 17h53
  2. Recupérer les dimensions
    Par elfamine dans le forum jQuery
    Réponses: 7
    Dernier message: 14/04/2012, 13h19
  3. Récupérer les dimensions de mon image.
    Par Trilby dans le forum ASP
    Réponses: 3
    Dernier message: 10/02/2005, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo