LIRE LA TAILLE D'UNE IMAGE D'UN FICHIER JPEG (TRÈS RAPIDE)

Messages postés
898
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
26 juillet 2007
- - Dernière réponse : pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
- 7 nov. 2011 à 13:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8575-lire-la-taille-d-une-image-d-un-fichier-jpeg-tres-rapide

pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Merci, moi aussi je l'avais fait dans le but d'apprendre.

Avec VB6, on peut lire la taille d'une image, mais pour cela, il doit d'abord la charger, ce qui est très lent.
Ce bout de code m'a permis ensuite de faire un comparateur sans ouverture d'image. Puis un logiciel de classement d'image. Le classeur incorporait une routine qui copiait les images impossibles à ouvrir dans un répertoire. Les images récalcitrantes peuvent être parfois ouverte avec un logiciel tierce d'édition, on modifie un petit truc, on enregistre et l'image est bonne.

Avec VB10, le chargement d'une image est rapide, donc le code ne permet plus vraiment d'accélérer.
patriceB2
Messages postés
10
Date d'inscription
mardi 5 janvier 2010
Statut
Membre
Dernière intervention
17 novembre 2011
-
Je disposais d'une image que LOADPICTURE ne pouvait lire. Impossible aussi de gérér une erreur (plantage complet de VB6). Ce programme détecte que l'image a un problème!! Bravo donc! Bravo aussi à la démarche de ce genre de recherche pour comprendre, plutôt que d'utiliser des utilitaires tout fait, même s'ils sont plus simples. Il est bon de comprendre aussi....
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Merci Florian,
le but de ce code était de voir un peu comment était fait le Jpeg.
en rechercanht sur internet, j'avais trouvé pas mal de dossiers assez épais sur la structure jpeg.
J'avais mi ce bout de code pour en faire un résumé.
La boucle 1 à 10 est pas terrible, mais ça évite d'avoir plus de ligne de code pour gérer les images HS (et c'est pas rare sur les images téléchargées) que pour afficher 2 chiffres.


pour les fonctions :
Label1.Caption = "Hauteur : " & LoadPicture(chemin).Height
Label2.Caption = "Largeur : " & LoadPicture(chemin).Width
J'ai pas trop pigé pourquoi je ne retombais pas sur la taille en twips, mais c'est bien ça en théorie. Sauf que pour afficher deux nombre, il charge deux fois l'image en mémoire. C'est tres long, surtout sur de grandes images.
Vu que windows affiche les excifs, il doit y avoir des fonctions API rapides pour le faire rapidement.
L'avantage avec ce bout de code, c'est de ne lire que le début de l'image et une seule fois et c'est rapide.
TFlorian
Messages postés
194
Date d'inscription
dimanche 3 mars 2002
Statut
Membre
Dernière intervention
19 décembre 2005
3 -
GÉNIAL !
J'ai réussi à récupérer des images suite à un formatage d'un disque...
Après la récupération des fichiers les photos mes images ne faisaient plus que 160 x 120 au lieu de 1600 x 1200 ..
Grâce a ton code j'ai compris la structure du JPEG et j'ai réussi à le décortiquer pour récupérer mes images HD ..
(Lorsque le fichier n'avait pas été trop détruit dut à une fragmentation trop importante du disque.. )

D'un point de vue perf, je préfère ta méthode que les méthodes toutes faire car on ne lit qu'une seule foi le fichier (sur le disque) alors que les APIs des Windows comme on les appels plusieurs fois, font plusieurs accès disque

Encore merci, et bonne prog a tous ;-)

TFlorian
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Ca c'est du deterrage
quand une photo est redimentionnée lors de son ouverture pour loger dans un controle picture ou image, il me semble qu'il te donne la taille de l'image redimentionnée.

Je pense qu'il existe une fonction toute faite qui donne toujours la bonne taille, mais je la connais pas.

J'ai quelques images où il y a un décalage d'1 ou 2 octets à l'intérieur du fichier, je sais pas pourquoi, et la fonction se trompe

sinon, lequel des deux se trompe ?
cs_Sator2
Messages postés
137
Date d'inscription
samedi 11 septembre 2004
Statut
Membre
Dernière intervention
10 septembre 2006
-
Salut tout le monde ... petite question...
si on fait: (demande 2 labels et une image....)
Label1.Caption = "Hauteur : " & LoadPicture(chemin).Height
Label2.Caption = "Largeur : " & LoadPicture(chemin).Width
N'arrivons-nous pas à la même chose???
@+ Sator
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
là, je sais pas.
mais en lui indiquent que c'est un pointeur sur une image jpeg, ça doit marcher.
Le jpeg est compressé, c'est pas un simple tableau RGB comme le BMP.
cs_Snoow
Messages postés
4
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
4 novembre 2003
-
Sympa ce bout de code !

Petite question : l'image qui est contenue dans #5 , est-ce qu'il est possible de l'afficher directement dans un PictureBox ou dans un objet Image ?

(par ce que mon image provient d'un flux, et je ne souhaite pas l'écrire sur le disque : trop lent)
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
c'est marqué dans le titre, c'est la taille d'une image d'un fichier JPEG, les dimensions hauteur et largeur de l'image qu'il renferme quoi.
z980x
Messages postés
898
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
26 juillet 2007
2 -
J'ai pas tres bien compris, tu veux connaitre la taille du fichier jpeg? (en octets?)

Si c'est ca, rien de plus simple :

MsgBox Len(File1.Path & "" & File1.FileName)