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

z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 - 19 sept. 2003 à 21:23
pascal16m Messages postés 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020 - 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 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
7 nov. 2011 à 13:09
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
7 nov. 2011 à 08:52
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 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
25 nov. 2007 à 11:56
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
25 nov. 2007 à 01:12
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 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
4 avril 2006 à 14:36
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
4 avril 2006 à 06:29
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 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
4 nov. 2003 à 22:05
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
4 nov. 2003 à 15:01
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 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
19 sept. 2003 à 22:04
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 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
19 sept. 2003 à 21:23
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)
Rejoignez-nous