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
» Logiciel de planétarium.
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G ...
Voir le deal
599 €

 

 Largeur et hauteur d'une image JPG ou BMP

Aller en bas 
4 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Marc

Marc


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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyLun 17 Juil 2023 - 18:23

Bonjour à tous !

Voici une nouvelle version à tester !

Lors de la progression de marqueur en marqueur, si la longueur d’un des segments est mal renseignée, le programme avance pas à pas jusqu’à trouver le prochain marqueur.

Code:
' 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%

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

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

    largeurHauteurImage(nomFichier$)

    ' affichage des dimensions
    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
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
Revenir en haut Aller en bas
JL35




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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyLun 17 Juil 2023 - 20:18

Alors là bravo Marc !

ça marche même avec le dernier fichier de jjn4 un peu bizarre que j'avais du mal à analyser, j'adopte !
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyMar 18 Juil 2023 - 16:16

Super !
Ca marche avec l'image que j'ai évoquée et d'autres que j'avais trouvées du même genre !
Et du coup, j'ai épuisé la liste des photos avec qui la routine ne marchait pas !
Bon, ceci dit, ça ne prouve pas qu'il n'y en ait pas d'autres.
(après tout, ne dit-on pas que la perfection n'existe pas).
Alors, disons que la routine obtenue soit à la limite du parfait Laughing Laughing Laughing
Bravo Marc !!!
Très fort !!!
cheers
Nota: j'ai actualisé la modification de ta routine nommée :
Exploration des images par liste:
que j'ai publiée plus haut.
Comme ça, cela permettra à d'autres qui ont des listes de photos
pouvant être suspectes (généralement, elles viennent d'Internet)
de voir, par répertoires entiers, s'ils en trouvent d'autres
encore récalcitrantes.
jocolor
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyMar 22 Aoû 2023 - 19:08

J'apporte ma contribution également, mais avec l'utilisation des dlls windows kernel32 et gdiplus!
(gdiplus retrouve les tailles d'images de type JPG , PNG , GIF , BMP , TIFF)

Code:

dim Width_Image% , Height_Image%
dim sFile$

sFile$ ="C:\Documents and Settings\Utilisateur\Bureau\etoiles-2016-11-a-full_jpg.jpg"

GetImageSize(sFile$)
print "Fichier : " , sFile$
print "Largeur en pixel(s) = " , Width_Image%
print "Hauteur en pixel(s) = " , Height_Image%

END
'
sub GetImageSize(ImageFile$)
 if file_exists(ImageFile$) = 0
    message "Fichier '" + ImageFile$ + "' non trouvé!"
    exit_sub
 end_if
 
   dim_local ret% , Wstr_ImageFile$ , Len_Wstr_ImageFile% , si$ , ptoken% , hImage%

   peek_reverse
  
   ' Convertir une chaine de caractère au format de caractère large 'ANSI Latin 1 ; Europe occidentale (Windows)' (requis pour 'GdipLoadImageFromFile')
   dll_on "kernel32"
    '
    Len_Wstr_ImageFile% = (len(ImageFile$) + 1)*2 :' calcul de la taille de la structure tampon qui va contenir la chaine de caractère à convertir
    Wstr_ImageFile$ = string$(Len_Wstr_ImageFile% , chr$(0))   :' création de la structure tampon
    ret% = dll_call6("MultiByteToWideChar" , 1252 , 0 , peek32(adr(ImageFile$)) , 0-1 , peek32(adr(Wstr_ImageFile$)) , Len_Wstr_ImageFile%)   :' conversion et stockage de la chaine de caractère dans 'Wstr_ImageFile$'
    '
   dll_off
  
   ' Retouver les dimensions de l'image (formats supportés par GDIPlus: JPG , PNG , GIF , BMP , TIFF)
   dll_on "gdiplus"
    '
    si$ = chr$(1) + string$(15 , chr$(0))   :' structure contenant des données pour intialiser GDIPlus
    ret% = dll_call3("GdiplusStartup" , adr(ptoken%) , peek32(adr(si$)) , 0)   :' initialisation de la bibliothèque GDIPlus; stocke l'ID d'initialisation dans 'ptoken%'
    ret% = dll_call2("GdipLoadImageFromFile" , peek32(adr(Wstr_ImageFile$)) , adr(hImage%))   :' charger le fichier image en mémoire et écrire son pointeur dans 'hImage%'
    ret% = dll_call2("GdipGetImageWidth" , hImage% , adr(Width_Image%))   :' obtenir la dimension horizontale de l'image dans Width_Image%
    ret% = dll_call2("GdipGetImageHeight" , hImage% , adr(Height_Image%))   :' obtenir la dimension verticale de l'image dans Height_Image%
    ret% = dll_call1("GdipDisposeImage" , hImage%)   :' libérer les ressources occupées par 'hImage%'
    ret% = dll_call1("GdiplusShutdown" , ptoken%)   :' libérer les ressources occupées par 'ptoken%' (GDIPlus!)
    '
   dll_off
end_sub


EDIT: corrigé le pb d'accent Wink


Dernière édition par silverman le Dim 27 Aoû 2023 - 9:35, édité 2 fois
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyVen 25 Aoû 2023 - 19:00

Eh, c'est carrément génial, cette dernière méthode !!!
C'est relativement court
et ça marche pour tous les cas de figure.
J'ai essayé avec toutes les images récalcitrantes que j'avais trouvées,
eh bien ça marche impeccable.
Bravo, Silverman !
Ca, c'est une superbe routine à garder en réserve !!!
cheers
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptySam 26 Aoû 2023 - 14:13

Euh, à la réflexion, j'ai trouvé des cas où ça ne marche pas Embarassed Embarassed Embarassed
C'est quand le titre de l'image comporte des accents comme : Réceptacle...
C'est dommage parce que ça partait bien !!!
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyDim 27 Aoû 2023 - 8:18

A zut, je l'avais pas vu celui là! j'essaye de trouver une solution Embarassed

EDIT: c'est corrigé (code maj dans mon post précédent)! Merci d'avoir testé et détecté ce bug qui m'aurait posé pb dans d'autre code Wink
Revenir en haut Aller en bas
jjn4

jjn4


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

Largeur et hauteur d'une image JPG ou BMP - Page 2 Empty
MessageSujet: Re: Largeur et hauteur d'une image JPG ou BMP   Largeur et hauteur d'une image JPG ou BMP - Page 2 EmptyDim 27 Aoû 2023 - 16:36

Impecc !
Là, ça marche !
Je l'ai même transformé, comme le pg de Marc,
pour en faire un explorateur de listes :
Code:
' Dimensions d'une image selon Silverman
dim sFile$ , Width_Image% , Height_Image% , a$ , i% , b$
label ouvrirFichier
width 0,1000

open_dialog_pic 1
  filter 1,"Fichier image *.JPG ou *.BMP|*.jpg;*.bmp"

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

dlist 4

memo 8
  width 8,800
  height 8,400
  bar_vertical 8

end : ' ============================================

ouvrirFichier:
  sFile$ = file_name$(1)
  if sFile$ = "_"
      return
  end_if
  clear 4
  a$=file_find_first$
  while a$<>"_"
      if lower$(right$(a$,4))=".jpg" or lower$(right$(a$,4))=".bmp"
        item_add 4,a$
      end_if
      a$=file_find_next$
  end_while
  file_find_close
  item_add 8,file_extract_path$(sFile$)
  item_add 8,"-----------------------------"
  for i% = 1 to count(4)
      Width_Image% = 0
      Height_Image% = 0
      b$=item_read$(4,i%)
      GetImageSize(b$)
      if Width_Image%=0 or Height_Image%=0
        item_add 8,"Nom du fichier : " + file_extract_name$(b$)
        item_add 8,"Largeur de l'image :" + str$(Width_Image%) + " pixels"
        item_add 8,"Hauteur de l'image :" + str$(Height_Image%) + " pixels"
        item_add 8,""
      end_if
      caption 0,str$(i%)+"/"+str$(count(4))
  next i%
  beep
return

sub GetImageSize(ImageFile$)
  if file_exists(ImageFile$) = 0
      message "Fichier '" + ImageFile$ + "' non trouvé!"
      exit_sub
  end_if
  dim_local ret% , Wstr_ImageFile$ , Len_Wstr_ImageFile% , si$ , ptoken% , hImage%
  peek_reverse
  dll_on "kernel32" 
      Len_Wstr_ImageFile% = (len(ImageFile$) + 1)*2
      Wstr_ImageFile$ = string$(Len_Wstr_ImageFile% , chr$(0))
      ret% = dll_call6("MultiByteToWideChar" , 1252 , 0 , peek32(adr(ImageFile$)) , 0-1 , peek32(adr(Wstr_ImageFile$)) , Len_Wstr_ImageFile%)
  dll_off
  dll_on "gdiplus"
      si$ = chr$(1) + string$(15 , chr$(0)) 
      ret% = dll_call3("GdiplusStartup" , adr(ptoken%) , peek32(adr(si$)) , 0) 
      ret% = dll_call2("GdipLoadImageFromFile" , peek32(adr(Wstr_ImageFile$)) , adr(hImage%)) 
      ret% = dll_call2("GdipGetImageWidth" , hImage% , adr(Width_Image%)) 
      ret% = dll_call2("GdipGetImageHeight" , hImage% , adr(Height_Image%)) 
      ret% = dll_call1("GdipDisposeImage" , hImage%)
      ret% = dll_call1("GdiplusShutdown" , ptoken%)
  dll_off
end_sub
Ce qui m'a permis de l'essayer sur des milliers d'images.
Ca marche impecc !
Ca permet même de détecter les fichiers :
- WEBP déguisés en JPG
- les noms d'images comportant des caractères non ASCII.
Ca fonctionne à peu près à la vitesse de :
100 détections par secondes,
ce qui est raisonnable.
Bravo, Silverman !
C'est une astuce à mettre de côté !
santa
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





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

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

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: