FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-55%
Le deal à ne pas rater :
Coffret d’outils – STANLEY – STMT0-74101 – 38 pièces – ...
21.99 € 49.04 €
Voir le deal

 

 Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)

Aller en bas 
3 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyLun 29 Mar 2010 - 21:54

Après avoir bien galéré, voici une tentative pour retrouver rapidement, avec les moyens Panoramic (donc en limitant les lectures disque au maximum), les dimensions d'une image au format .jpg.

J'ai fait au plus simple possible, et s'il y a quelques contrôles élémentaires, j'ai fait l'impasse sur le codage Motorola dans le cas des Exifs (indiqué par 'MM' dans l'entête, au lieu du 'II' de Intel), qui présente les valeurs dans l'ordre inverse (poids forts/poids faibles), personnellement je n'en ai pas vu de ce format.

C'est présenté sous forme de sous-programme, donc facilement intégrable n'importe où.

Le format jpg est très compliqué, je ne cite ici que les balises (marqueurs) indispensables au calcul.
Code:
DIM f$, w%, h%, o1%, o2%, o3%, o4%, v%(10), j%, offs%, ad, er$
LABEL DimJpg, reter

f$ = "C:\Graph\Jpg\Dali\Dali03.jpg": ' ************** A MODIFIER *************
GOSUB DimJpg
PRINT f$: PRINT " " +STR$(w%) + " x " + STR$(h%)
END

DimJpg:
' Recherche des dimensions en pixels (largeur et hauteur) d'une image f$ format jpg
' rendues dans w% et h%
FILEBIN_OPEN_READ 1, f$
FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: FILEBIN_READ 1, o3%
IF o1%<>255 OR o2%<>216 OR o3%<>255 THEN er$ = "en-tête non FFD8FF": GOTO reter
FILEBIN_READ 1, o1%: IF o1%<>224 AND o1%<>225 THEN er$ = "pas E0 ou E1": GOTO reter
IF o1% = 224
    ' ***** C'est un fichier sans Exifs *****
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: offs% = 256*o1% + o2%: ad = 4
    FOR j% = 1 TO 5: FILEBIN_READ 1, v%(j%): NEXT j%
    IF v%(1)<>74 OR v%(2)<>70 OR v%(3)<>73 OR v%(4)<>70 OR v%(5)<>0
        er$ = "pas de JFIF": GOTO reter
    END_IF
    ' Recherche du marqueur 'FFC0' (séquence FF C0 00 11 08 xx xx yy yy)
    REPEAT
        FILEBIN_POSITION 1, ad + offs%
        FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: ' marqueur 'FFxx'
        ad = FILEBIN_POS(1)
        FILEBIN_READ 1, o3%: FILEBIN_READ 1, o4%: offs% = 256*o3% + o4%
    UNTIL o2% = 192
    FOR j% = 1 TO 5: FILEBIN_READ 1, v%(j%): NEXT j%
    h% = 256*v%(2) + v%(3): w% = 256*v%(4) + v%(5)
ELSE
    ' ***** C'est un fichier avec Exifs *****
    ' recherche dans les marqueurs A0xx des Exifs (le marqueur FFC0 contenant
    ' les dimensions de la miniature et non celles de l'image elle-même).
    ' Pour alléger, on ne prend en compte ici que le codage Intel (en-tête = 'ExifooII').
    ' Si le codage est Motorola ('ExifooMM') il faut inverser les séquences de recherche
    ' ci-dessous: 02A0, 03A0, 04A0 au lieu de A002, A003, A004, et aussi
    ' inverser la prise en compte des résultats.
    REPEAT
        REPEAT
            REPEAT
                FILEBIN_READ 1, o1%
            UNTIL o1% = 160: ' recherche 'A002' ou 'A003' ou A004'
            FILEBIN_READ 1, o1%
        UNTIL o1% = 2 OR o1% = 3 OR o1% = 4
        FILEBIN_POSITION 1, FILEBIN_POS(1) + 5
        FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%
        w% = o1% + 256*o2%
    UNTIL w% > 10: ' la 1ère séquence trouvée contient la valeur 1, on reboucle
    ' la séquence 'A00x' suivante contient la hauteur
    REPEAT
        REPEAT
            FILEBIN_READ 1, o1%
        UNTIL o1% = 160: ' recherche 'A002' ou 'A003' ou 'A004'
        FILEBIN_READ 1, o1%
    UNTIL o1% = 2 OR o1% = 3 OR o1% = 4
    FILEBIN_POSITION 1, FILEBIN_POS(1) + 5
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%
    h% = o1% + 256*o2%
END_IF
reter:
FILEBIN_CLOSE 1
RETURN


Dernière édition par JL35 le Mar 30 Mar 2010 - 16:15, édité 1 fois
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyMar 30 Mar 2010 - 13:46

Je ne l'ai pas encore décortiquée en détail,
je l'ai juste essayée pour voir,
mais ta formule a l'air encore plus rapide que tu ne le dis,
en fait, c'est fabuleusement rapide !
(et ce, malgré que tu ne recherches pas la première marque de dimension)
Un beau tour de force !
cheers
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyMar 30 Mar 2010 - 14:09

Merci pour le compliment.
En fait, pour les images sans exifs, la recherche se fait de marqueur en marqueur, chaque marqueur étant suivi de sa longueur, ce qui fait un minimum de lectures disque.
Pour les images avec exifs, au lieu de rechercher les dimensions dans les marqueurs standards (FFC0 successifs), on les recherche dans les Exifs qui sont au début du fichier (marqueurs A002, A003 ...), ce qui fait de l'ordre de 400 lectures, ça va assez vite aussi, mais c'est beaucoup moins rapide que sans exifs.

Mais il m'a fallu étudier les dumps des fichiers et les très rares documentations un peu abordables sur le sujet. Et faire pas mal d'essais !

Eh jjn4, qu'est-ce que tu dis de cette version simplifiée qui combine les deux cas et qui va à la vitesse de l'éclair puisqu'elle elle ne fait qu'une dizaine de lectures disque ?

Et du coup je rajoute en prime le calcul pour les images BMP, GIF et TGA
Code:
DIM f$, w%, h%, o1%, o2%, o3%, o4%, v%(10), j%, offs%, ad, er$, s$
LABEL Dimimage, reter

f$ = "C:\Graph\Jpg\Dali\Dali03.jpg": ' ************** A MODIFIER *************
GOSUB Dimimage
PRINT f$
IF er$ <> ""
    PRINT "ERREUR: " + er$
ELSE
    PRINT " " +STR$(w%) + " x " + STR$(h%)
END_IF
END

Dimimage:
' Recherche des dimensions en pixels (largeur et hauteur) d'une image f$
' aux formats Jpg, Bmp, Gif ou Tga, rendues dans w% et h%
er$ = "": s$ = UPPER$(RIGHT$(f$, 4))
FILEBIN_OPEN_READ 1, f$
IF s$ = ".JPG"
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: FILEBIN_READ 1, o3%
    IF o1%<>255 OR o2%<>216 OR o3%<>255 THEN er$ = "en-tête non FFD8FF": GOTO reter
    FILEBIN_READ 1, o1%: IF o1%<>224 AND o1%<>225 THEN er$ = "pas E0 ou E1": GOTO reter
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: offs% = 256*o1% + o2%: ad = 4
    ' Recherche du marqueur 'FFC0' (séquence FF C0 00 11 08 xx xx yy yy)
    REPEAT
        FILEBIN_POSITION 1, ad + offs%
        FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: ' marqueur 'FFxx'
        ad = FILEBIN_POS(1)
        FILEBIN_READ 1, o3%: FILEBIN_READ 1, o4%: offs% = 256*o3% + o4%
    UNTIL o2% = 192
    FOR j% = 1 TO 5: FILEBIN_READ 1, v%(j%): NEXT j%
    h% = 256*v%(2) + v%(3): w% = 256*v%(4) + v%(5)
ELSE
    IF s$ = ".BMP"
        FILEBIN_POSITION 1, 18
        FOR j% = 1 TO 8: FILEBIN_READ 1, v%(j%): NEXT j%
        w% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
        h% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
    ELSE
        IF s$ = ".GIF"
            FILEBIN_POSITION 1, 6
            FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
            w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
        ELSE
            IF s$ = ".TGA"
                FILEBIN_POSITION 1, 12
                FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
                w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
            END_IF
        END_IF
    END_IF
END_IF
reter:
FILEBIN_CLOSE 1
RETURN

(j'ai édité le 1er post juste pour changer le titre)

Remarque: pour mesurer le temps, j'ai rebouclé sur la lecture d'environ 200 images différentes. Ce qui est curieux, c'est que ça met 2 ou 3 secondes, mais si on relance le programme tout de suite, c'est instantané !
Mon explication c'est que Windows a gardé en mémoire les accès fichiers précédents, et que les fois suivantes il ne relit pas physiquement sur le disque mais reprend les données restées en mémoire.
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyMar 30 Mar 2010 - 22:57

Ouahhhhh !
Voilà Super-OW35 au mieux de sa forme !!!
Là, c'est carrément la vitesse de l'éclair !
cheers cheers
Surtout, ne t'arrête pas !
Continue à transformer ta formule !
Prochaine étape : le calcul des résutats du loto !
Laughing Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyMar 30 Mar 2010 - 23:25

J'avoue que je ne suis pas mécontent du résultat, et qu'à mon humble avis on ne peut pas faire mieux. Donc je m'arrête là.

Pour les résultats du loto, si j'y arrive, je t'enverrai la formule depuis les îles Marquises... en sirotant un petit punch, rafraîchi par une belle indigène avec une feuille de palmier... Very Happy
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyVen 2 Avr 2010 - 13:32

J'ai commencé à décortiquer ta formule,
et pour l'essayer, je l'ai mise sur mon album,
elle est effectivement plus rapide, mais seulement à la 3° utilisation,
comme si l'ordinateur retenait progressivement les données déjà calculées, en effet,
par contre, des fois, elle se bloque complètement,
comme si à UNTIL o2% elle ne trouvait nulle part 192.
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyVen 2 Avr 2010 - 14:24

Ca c'est moche, il faudrait savoir sur quel fichier ça bloque et l'étudier (et si c'est toujours le même, sinon c'est incompréhensible).
Pour le fait que c'est plus rapide les fois suivantes, ça s'explique comme j'ai dit plus haut (Windows garde en mémoire les lectures disques jusqu'à ce qu'il ait besoin de la place, pour les réutiliser éventuellement).
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 14:08

J'ai étudié ce que donne ta formule :

En vitesse :
- la première fois, la vitesse n'est pas si terrible que ça,
- la deuxième fois, ça commence déjà à accélérer,
- les fois suivantes (3°, 4°, etc...) la vitesse est à peu près constante
et rapide, mais finalement pas autant que la formule que j'avais trouvée.
Je ne sais pas pourquoi il faut attendre la 3° fois.
(avec ma formule, c'est toujours constant, ça n'accélère pas au fur et à mesure de l'utilisation).

En utilité :
- Avec les photos capturées (avec divers captureurs d'écran)
ou avec les photos scannées, pas de problème.
- Avec les photos provenant d'un appareil photo numérique, ça marche,
mais curieusement elles apparaissent carrées (donc déformées)
(et je m'aperçois que ça fait la même chose avec ma formule, ô surprise, je n'avais pas essayé ce genre de photos),
- Avec les photos provenant d'Internet, il y en avec lesquelles ça marche, et d'autres où ça plante (arrêt nécessaire par CTRL-ALT-SUPPR),
si bien que ça plante immanquablement pour tous les répertoires contenant un bon pourcentage de photos provenant d'Internet.

Ce plantage vient d'où ?
- ce n'est pas une longue attente pour laquelle je n'aurais pas eu la patience,
c'est bien un plantage, car le REPEAT-UNTIL va au delà de la taille totale de l'image, donc il ne trouve nulle part la séquence cherchée
- lorsque cela s'est produit avec une photo, et que cette photo revient, cela se reproduit à nouveau.

Citation :
J'avoue que je ne suis pas mécontent du résultat, et qu'à mon humble avis on ne peut pas faire mieux.
Euh........ à la réflexion, Note : peut mieux faire...
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 16:38

Bizarre ton affaire, j'ai fait des essais avec divers types de photos et je n'ai pas eu de problèmes.
En gros il y a deux types de jpg: avec et sans Exifs (Les exifs ce sont les informations de prise de vue, appareil, date etc etc, en principe pour les appar eils photo)
Pour les photos déformées c'est peut-être ton système d'affichage qui ne convient pas ?

Bon je vais refaire des études plus poussées (pour mettre mon système hors de cause Very Happy )
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 17:49

Je retire un point de ce que j'ai dit :
pour les déformations, c'était dû au fait que j'avais retiré ton UPPER$
et sur le mien, il n'y en avait pas, donc, plus de déformations,
mais pour le reste, pas de changement.
albino
Il n'y a donc qu'avec celles provenant d'Internet que des problèmes se posent.
Il semblerait que certaines photos n'aient pas la séquence recherchée.
De même, avec le mien, j'observe que quelques photos, rares, mais existantes, ne semblent pas avoir de séquence FF-C0...
puisque l'ordinateur fait toute la photo et affiche le format de la photo précédente.
Suspect
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 21:00

Effectivement, après analyse de pas mal d'images, j'en ai aussi trouvé sans la séquence FFC0.
Au départ il n'y avait que 2 catégories: JFIF et Exif, mais j'en ai trouvé une troisième, celle qui pose un problème: JFIF qui inclut un Exif, je ne sais pas pourquoi, c'est assez rare, peut-être après retouches ?
Toujours est-il que j'ai rajouté le test de ce cas, et j'ai également rajouté une sortie en erreur si on ne trouve pas FFC0 dans les autres cas, pour éviter de tourner dans le vide.

Je te mets le tout, le sous programme Dimimage corrigé, et le sous-programme de test de durée. Comme d'habitude, les noms de fichiers ou de répertoires sont à ajuster.
Code:
' Dimensions d'images JPG, BMP, GIF et TGA
DIM f$, w%, h%, o1%, o2%, o3%, o4%, v%(10), j%, offs%, ad, er$, s$, s1$, nes
DIM rep$, fm$, lst$(500), ww%(500), hh%(500), nf, i%, t1$, t2$
LABEL Dimimage, reter, Fin
LABEL Test

LIST 1: GOSUB Test: GOTO Fin

f$ = "C:\Graph\Jpg\IMG_2022.jpg": ' ************** A MODIFIER *************
fr$ = "Z:\Dimtest.txt"
GOSUB Dimimage
PRINT f$
IF er$ <> ""
    PRINT "ERREUR: " + er$
ELSE
    PRINT " " +STR$(w%) + " x " + STR$(h%)
END_IF

Fin:
END

Dimimage:
' Recherche des dimensions en pixels (largeur et hauteur) d'une image f$
' aux formats Jpg, Bmp, Gif ou Tga, rendues dans w% et h%
er$ = "": s$ = UPPER$(RIGHT$(f$, 4))
FILEBIN_OPEN_READ 1, f$
IF s$ = ".JPG"
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: FILEBIN_READ 1, o3%
    IF o1%<>255 OR o2%<>216 OR o3%<>255 THEN er$ = "en-tête non FFD8FF": GOTO reter
    FILEBIN_READ 1, o1%: IF o1%<>224 AND o1%<>225 THEN er$ = "pas E0 ou E1": GOTO reter
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: offs% = 256*o1% + o2%: ad = 4
    FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
    s$ = CHR$(v%(1)) + CHR$(v%(2)) + CHR$(v%(3)) + CHR$(v%(4))
    FILEBIN_POSITION 1, 24
    FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
    s1$ = CHR$(v%(1)) + CHR$(v%(2)) + CHR$(v%(3)) + CHR$(v%(4))
    IF s1$ = "Exif": ' image jpg EXIF ou JFIF avec Exif
        REPEAT
            REPEAT: ' recherche du marqueur exif 'A004'
                FILEBIN_READ 1, o1%
            UNTIL o1% = 160
            FILEBIN_READ 1, o1%
        UNTIL o1% = 4
        FILEBIN_POSITION 1, FILEBIN_POS(1) + 5
        FOR j% = 1 to 2: FILEBIN_READ 1, v%(j%): NEXT j%
        w% = 256*v%(2) + v%(1)
        FILEBIN_POSITION 1, FILEBIN_POS(1) + 10
        FOR j% = 1 to 2: FILEBIN_READ 1, v%(j%): NEXT j%
        h% = 256*v%(2) + v%(1)
    ELSE: ' image jpg JFIF pur
        nes = 0
        REPEAT: ' Recherche marqueur 'FFC0' ou 'FFC2' (séquence FF C0 00 11 08 xx xx yy yy)
            nes = nes + 1
            IF nes > 10000
                er$ = f$ + " FFC0 non trouvé.": GOTO reter
            END_IF
            FILEBIN_POSITION 1, ad + offs%
            FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: ' marqueur 'FFxx'
            ad = FILEBIN_POS(1): ' position qui suit le marqueur (-> sa longueur)
            FILEBIN_READ 1, o3%: FILEBIN_READ 1, o4%: offs% = 256*o3% + o4%
        UNTIL o2% = 192 OR o2% = 194: ' ='C0' ou 'C2'
        FOR j% = 1 TO 5: FILEBIN_READ 1, v%(j%): NEXT j%
        h% = 256*v%(2) + v%(3): w% = 256*v%(4) + v%(5)
    END_IF
ELSE
    IF s$ = ".BMP"
        FILEBIN_POSITION 1, 18
        FOR j% = 1 TO 8: FILEBIN_READ 1, v%(j%): NEXT j%
        w% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
        h% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
    ELSE
        IF s$ = ".GIF"
            FILEBIN_POSITION 1, 6
            FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
            w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
        ELSE
            IF s$ = ".TGA"
                FILEBIN_POSITION 1, 12
                FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
                w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
            END_IF
        END_IF
    END_IF
END_IF
reter:
FILEBIN_CLOSE 1
RETURN

Test:
rep$ = "C:\Photos\Charny\"
rep$ = "L:\SAVE\PHOTOS\ARCHIVES\2008\Canon\"
rep$ = "C:\Graph\jpg\dali\"
fm$ = "Z:\Dir"
EXECUTE_WAIT "Cmd.exe /c DIR " + rep$ + "*.jpg /O:N /B >" + fm$
FILE_OPEN_READ 1, fm$: nf = 0
    WHILE FILE_EOF(1) = 0
        nf = nf + 1: FILE_READLN 1, lst$(nf)
    END_WHILE
FILE_CLOSE 1
PRINT rep$ + " " + str$(nf) + " images"
t1$ = TIME$
FOR i% = 1 TO nf
    f$ = rep$ + lst$(i%): GOSUB Dimimage
    IF er$ <> "" THEN PRINT STR$(nf) + " " + er$: STOP
    ww%(i%) = w%: hh%(i%) = h%
NEXT i%
t2$ = TIME$: PRINT "Terminé."
FILE_OPEN_WRITE 1, fm$
    FILE_WRITELN 1, str$(nf) + " images"
    FILE_WRITELN 1, "Début: " + t1$ + " Fin: " + t2$
    FOR i% = 1 TO nf
        FILE_WRITELN 1, lst$(i%) + " - " + STR$(ww%(i%)) + "x" + STR$(hh%(i%))
    NEXT i%
FILE_CLOSE 1
LIST 10: WIDTH 10, 200: HEIGHT 10, 400: FILE_LOAD 10, fm$
RETURN

Minute ! je crois que j'ai encore un autre cas...
C'est corrigé, dans un cas j'ai trouvé la séquence FFC2 au lieu de FFC0... (rien ne dit qu'il n'y a pas le cas FFC1...)

Bon, j'ai encore un cas bizarre avec des photos d'internet... à l'étude...
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 22:31

Décidément, c'est drôlement tordu, ces jpg !
geek
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptySam 3 Avr 2010 - 22:44

T'as raison !!! bon, j'ai fait le tour de ce que j'avais (la calculette hexadécimal commençait à chauffer), je ne considère plus que deux catégories: JFIF ou Exif.
Le cas JFIF est très rapide, on recherche FFC0 ou FFC2 de marqueur en marqueur.
Le cas Exif, on recherche A004 octet par octet depuis le début. J'ai optimisé un peu en commençant à 400 (je n'en ai trouvé aucun en dessous de 453), donc c'est plus rapide. Ca serait peut-être à ajuster, mais je ne pense pas.

Je redonne le code complet, pour éviter toute confusion, avec le s/p de test (j'ai ajouté l'affichage de la position trouvée pour A004, pour voir), tu me diras ce que tu en penses.
Code:
' Dimensions d'images JPG, BMP, GIF et TGA
DIM f$, w%, h%, o1%, o2%, o3%, o4%, v%(10), j%, offs%, ad, er$, s$, nes
DIM rep$, fm$, lst$(500), ww%(500), hh%(500), po%(500), posit%, nf, i%, t1$, t2$
LABEL Dimimage, reter, Fin
LABEL Test

GOSUB Test: GOTO Fin

f$ = "C:\Graph\Jpg\IMG_2022.jpg": ' ************** A MODIFIER *************
fr$ = "Z:\Dimtest.txt"
GOSUB Dimimage
PRINT f$
IF er$ <> ""
    PRINT "ERREUR: " + er$
ELSE
    PRINT " " +STR$(w%) + " x " + STR$(h%)
END_IF

Fin:
END

Dimimage:
' Recherche des dimensions en pixels (largeur et hauteur) d'une image f$
' aux formats Jpg, Bmp, Gif ou Tga, rendues dans w% et h%
er$ = "": s$ = UPPER$(RIGHT$(f$, 4))
FILEBIN_OPEN_READ 1, f$
IF s$ = ".JPG"
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: FILEBIN_READ 1, o3%
    IF o1%<>255 OR o2%<>216 OR o3%<>255 THEN er$ = "en-tête non FFD8FF": GOTO reter
    FILEBIN_READ 1, o1%: IF o1%<>224 AND o1%<>225 THEN er$ = "pas E0 ou E1": GOTO reter
    FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: offs% = 256*o1% + o2%: ad = 4
    FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
    s$ = CHR$(v%(1)) + CHR$(v%(2)) + CHR$(v%(3)) + CHR$(v%(4))
    IF s$ = "Exif": ' image jpg EXIF
        FILEBIN_POSITION 1, 400: ' position minimum du marqueur, à ajuster ?
        REPEAT
            REPEAT: ' recherche du marqueur exif 'A004'
                FILEBIN_READ 1, o1%
            UNTIL o1% = 160
            FILEBIN_READ 1, o1%
        UNTIL o1% = 4
        posit% = FILEBIN_POS(1)
        FILEBIN_POSITION 1, posit% + 5
        FOR j% = 1 to 2: FILEBIN_READ 1, v%(j%): NEXT j%
        w% = 256*v%(2) + v%(1)
        FILEBIN_POSITION 1, FILEBIN_POS(1) + 10
        FOR j% = 1 to 2: FILEBIN_READ 1, v%(j%): NEXT j%
        h% = 256*v%(2) + v%(1)
    ELSE: ' image jpg JFIF (ou JFIF avec Exif)
        nes = 0
        REPEAT: ' Recherche marqueur 'FFC0' ou 'FFC2' (séquence FF C0 00 11 08 xx xx yy yy)
            nes = nes + 1
            IF nes > 10000
                er$ = f$ + " FFC0 non trouvé.": GOTO reter
            END_IF
            FILEBIN_POSITION 1, ad + offs%
            FILEBIN_READ 1, o1%: FILEBIN_READ 1, o2%: ' marqueur 'FFxx'
            ad = FILEBIN_POS(1): ' position qui suit le marqueur (-> sa longueur)
            FILEBIN_READ 1, o3%: FILEBIN_READ 1, o4%: offs% = 256*o3% + o4%
        UNTIL o2% = 192 OR o2% = 194: ' ='C0' ou 'C2'
        FOR j% = 1 TO 5: FILEBIN_READ 1, v%(j%): NEXT j%
        h% = 256*v%(2) + v%(3): w% = 256*v%(4) + v%(5)
    END_IF
ELSE
    IF s$ = ".BMP"
        FILEBIN_POSITION 1, 18
        FOR j% = 1 TO 8: FILEBIN_READ 1, v%(j%): NEXT j%
        w% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
        h% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
    ELSE
        IF s$ = ".GIF"
            FILEBIN_POSITION 1, 6
            FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
            w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
        ELSE
            IF s$ = ".TGA"
                FILEBIN_POSITION 1, 12
                FOR j% = 1 TO 4: FILEBIN_READ 1, v%(j%): NEXT j%
                w% = v%(1) + 256*v%(2): h% = v%(3) + 256*v%(4)
            END_IF
        END_IF
    END_IF
END_IF
reter:
FILEBIN_CLOSE 1
RETURN

Test:
rep$ = "C:\Photos\Charny\"
rep$ = "L:\SAVE\PHOTOS\ARCHIVES\2008\Canon\"
' rep$ = "C:\Graph\jpg\dali\"
' rep$ = "C:\Photos\Venise1\"
' rep$ = "C:\Photos\Philippe\"
fm$ = "Z:\Dir"
EXECUTE_WAIT "Cmd.exe /c DIR " + rep$ + "*.jpg /O:N /B >" + fm$
FILE_OPEN_READ 1, fm$: nf = 0
    WHILE FILE_EOF(1) = 0
        nf = nf + 1: FILE_READLN 1, lst$(nf)
    END_WHILE
FILE_CLOSE 1
PRINT rep$ + " " + str$(nf) + " images"
t1$ = TIME$
FOR i% = 1 TO nf
    f$ = rep$ + lst$(i%): GOSUB Dimimage
    IF er$ <> "" THEN PRINT STR$(nf) + " " + er$: STOP
    ww%(i%) = w%: hh%(i%) = h%: po%(i%) = posit%
NEXT i%
t2$ = TIME$: PRINT "Terminé."
FILE_OPEN_WRITE 1, fm$
    FILE_WRITELN 1, str$(nf) + " images"
    FILE_WRITELN 1, "Début: " + t1$ + " Fin: " + t2$
    FOR i% = 1 TO nf
        FILE_WRITELN 1, lst$(i%) + " - " + STR$(ww%(i%)) + "x" + STR$(hh%(i%))+" "+str$(po%(i%))
    NEXT i%
FILE_CLOSE 1
LIST 10: WIDTH 10, 400: HEIGHT 10, 400: FILE_LOAD 10, fm$
RETURN
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 16:27

Mouaih, mouaih, mouaih, mouaih.
J'ai essayé ta dernière formule :

Ca marche souvent...
(quoique ça ne marche pas avec les fichiers comportant des accents)

Et puis, le PO%(I%) est toujours égal à zéro (sauf dans 2 fichiers)
(et j'en ai essayé plusieurs milliers)
(et il n'y avait pas que 2 fichiers qui ne marchaient pas avec l'ancienne formule)
ce qui veut dire que ça ne passe presque jamais dans la boucle exif,

Mais je voudrais bien savoir ce qu'on fait quand ça s'arrête (STOP)
et ça déclare que :
- Pas de E0 ou E1
(ou)
- FFC0 Non trouvé.

Et aussi ce qu'on fait quand ça plante :
(affichage du chemin et du nombre d'images - et puis plus rien - ctrl-alt-suppr)

Dur-dur, les jpg !
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 16:41

Tu dois donc avoir en majorité des images JFIF qui ne positionnent pas le po%(i%), c'est le cas des images internet, ou des images d'appareils photo recopiées ou retouchées. Les images issues d'APN non retouchées sont Exifs (contiennent les paramètres de prise de vue).

Quand ça s'arrête sur erreur... eh bien... tu n'as plus qu'à relever les noms de fichiers et étudier leur structure pour savoir pourquoi ça ne marche pas... enfin c'est ce que je ferais moi mais je n'ai pas le cas.
Ou tu me les fais parvenir (1) ?

Quand ça plante, essayer de reproduire les conditions et mettre des points d'arrêt (STOP ou MESSAGE) pour essayer de localiser l'endroit du plantage... mais je n'ai pas le cas non plus.

Je n'ai jamais réussi à trouver une doc cohérente sur la structure des jpg, alors j'ai bricolé, mais il doit y avoir des cas particuliers non traités..

1) pour communiquer un fichier: le déposer sur http://www.2shared.com/ puis récupérer le lien de téléchargement (download link) qui s'affiche ensuite (copier) et le coller ici.
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 17:00

Erreur de ma part,
le cas de plantage précisé n'en est pas un, je crois,
j'ai rééssayé sur un des cas, en fait, c'est simplement très long (90 sec)
il fallait attendre, c'est là qu'il y avait des exif (et en quelle position =297000... !)
C'est quand même un peu long.
bounce
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 17:08

Eh, et puis il y a un truc qui ne va pas :
à la position 297285, il en déduit que la photo correspondante
fait : 35176 x 1225 (sacrée photo !)
en fait, elle fait 1600 x 1200,
il y a un problème.
affraid
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 17:14

C'est manifestement une erreur ! Et il faut sans doute rajouter également un test de vraisemblance dans le cas Exif (dans la boucle repeat) comme dans le cas JFIF (IF nes > 10000...). Je le rajoute chez moi.
Mais sans avoir le fichier litigieux en main...
Code:
    nes = 0
    IF s$ = "Exif": ' image jpg EXIF
        FILEBIN_POSITION 1, 400: ' position minimum du marqueur, à ajuster ?
        REPEAT
            REPEAT: ' recherche du marqueur exif 'A004'
                FILEBIN_READ 1, o1%
                nes = nes + 1
                IF nes > 10000
                    er$ = f$ + " A004 non trouvé.": GOTO reter
                END_IF
            UNTIL o1% = 160
            FILEBIN_READ 1, o1%: nes = nes + 1
        UNTIL o1% = 4
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 17:25

on peut passer des jpg par 2shared.com ?
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 17:26

oui pourquoi pas ? n'importe quel fichier... en tout cas j'ai téléchargé un jpg sans problème, pour voir

Alors, tu me le passes ce fichier ? enfin, le lien pour le télécharger !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 18:30

Je t'envoie une photo provenant d'un appareil numérique
et faisant l'erreur : A004 non trouvé
(image retirée)

Et une autre provenant d'Internet
faisant l'erreur : Pas de E0 ou E1
http://www.2shared.com/file/12430619/b2b45e53/6dff_1.html
geek


Dernière édition par jjn4 le Mar 6 Avr 2010 - 23:51, édité 1 fois
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 18:48

Ok merci je regarde... mais ça peut demander un peu de temps.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 18:53

OUAIS, parce que d'abord tu t'occupes de mon problème Very Happy
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 18:59

C'est fou, on ne s'appartient plus ! Suspect
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: +++   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) EmptyDim 4 Avr 2010 - 19:02

@JL35: Si t'en veux d'autres, j'en ai encore.
jocolor
@Jean-Claude: on le fait bosser, hein !
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty
MessageSujet: Re: Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)   Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA) Empty

Revenir en haut Aller en bas
 
Extraire les dimensions d'une image JPG (+ BMP, GIF et TGA)
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Extraire une partie d'image bmp
» Extraire un sprite d'une image
» Dimensions image presse-papier
» [Resolu] Récupérer dimensions image après CLIPBOARD_PASTE
» Récupérer l'image d'un IMAGE dans un picture

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: