Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

compter des images

18 réponses
Avatar
Christophe PEREZ
Bonjour,

Je sais que le titre n'est pas très évocateur, mais je n'ai pas trouvé
mieux.
Supposons un script js, qui précharge des images dont le nombre et les
url sont indiquées en dur. Tout ça, c'est simple, on sait faire.

Par contre, je bute sur un truc tout bête quand je veux passer à un
autre principe.
En effet, je voudrais que ceci soit "dynamique" au sens où je ne voudrais
pas avoir à indiquer le nombre d'images, qu'elles soient toutes à un
emplacement défini, avec un nom standard genre imageXXX.gif, XXX variant
de 000 à 999, sans trou...

J'ai donc pensé faire un script de préchargement classique, tester le
img.complete par rapport à une tempo maxi, et déduire, si cette tempo
est dépassée, que cette image n'existe pas, et donc, en déduire le
nombre d'images.
(Je vous rassure de suite, ne cherchez pas la petite bête ici, je n'aurai
pas de problème avec un tempo dépassée à tort etc... puisqu'en fait,
ces images se trouvent dans le chrome de mon application XUL, donc
localement sur la machine de l'utilisateur pour ceux à qui chrome et XUL
ne parlent pas.)

Seulement, c'est idiot, mais, à moins que ça ne soit moi qui déraille
complètement, quand je teste le 'complete' sur une image qui n'existe
pas, je reçois un 'true' !?!

Verriez-vous une solution simple à mon besoin ?

Merci d'avance.

--
Christophe PEREZ
Écrivez moi sans _faute !

10 réponses

1 2
Avatar
O.L.
Bonjour,

[...]

Seulement, c'est idiot, mais, à moins que ça ne soit moi qui déraille
complètement, quand je teste le 'complete' sur une image qui n'existe
pas, je reçois un 'true' !?!

Verriez-vous une solution simple à mon besoin ?


Utiliser l'événement onerror de ta balise IMG ?
<img src="file.gif" onerror="Coucou_Je_N_Existe_Pas(this)">

Enfin bon tout dépend du script, après faut juste arriver à intégrer
l'idée ...

@+
Olivier

Avatar
YD
...je voudrais que ceci soit "dynamique" au sens où je ne voudrais
pas avoir à indiquer le nombre d'images, qu'elles soient toutes à un
emplacement défini, avec un nom standard genre imageXXX.gif, XXX variant
de 000 à 999, sans trou...


Pourquoi n'accèdes-tu pas à l'objet du système de fichiers plutôt ?

Je ne connais pas XUL mais une petite recherche permet de trouver ce genre
de code que tu dois pouvoir adapter à ton besoin :

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
if (!file)
return; // Impossible d'accéder au fileSystem
file.initWithPath(fileName); //la variable filename doit contenir une chaîne : chemin complet du fichier
if (!file.exists()) { //etc.

Bon, ce n'est qu'une piste.

--
Y.D.

Avatar
Christophe PEREZ
Le Fri, 30 Sep 2005 17:38:20 +0200, O.L a écrit:

Utiliser l'événement onerror de ta balise IMG ?
<img src="file.gif" onerror="Coucou_Je_N_Existe_Pas(this)">


Ben, soit je ne comprends pas ta solution, soit c'est toi qui n'a pas
compris mon problème.

Je ne veux justement rien en dur dans mon code. Je ne sais pas à l'avance
combien d'images j'aurai, et je veux justement les compter (d'où le
titre du post), afin de les précharger et de savoir sur combien d'image
je boucle, genre affichage de bannières pub.

J'explique différemment :
à un endroit bien défini, j'ai par exemple :
image001.gif
image002.gif
image003.gif
et c'est tout. Soit 3 images.
Je veux dans mon script JS :
- compter mes images afin de toutes les précharger
- puis, être capable de les faire afficher quand je veux, en ayant la
connaissance du nombre d'images accessibles.

Enfin bon tout dépend du script, après faut juste arriver à intégrer
l'idée ...


A moins de gérer l'évènement onerror à la volée, en js, pour
détecter si le complete = true est faux (image inexistante) ou pas (image
pas encore chargée), ce que je ne saurai probablement pas faire, je ne
vois pas comment utiliser ta solution.

Merci quand même.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Fri, 30 Sep 2005 18:18:34 +0200, YD a écrit:

Pourquoi n'accèdes-tu pas à l'objet du système de fichiers plutôt ?


C'est probablement aussi une solution, mais que je ne maîtrise pas des
masses.
Je me disais que je devais avoir un moyen simple en JS pur.
De plus, même si pour réduire j'ai dit dans mon premier post que les
images seraient en local dans le chrome, il est possible qu'à terme elles
passent sur un serveur http local de façon à les mutualiser.
Mais je me vois mal mettre en place tout un système avec xmlhttprequest
rien que pour ça, sans d'ailleurs être sûr que ce soit une solution
viable.

Je ne connais pas XUL


C'est un tort, il va falloir t'y mettre, pour m'aider :-D !
Mais là, vraiment, en théorie, c'est du pur js dont je devrais avoir
besoin.

mais une petite recherche permet de trouver ce genre
de code que tu dois pouvoir adapter à ton besoin :

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
if (!file)
return; // Impossible d'accéder au fileSystem
file.initWithPath(fileName); //la variable filename doit contenir une chaîne : chemin complet du fichier
if (!file.exists()) { //etc.


Ben t'es meilleur que moi en recherches XUL ;-)
En plus, cela pourrait aussi me solutionner un autre problème.

Bon, ce n'est qu'une piste.


Que je vais tester immédiatement, merci.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
O.L.
Christophe PEREZ avait soumis l'idée :
Le Fri, 30 Sep 2005 17:38:20 +0200, O.L a écrit:

Utiliser l'événement onerror de ta balise IMG ?
<img src="file.gif" onerror="Coucou_Je_N_Existe_Pas(this)">


Ben, soit je ne comprends pas ta solution, soit c'est toi qui n'a pas
compris mon problème.

Je ne veux justement rien en dur dans mon code. Je ne sais pas à l'avance
combien d'images j'aurai, et je veux justement les compter (d'où le
titre du post), afin de les précharger et de savoir sur combien d'image
je boucle, genre affichage de bannières pub.

J'explique différemment :
à un endroit bien défini, j'ai par exemple :
image001.gif
image002.gif
image003.gif
et c'est tout. Soit 3 images.
Je veux dans mon script JS :
- compter mes images afin de toutes les précharger
- puis, être capable de les faire afficher quand je veux, en ayant la
connaissance du nombre d'images accessibles.


Donc si tu utilises JS pour afficher tes images :
MyDiv.innerHTML += "<img src=image.gif onerror='fonction()'>";
Non ? Bref :)
En fait je n'ai pas du comprendre pourquoi tu voulais détecter si les
images étaient chargées ou inexistantes ... ?

Sinon, il te reste peut être la possibilité de voir leur taille
effective, avec MyIMG.offsetWidth et MyIMG.offsetHeight : si c'est une
valeur trop petite (genre 20 pixels), et que tu sais que tes images
font au moins 100 pixels de large, bah alors tu en déduis que ton image
est pas chargée ...

Désolé si mon aide t'as pas aidé ;-D

@+
Olivier


Avatar
Christophe PEREZ
Le Fri, 30 Sep 2005 19:52:33 +0200, O.L a écrit:

Donc si tu utilises JS pour afficher tes images :


oui

MyDiv.innerHTML += "<img src=image.gif onerror='fonction()'>";


mais non ;-)
Je me contente de changer le src de l'image en question.

Non ? Bref :)
En fait je n'ai pas du comprendre pourquoi tu voulais détecter si les
images étaient chargées ou inexistantes ... ?


Dis toi juste que je veux savoir combien il y a d'images distantes, de la
forme : imagesXXX.gif.
Si tu sais répondre à cette question, tu as résolu mon problème ;-)

Sinon, il te reste peut être la possibilité de voir leur taille
effective, avec MyIMG.offsetWidth et MyIMG.offsetHeight : si c'est une
valeur trop petite (genre 20 pixels), et que tu sais que tes images
font au moins 100 pixels de large, bah alors tu en déduis que ton image
est pas chargée ...


J'ai bien essayé ce genre de choses avant de poster ici, mais je ne suis
arrivé à rien de bien concluant. Peut-être devrais-je réessayer.

Désolé si mon aide t'as pas aidé ;-D


Bah, de la discussion jaillit la lumière non ?
Et puis bon, tu m'auras tenu compagnie ;-)

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Olivier Miakinen

Dis toi juste que je veux savoir combien il y a d'images distantes, de la
forme : imagesXXX.gif.
Si tu sais répondre à cette question, tu as résolu mon problème ;-)


GET http://tonserveur/lechemin/combien-d-images.php
avec un script php qui compte sur le serveur ?

Avatar
Christophe PEREZ
Le Fri, 30 Sep 2005 23:07:37 +0200, Olivier Miakinen a écrit:

GET http://tonserveur/lechemin/combien-d-images.php
avec un script php qui compte sur le serveur ?


Trop facile ! :-)
Non, ça je saurais faire. Je veux vraiment du pur JS.
D'ailleurs, je réessayerai dès que j'aurai 2 minutes.

Merci quand même.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Fri, 30 Sep 2005 10:22:26 -0400, Christophe PEREZ a écrit:

Verriez-vous une solution simple à mon besoin ?


C'est bon, je m'en suis finalement sorti en testant aussi le height et le
width. J'avais pourtant déjà essayé mais mes boucles ne devaient pas
être correctes dans tous mes essais.
Ceci dit, malgré tout, j'ai du mal à comprendre que img.complete renvoie
true lorsqu'une image n'existe pas, mais bon...

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
O.L.
Le 01/10/2005, Christophe PEREZ a supposé :
Ceci dit, malgré tout, j'ai du mal à comprendre que img.complete renvoie
true lorsqu'une image n'existe pas, mais bon...


Ben, la propriété complete doit indiquer :
a) si l'image est en cours de chargement, ou bien
b) si elle a complètement fini de se charger.
Dans le cas d'une image qui n'existe pas, est ce que cette image est
encore en cours de chargement ? Non. Donc elle a fini de se charger.

C'est pas de la logique ça ?? :-D
if(Christophe_Perez.getAnswer() == 'yes') alert("Hahaha !!! I'm the
best ...");
else alert("Va dire ça aux programmeurs d'IE !");

@+
Olivier

1 2