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
» PANORAMIC V 1
Largeur et hauteur d'une image JPG ou BMP Emptypar papydall Aujourd'hui à 5:28

» Je teste PANORAMIC V 1 beta 1
Largeur et hauteur d'une image JPG ou BMP Emptypar papydall Aujourd'hui à 2:48

» bouton dans autre form que 0
Largeur et hauteur d'une image JPG ou BMP Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Largeur et hauteur d'une image JPG ou BMP Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Largeur et hauteur d'une image JPG ou BMP Emptypar Klaus Hier à 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Largeur et hauteur d'une image JPG ou BMP Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Largeur et hauteur d'une image JPG ou BMP Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Largeur et hauteur d'une image JPG ou BMP Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Largeur et hauteur d'une image JPG ou BMP Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Largeur et hauteur d'une image JPG ou BMP Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Largeur et hauteur d'une image JPG ou BMP Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Largeur et hauteur d'une image JPG ou BMP Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Largeur et hauteur d'une image JPG ou BMP Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Largeur et hauteur d'une image JPG ou BMP Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Largeur et hauteur d'une image JPG ou BMP Emptypar jjn4 Lun 22 Avr 2024 - 13:43

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier

 

 Largeur et hauteur d'une image JPG ou BMP

Aller en bas 
4 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyMer 5 Juil 2023 - 20:09

Bonjour à tous !

Bien que le sujet ai été traité plusieurs fois sur le forum, je vous propose une SUB qui renseigne la largeur et la hauteur d’une image jpg ou bmp.

L’appel de la SUB prend en paramètre le nom du fichier, relatif ou absolu.

- Relatif : par exemple  "image.jpg". Le fichier sera recherché dans le répertoire courant.

- Absolu : par exemple "C:\monDossier\image". Le chemin complet est renseigné pour accéder au fichier.

La largeur et la hauteur de l’image en pixels sont renvoyées par la SUB dans 2 variables globales qui seront déclarées en tête de programme : DIM largeurImage%, hauteurImage%

Code:
sub largeurHauteurImage(fichier$)
    dim_local buffer%(25), marqueur%, index%, tailleFichier%, longueurSegment%

    ' remise à "0" des variables hauteur et largeur de l'image
    hauteurImage% = 0
    largeurImage% = 0
    
    ' ouvrir en lecture le fichier de la photo sélectionné dans la boite de dialogue
    filebin_open_read 1,fichier$

    ' lire la taille du fichier en octets
    tailleFichier% = filebin_size(1)
    
    ' lecture entête fichier sur une longueur de 25 octets
    filebin_block_read 1,25,buffer%(0)

    ' Identifier le type de fichier image : BMP ou JPG ?
    if buffer%(0) = hex("FF") and buffer%(1) = hex("D8") :' cas d'un fichier JPG

        index% = 2

        ' Recherche du marqueur 0xFFCx et lecture des dimensions du JPG
        ' Principe de recherche des maqueurs fourni par JL35
        while index% < tailleFichier%
            filebin_position 1,index%
            filebin_block_read 1,9,buffer%(0)
            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' avance pas à pas jusqu'au prochain marqueur 0xFF en cas de longueur erronée du précédent segment
            while buffer%(0) <> 255
                index% = index% + 1
                longueurSegment% = longueurSegment% + 1
                filebin_position 1,index%
                filebin_block_read 1,9,buffer%(0)
            end_while

            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' décodage marqueurs de base 0xFFCx (SOF : Start Of File x)
            if marqueur% > 65471 and marqueur% < 65476 :' 0xFFC0, 0xFFC1, 0xFFC2 et 0xFFC3
                
                ' hauteur de l'image en pixels
                hauteurImage% = buffer%(5) * 256 + buffer%(6)
                
                ' largeur de l'image en pixels
                largeurImage% = buffer%(7) * 256 + buffer%(8)

                ' sortie de boucle lorsque le marqueur recherché a été trouvé
                exit_while
            end_if

            ' saut vers le prochain marqueur
            index% = index% + longueurSegment% + 2
        end_while  
    else
        ' fichier BMP
        largeurImage% = buffer%(18) + (buffer%(19)*256) + (buffer%(20)*power(256,2)) + (buffer%(21)*power(256,3))
        hauteurImage% = buffer%(22) + (buffer%(23)*256) + (buffer%(24)*power(256,2)) + (buffer%(25)*power(256,3))
    end_if

    ' Fermer fichier binaire
    filebin_close 1  
end_sub


Exemple concret d’utilisation :

Code:
' Dimensions en pixels d'une image JPG ou BMP
' JL35 et Marc - Juillet 2023
' Ecrit en langage PANORAMIC 0.9.29.i.9

' définir les variables
dim nomFichier$, largeurImage%, hauteurImage%

' définir les LABELs (étiquettes pour repérer un emplacement dans le code)
label ouvrirFichier

' Saut vers le sous programme de création de l'interface utilisateur
creerInterfaceUtilisateur()

' fin de programme principal
end

' ------------------------------------------------------------------------------
sub creerInterfaceUtilisateur()

    ' créer une fenêtre de dialoque pour ouvrir un fichier image
    open_dialog_pic 1

    ' Mettre un filtre à la fenêtre de dialogue pour ne sélectionner que les fichiers avec l'extension JPG ou BMP
    filter 1,"Fichier image *.JPG ou *.BMP|*.jpg;*.bmp"

    ' créer un bouton d'appel à charger un fichier image
    button 2
    top 2,35
    left 2,480
    caption 2,"Choisir image"
    on_click 2,ouvrirFichier

    ' créer une ligne d'affichage pour le nom du fichier
    alpha 3
    top 3,30
    left 3,30

    ' créer une ligne d'affichage pour la largeur de l'image en pixels
    alpha 4
    top 4,50
    left 4,30

    ' créer une ligne d'affichage pour la hauteur de l'image en pixels
    alpha 5
    top 5,70
    left 5,30

    ' créer le PICTURE d'affichage pour l'image sélectionnée
    picture 6
    top 6,136
    left 6,105
    height 6,250
    width 6,375
    stretch_on 6
   
end_sub
' ------------------------------------------------------------------------------
ouvrirFichier:
    ' Afficher la boite de dialogue pour sélectionner un fichier image
    nomFichier$ = file_name$(1)

    ' Fermer la boite de dialoque si l'utilisateur annule sa demande.
    if nomFichier$ = "_"
        return
    end_if

    ' Saut au sous programme de recherche des dimensions de l'image
    rechercherLargeurHauteurImage(nomFichier$)

    ' affichage des résultats
    caption 3,"Nom du fichier : " + file_extract_name$(nomFichier$)
    caption 4,"Largeur de l'image :" + str$(largeurImage%) + " pixels"
    caption 5,"Hauteur de l'image :" + str$(hauteurImage%) + " pixels"
   
    ' saut au sous-programme d'affichage de l'image sélectionnée
    afficherImage()
   
 return
' ------------------------------------------------------------------------------
sub rechercherLargeurHauteurImage(fichier$)
    dim_local buffer%(25), marqueur%, index%, tailleFichier%, longueurSegment%

    ' remise à "0" des variables hauteur et largeur de l'image
    hauteurImage% = 0
    largeurImage% = 0
   
    ' ouvrir en lecture le fichier de la photo sélectionné dans la boite de dialogue
    filebin_open_read 1,fichier$

    ' lire la taille du fichier en octets
    tailleFichier% = filebin_size(1)
   
    ' lecture entête fichier sur une longueur de 25 octets
    filebin_block_read 1,25,buffer%(0)

    ' Identifier le type de fichier image : BMP ou JPG ?
    if buffer%(0) = hex("FF") and buffer%(1) = hex("D8") :' cas d'un fichier JPG

        index% = 2

        ' Recherche du marqueur 0xFFCx et lecture des dimensions du JPG
        while index% < tailleFichier%
            filebin_position 1,index%
            filebin_block_read 1,9,buffer%(0)
            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' avance pas à pas jusqu'au prochain marqueur 0xFF en cas de longueur erronée du précédent segment
            while buffer%(0) <> 255
                index% = index% + 1
                longueurSegment% = longueurSegment% + 1
                filebin_position 1,index%
                filebin_block_read 1,9,buffer%(0)
            end_while

            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' décodage marqueurs de base 0xFFCx (SOF : Start Of File x)
            if marqueur% > 65471 and marqueur% < 65476 :' 0xFFC0, 0xFFC1, 0xFFC2 et 0xFFC3
               
                ' hauteur de l'image en pixels
                hauteurImage% = buffer%(5) * 256 + buffer%(6)
               
                ' largeur de l'image en pixels
                largeurImage% = buffer%(7) * 256 + buffer%(8)

                ' sortie de boucle lorsque le marqueur recherché a été trouvé
                exit_while
            end_if

            ' saut vers le prochain marqueur
            index% = index% + longueurSegment% + 2
        end_while 
    else
        ' dimensions pour un fichier BMP
        largeurImage% = buffer%(18) + (buffer%(19)*256) + (buffer%(20)*power(256,2)) + (buffer%(21)*power(256,3))
        hauteurImage% = buffer%(22) + (buffer%(23)*256) + (buffer%(24)*power(256,2)) + (buffer%(25)*power(256,3))
    end_if

    ' Fermer l'accès en lecture fichier binaire
    filebin_close 1 
end_sub
' ------------------------------------------------------------------------------
sub afficherImage()
    ' déclaration des variables locales
    dim_local ratioImage, ratioPicture
   
    ' calcul du ratio de l'objet PICTURE(6) 375x250 pixels
    ratioPicture = 375/250

    ' calcul du ration de l'image
    ratioImage = largeurImage% / hauteurImage%

    ' adaptater le ratio du PICTURE(6) au ratio de l'image sélectionnée
    if ratioImage > ratioPicture
        width 6,375
        height 6,375 / ratioImage
    else
        height 6,250
        width 6,250 * ratioImage
    end_if

    ' centrer le PICTURE(6) à l'écran
    left 6,(width_client(0) - width(6)) / 2
    top 6,((height_client(0) - height(6)) / 2) + 40

    ' Afficher l'image sélectionnée dans le PICTURE(6)
    file_load 6,nomFichier$
end_sub

Cliquez sur le bouton « Fichier image » pour choisir une image et afficher ses dimensions.


Bonne programmation à tous !


Dernière édition par Marc le Mer 19 Juil 2023 - 12:41, édité 4 fois
Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyMer 5 Juil 2023 - 21:44

Salut Marc,
Personnellement j'utilise depuis toujours la petite sub ci-dessous, certes ce n'est pas aussi rigoureux que ta méthode,
mais jusqu'à preuve du contraire ça marche à tous les coups:
Code:
SUB DimJpgBmp(f$)
  ' Dimensions d'une image Bmp ou Jpg -> w,h, définis dans l'appelant
  DIM_LOCAL p,fp$
  p = 900: fp$ = "C:\Tmp.bmp"
  IF FILE_EXTRACT_EXTENSION$(UPPER$(f$)) <> ".BMP"
      PICTURE p: HIDE p: FILE_LOAD p,f$: FILE_SAVE p,fp$: DELETE p: f$ = fp$
  END_IF
  FILEBIN_OPEN_READ 1,f$
      FILEBIN_POSITION 1,18: w = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: h = FILEBIN_READ(1)+256*FILEBIN_READ(1)
  FILEBIN_CLOSE 1: IF FILE_EXISTS(fp$) = 1 THEN FILE_DELETE fp$
END_SUB
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 6 Juil 2023 - 15:02

Personnellement, j'utilise toujours la formule qu'on avait
concocté avec JL35 (enfin surtout faite par JL35) Laughing Laughing
qui prenait aussi en compte certains jpg tordus
(ceux plus tordus encore étant traités par une transformation discrète en bmp)
(je peux vous détailler la formule, si cela intéresse certains)
rabbit
@ Marc :
Ta formule, qui a l'air intéressante, prend-elle en compte
tous les cas de figure de jpg, même très tordus ?
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 15:35

J'ai cherché et c'est vrai que ça marche pour presque tous,
mais à de rares exceptions près.
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 17:36

Bonjour JJN4 !

A l'occasion, peux-tu me faire parvenir un fichier jpg qui ne passe pas ?

Merci d'avance !

Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 18:07

Je t'envoie le plus petit que j'ai trouvé
(puisque je ne peux pas les réduire, ce qui modifierait...)
Largeur et hauteur d'une image JPG ou BMP Bot10
scratch scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 18:10

Super ! Merci !
Je testerai ce soir...
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 21:15

@JJn4
J'ai analysé la photo. Le tag SOF (Start Of File) qui contient les dimensions de l'image est 0xFFC1.

J'ai ajouté la prise en charge de ce tag et maintenant tout fonctionne bien.

Les codes sources du premier post ont été rectifiés en conséquence.

Merci de ton aide ! Si tu as d'autres photos litigieuses, je suis preneur !


Bonne programmation à tous !

Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 21:25

Effectivement jjn4 il doit y avoir un os dans ton image qui ne se charge pas dans un picture
(File_load) mais ça ne signale pas d'erreur... il ne se passe rien.

J'ai une sub qui donne les dimensions d'un jpg et qui marche dans ce cas (-> 479 x 500) :
Code:
SUB DimJpg(f$)
  ' Dimensions rendues dans w et h, définis dans l'appelant
  ' dimensions d'un jpg -> w, h : frame FF C0
  ' (frames: FF tt 00 yy xx ...
  '  tt = type de frame, xx+256*yy taille du contenu (+2 = taille totale)
  DIM_LOCAL sz,t,x,v%(10)
  FILEBIN_OPEN_READ 9,f$: sz = FILEBIN_SIZE(9): x = 2
  WHILE x < sz
    FILEBIN_POSITION 9,x: FILEBIN_BLOCK_READ 9,10,v%(0)
    t = v%(1): ' type de frame (FF xx)
    IF t=192 OR t=193 OR t=194 OR t=195: ' C0, C1, C2, C3 frame dimensions
        h = v%(6)+256*v%(5): w = v%(8)+256*v%(7)
        EXIT_WHILE
    END_IF
    x = x+v%(3)+256*v%(2)+2: ' frame suivant
  END_WHILE
  FILEBIN_CLOSE 9
END_SUB

PS: autant pour moi !
Mais si l'image se charge dans le picture, je ne l'avais pas défini assez grand... et donc je ne voyais que le coin
supérieur gauche, tout blanc !
Code:
DIM f$,w,h
f$ = "Z:\bot10.jpg": ' image jjn4
FONT_SIZE 0,12: COLOR 0,220,220,220
PICTURE 1: FULL_SPACE 1
FILE_LOAD 1,f$
DimJpg(f$)
PRINT STR$(w)+" x "+STR$(h)
END
' ===========================
SUB DimJpg(f$)
  ' dimensions d'un jpg -> w, h : frame FF C0
  ' (frames: FF tt 00 yy xx ...
  '  tt = type de frame, xx+256*yy taille du contenu (+2 = taille totale)
  DIM_LOCAL sz,t,x,v%(10)
  FILEBIN_OPEN_READ 9,f$: sz = FILEBIN_SIZE(9): x = 2
  WHILE x < sz
    FILEBIN_POSITION 9,x: FILEBIN_BLOCK_READ 9,10,v%(0)
    t = v%(1): ' type de frame (FF xx)
    IF t=192 OR t=193 OR t=194 OR t=195: ' C0, C1, C2, C3 frame dimensions
        h = v%(6)+256*v%(5): w = v%(8)+256*v%(7)
        EXIT_WHILE
    END_IF
    x = x+v%(3)+256*v%(2)+2: ' frame suivant
  END_WHILE
  FILEBIN_CLOSE 9
END_SUB


Dernière édition par JL35 le Jeu 13 Juil 2023 - 21:48, édité 2 fois
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 21:36

Bonsoir JL35 !

L'image de JJN4 se charge sans problème dans un PICTURE :

Largeur et hauteur d'une image JPG ou BMP Jjn4-810
Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyJeu 13 Juil 2023 - 21:40

Bonsoir Marc !
effectivement j'étais en train de rectifier ci-dessus, ça marche !
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 14:35

Oui, ça marche avec l'image que je t'ai donnée,
j'ai essayé avec d'autres qui ne marchaient pas,
certaines ça marche et d'autres non :
je t'en envoie une nouvelle avec laquelle ta
nouvelle routine ne fonctionne pas
(mais comme elle est un peu grande,
je te l'envoie avec un lien :
(lien supprimé)
scratch


Dernière édition par jjn4 le Sam 15 Juil 2023 - 16:30, édité 1 fois
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 14:41

J'ai transformé un peu ta routine de l'autre fois
pour en faire un explorateur systématique
de répertoires de photos. Cela permet de
se faire une idée rapide de celles avec qui
ça ne marche pas. Je la publie ci après :
(cela permettra à tous ceux qui possèdent
des listes de photos, de trouver si ils
possèdent des images également récalcitrantes)
Code:

Exploration des images par liste:
' Dimensions d'une image JPG ou BMP
' JL35 et Marc - Juillet 2023
' Ecrit en langage PANORAMIC 0.9.29.i.9

dim nomFichier$, largeurImage%, hauteurImage%   , a$ , i%

label ouvrirFichier

' créer une boite de dialoque pour ouvrir un fichier image
open_dialog_pic 1

' Mettre un filtre à la boite de dialogue pour ne sélectionner que les fichiers avec l'extension JPG ou BMP
filter 1,"Fichier image *.JPG ou *.BMP|*.jpg;*.bmp"

button 2
top 2,25
left 2,480
caption 2,"Fichier image"
on_click 2,ouvrirFichier

dlist 4

end
' ------------------------------------------------------------------------------
ouvrirFichier:
    ' Afficher la boite de dialogue pour sélectionner un fichier image
    nomFichier$ = file_name$(1)

    ' si l'utilisateur annule sa recherche => fin du programme
    if nomFichier$ = "_"
        return
    end_if
    clear 4
    a$=file_find_first$
    while a$<>"_"
       if lower$(right$(a$,4))=".jpg"
          item_add 4,a$
       end_if
       a$=file_find_next$
    end_while
    file_find_close
for i% = 1 to count(4)
    largeurImage% = 0
    hauteurImage% = 0
    nomFichier$=item_read$(4,i%)
    largeurHauteurImage(nomFichier$)

    ' affichage des dimensions
  if largeurImage%=0 and hauteurImage%=0
    print "Nom du fichier : " + file_extract_name$(nomFichier$)
    print "Largeur de l'image :" + str$(largeurImage%) + " pixels"
    print "Hauteur de l'image :" + str$(hauteurImage%) + " pixels"
    print
  end_if
  caption 0,str$(i%)+"/"+str$(count(4))
next i%
    beep
return
' ------------------------------------------------------------------------------
sub largeurHauteurImage(fichier$)
    dim_local buffer%(25), marqueur%, index%, tailleFichier%, longueurSegment%

    ' remise à "0" des variables hauteur et largeur de l'image
    hauteurImage% = 0
    largeurImage% = 0
    
    ' ouvrir en lecture le fichier de la photo sélectionné dans la boite de dialogue
    filebin_open_read 1,fichier$

    ' lire la taille du fichier en octets
    tailleFichier% = filebin_size(1)
    
    ' lecture entête fichier sur une longueur de 25 octets
    filebin_block_read 1,25,buffer%(0)

    ' Identifier le type de fichier image : BMP ou JPG ?
    if buffer%(0) = hex("FF") and buffer%(1) = hex("D8") :' cas d'un fichier JPG

        index% = 2

        ' Recherche du marqueur 0xFFCx et lecture des dimensions du JPG
        ' Principe de recherche des maqueurs fourni par JL35
        while index% < tailleFichier%
            filebin_position 1,index%
            filebin_block_read 1,9,buffer%(0)
            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' avance pas à pas jusqu'au prochain marqueur 0xFF en cas de longueur erronée du précédent segment
            while buffer%(0) <> 255
                index% = index% + 1
                longueurSegment% = longueurSegment% + 1
                filebin_position 1,index%
                filebin_block_read 1,9,buffer%(0)
            end_while

            marqueur% = (buffer%(0)*256) + buffer%(1)
            longueurSegment% = (buffer%(2)*256) + buffer%(3)

            ' décodage marqueurs de base 0xFFCx (SOF : Start Of File x)
            if marqueur% > 65471 and marqueur% < 65476 :' 0xFFC0, 0xFFC1, 0xFFC2 et 0xFFC3
                
                ' hauteur de l'image en pixels
                hauteurImage% = buffer%(5) * 256 + buffer%(6)
                
                ' largeur de l'image en pixels
                largeurImage% = buffer%(7) * 256 + buffer%(8)

                ' sortie de boucle lorsque le marqueur recherché a été trouvé
                exit_while
            end_if

            ' saut vers le prochain marqueur
            index% = index% + longueurSegment% + 2
        end_while  
    else
        ' fichier BMP
        largeurImage% = buffer%(18) + (buffer%(19)*256) + (buffer%(20)*power(256,2)) + (buffer%(21)*power(256,3))
        hauteurImage% = buffer%(22) + (buffer%(23)*256) + (buffer%(24)*power(256,2)) + (buffer%(25)*power(256,3))
    end_if

    ' Fermer fichier binaire
    filebin_close 1  
end_sub

scratch


Dernière édition par jjn4 le Mar 18 Juil 2023 - 16:08, édité 4 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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 17:48

Salut jjn4,
J'ai voulu télécharger l'image dont tu donnes le lien ci-dessus, mais ça renvoie sur un site anonfile...
et si on clique "télécharger le fichier q-basic-queue.jpg" ça télécharge un fichier "q-basic....jpg_xxxxxx.exe" (donc un exécutable)
ce que je n'aime pas trop, ça fait quoi à l'exécution ? a priori, je n'exécute pas...
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 17:58

J'ai essayé de télécharger, ça marche :
cela affiche l'image avec un logiciel correspondant
Il suffit de cliquer à droite sur enregistrer l'image
pour la télécharger où on veut.
Et ensuite, curieusement, ça la téléchargre
avec l'extension .jpg_
Après, il suffit de renommer en .jpg
D'accord, c'est étrange, mais ça marche.
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 18:53

Merci JJN4 pour l'image. Cela va me permettre de compléter / débuguer mon programme.

JL35 : Voici un lien pour télécharger l'image de JJN4 :
https://kdrive.infomaniak.com/app/share/698165/27898a99-b3bc-430f-9943-11cbfb851132

Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyVen 14 Juil 2023 - 19:18

Merci Marc, c'est fait, c'est plus simple comme ça !

Ouais, bizarre cette image, mon programme ci-dessus affiche bien ses dimensions, par contre l'image chargée
et affichée dans le picture est en noir et blanc, avec des manques de pixels sur des lignes verticales...

Largeur et hauteur d'une image JPG ou BMP Imjjn410
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptySam 15 Juil 2023 - 14:09

Bonjour à tous !

Je viens de regarder la structure de la dernière image de JJN4.
Le marqueur 0xFFC0 est en 35ème position dans la succession des marqueurs.
Or dans mon programme, j’ai limité la lecture des marqueurs aux seuls 25 premiers… Fatale erreur !

Dans la version de JL35 (voir son post dans ce fil de discussion le Jeu 13 Juil 2023 - 21:25), il saute de marqueur en marqueur sans limitation jusqu’à atteindre la fin du fichier. C’est une bonne stratégie que je vais appliquer à mon programme. Merci JL35 !

Je rectifie mon code source en conséquence.

Quant à la distorsion d’affichage de l’image fournie par le martien (JJN4 !) dans l’objet PICTURE, il n’y a pas grand-chose à faire…


Bonne programmation à tous !
Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptySam 15 Juil 2023 - 15:47

Salut Marc, oui il y a anomalie dans cette image.
Ma méthode de conversion habituelle jpg->bmp (load jpg dans un picture, save dans un bmp) ne marche pas.
J'ai essayé la méthode Klaus (fonction "LoadAnyImageFile") ça ne marche pas non plus, l'image est récupérée
avec ses défauts de couleurs.
La conversion jpg bmp marche avec des ressources externes qui récupèrent bien les couleurs,
par exemple Nconvert ou IrfanView, leurs analyses doivent être plus subtiles.
Ma sub Irfanview, universelle (il faut adapter le chemin de l'exécutable) :
Code:
SUB Img1ToImg2(f$,fr$)
  ' Conversion image d'un format quelconque (Heic compris) vers un autre format quelconque
  EXECUTE_WAIT "C:\Progra~2\Irfanv~1\i_view64.exe|"+f$+" /convert="+fr$
END_SUB
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptySam 15 Juil 2023 - 16:27

Finalement, on travaille au cas par cas,
et je crains qu'il y ait encore des dizaines
de cas particuliers, comme ceux que j'ai trouvés,
à chaque fois avec de nouvelles particularités spéciales.
No No No
Pour que chacun puisse explorer ses listes d'images,
j'ai actualisé l'explorateur adapté de la méthode de Marc,
publié ci-dessus sous le nom :
Exploration des images par liste:
(publié le 14 juillet 23 à 12h41)
(je l'ai adapté à la dernière modification de Marc)
Finalement, pour faire un mixe des deux,
je pense qu'il serait bon d'y ajouter la marque de prudence
de JL35, c'est à dire une transformation en bmp
pour les cas détectés comme ne marchant pas
avec la méthode élaborée !
N'est-ce pas une bonne idée ?
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptySam 15 Juil 2023 - 18:54

@JJN4

JJN4 a écrit:
Finalement, on travaille au cas par cas,
et je crains qu'il y ait encore des dizaines
de cas particuliers, comme ceux que j'ai trouvés,
à chaque fois avec de nouvelles particularités spéciales.

Je ne pense pas qu'il existe des dizaines de cas particuliers.
Pour l'instant j'ai une réussite à 100% de tous les répertoires photos à ma disposition.

Aurais-tu trouvé une image qui ne passe pas ?
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyDim 16 Juil 2023 - 13:55

Marc a écrit:
Je ne pense pas qu'il existe des dizaines de cas particuliers
Ah ouiiiiiiiiiiiiiiiii !!!
Alors, j'ai essayé sur tous les ordinateurs de la famille pour voir,
et j'en ai trouvé un nouveau !
Hi, hi, hi !!!
https://anonfiles.com/Ic2f4f2dz8/hs17_jpg
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyDim 16 Juil 2023 - 14:34

Salut jjn4,

C'est un peu troublant ton site de téléchargement anonfiles.com, au lieu de récupérer l'image .JPG on télécharge un
exécutable .EXE: 'hs17.jpg_49517.exe' et on ne sait pas ce qu'il y a là-dedans ni ce que ça fait à l'exécution...
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2389
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyDim 16 Juil 2023 - 17:48

Bonjour à tous !

Merci JJN4 !
Avec tous ces défis, on va peut être arriver à la (quasi) perfection !

@Jl35
Voici un lien pour télécharger la photo de JJN4 :
https://kdrive.infomaniak.com/app/share/698165/6e33325f-6657-4ad6-8753-3f99e4719fad

Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP EmptyDim 16 Juil 2023 - 20:49

Un  grand merci Marc, ça marche !

Bizarre cette image, ma sub de lecture des dimensions dans le fichier renvoie 0 x 0.
Par contre l'image se charge bien dans un picture panoramic , que l'on peut sauvegarder en bmp
et lire les dimensions dans le fichier... scratch
Revenir en haut Aller en bas
Contenu sponsorisé





Largeur et hauteur d'une image JPG ou BMP Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP Empty

Revenir en haut Aller en bas
 
Largeur et hauteur d'une image JPG ou BMP
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» largeur d'image chargée non conforme ?
» Récupérer l'image d'un IMAGE dans un picture
» hauteur effective de l'intérieur d'une fenêtre
» Calcul de la hauteur de base d'une police
» Dessin 2D: largeur de trait (résolu !)

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: