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.
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Largeur et hauteur d'une image JPG ou BMP - Page 2 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Largeur et hauteur d'une image JPG ou BMP - Page 2 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
Le deal à ne pas rater :
Funko POP! Jumbo One Piece Kaido Dragon Form : où l’acheter ?
Voir le deal

 

 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 : 2397
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 : 7095
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 : 2709
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 : 968
Age : 51
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 : 2709
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 : 2709
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 : 968
Age : 51
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 : 2709
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
-
» 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: