IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

JPEG progressif et Chrome


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut JPEG progressif et Chrome
    Bonjour à tous,
    Chrome me pose souci pour les JPEG progressifs quand le src d'une image est modifié en dynamique.

    sur les autres navigateurs, voici ce qui fonctionne :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img id="image_id" src="image1.jpg" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function loadIm() {
       document.getElementById('image_id').src = '';
       setTimeout(function () { document.getElementById('image_id').src = "image2.jpg";},50);
    }
    première ligne vide l'image (sans quoi cela ne fonctionne pas) et deuxième charge la nouvelle image après un petit délai.
    Sur Chrome, la première ligne ne fait rien, pas mieux avec =null, je n'arrive pas à vider la source et le chargement progressif ne fonctionne pas. La seule solution que j'ai trouvée pour le moment est de détruire l'image est de la recréer, mais cela ne convient pas à mon appli.

    merci d'avance
    BK

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    A priori nul besoin de vider le src, une attribution directe doit fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('image_id').src = "image2.jpg";
    Ceci étant il faut le temps de téléchargement de l'image...

    Un preloader permettrait de ne modifier le src qu'une fois l'image chargée avec .complete ou onload sur l'image ...

  3. #3
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    merci SpaceFrog mais ce sont de grandes images (>1Mo) et je veux qu'elles apparaissent progressivement tout en se chargeant.
    Cela ne fonctionne pas si on affecte une nouvelle source sans vider le contenu précédent. Le bout de code fonctionne parfaitement sur tous les navigateurs sauf Chrome où l'image n'apparait qu'après avoir été totalement chargée et ce à cause du fait que le src="" n'a pas d'effet.
    BK

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Heu la faut se poser la question de la taille des images ...
    le web n'est a priori pas fait pour afficher des images aussi lourdes ...

  5. #5
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    ... ben si, quand c'est par exemple pour lire des vieux documents d'archives où c'est écrit tout petit ... mais bon, c'est pas la question
    (1Mo = env. 3 Mpixels pas trop altéré = 2000 x 1500, c'est pas énorme non plus)

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    faut passer tes images à RIOT ou pngOptimiser (même pour le jpg)
    et si elle demeurent trop lourdes il faut les découper ... et en faire un affichage progressif mais par parties ..

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ensuite, je comprends pas trop ton problème... Le but, c'est quand même d'afficher les images non, pas le chargement progressif...
    Ce qui explique probablement le comportement de Chrome.

    Ensuite, au pire, tu peux afficher un loader en attendant le chargement complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function loadIm() {
       document.getElementById('image_id').src = 'loader.gif';
       setTimeout(function () { document.getElementById('image_id').src = "image2.jpg";},50);
    }

  8. #8
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    J'aurais tendance à vous dire que ce n'est pas du conseil en stratégie ou en optimisation de photos dont j'ai besoin, mais je vais plutôt reposer ma question. Le code simpliste ci-dessous a un comportement différent sur Chrome, et c'est bien le comportement des autres navigateurs que je souhaite, voudrais, aimerais avoir (pour des tas de raisons que je crois pas avoir à justifier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <head>
    <script>
    function go() {
    newSrc = "http://upload.wikimedia.org/wikipedia/commons/b/b0/Ancienne_Ferme_-_annexe_1_-_paysage.jpg";
    document.getElementById('im').src="";
    setTimeout(function(){document.getElementById('im').src=newSrc;},50);
    }
    </script>
    </head>
    <body>
    <input type="button" value="SUIVANT" onclick="go()"/>
    <img id='im' src='http://www.metiersdupaysage.com/wp-content/gallery/photos/img_0316.jpg'>
    </body>
    Testable, les images sont sur le net. Quand j'appuie sur "SUIVANT" sur Chrome, je dois attendre la fin du chargement de l'image avant de la voir (oui je pourrais mettre un gif d'attente) alors que sur les autres navigateurs, l'image commence à se charger ligne par ligne et je la vois apparaitre petit à petit, miracle . J'ai peut-être donné de mauvaises pistes en parlant du jpeg progressif, on peut penser à celui qui s'affiche par couches, flou puis de plus en plus clair.
    pardon d'insister, désolé si je n'ai pas été clair (flou)
    BK

  9. #9
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    A ma connaissance il n'y a aucun standard selon lequel les images devraient s'afficher ligne par ligne au chargement. C'est plus une relique de l'ère pré-ADSL, mais comme Chrome est arrivé après, ça ne m'étonnerait pas qu'ils n'aient pas codé ce comportement.

    Si tu tiens absolument à avoir cet affichage progressif, il faudra coder un script plus complexe pour charger ton image et parser des états intermédiaires de cette image pendant son chargement. Je te souhaite bien du courage car ça semble très complexe, surtout que rien ne garantit que le chargement se fait bien de manière totalement synchrone. En principe oui mais va savoir avec le code des navigateurs d'aujourd'hui...

  10. #10
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    merci SylvainPV,
    je tiens juste à préciser que c'est bien un comportement "normal" de Chrome, et cela fonctionne très bien. Tu peux taper l'adresse url d'une image de 12M, et tu verras qu'elle se charge de haut en bas. Cela fonctionne aussi en dynamique en modifiant le .src MAIS seulement si la balise img n'a pas d'attribut src "en dur" au départ ou que celui-ci est vide (src='').
    BK

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Dans ce cas tu peux peut-être essyaer de supprimer et recréer le tag <img> en Javascript

  12. #12
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    je l'ai évoqué dans mon premier message, ça fonctionne mais ça me pose des problèmes car je manipule pas mal cette image. C'est une solution de secours, je pensais qu'il y avait plus simple.

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    Bonjour,
    et qu'advient-il lorsque l'image est en cache, adieu la "belle" progression.

    C'est le moteur de rendu de Chrome qui gère différemment les affichages des modifications, ton salut me semble être donc de gérer toi même l'apparition de ton image une fois chargée.

    Perso l'affichage progressif je trouve cela très moyen, mais bon ...

  14. #14
    Invité
    Invité(e)
    Par défaut
    si ça ne fonctionne pas uniquement avec chrome il doit à tous les coups s'agir d'un bug
    Dernière modification par NoSmoking ; 03/12/2012 à 21h56.

  15. #15
    Membre régulier Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Points : 96
    Points
    96
    Par défaut
    Pour une image lourde le seul avantage de l'apparition progressif est d'indiquer à l'utilisateur que quelque chose se passe sur le navigateur car parfois elle est chargée seule sur une page blanche, c'est un comportement présent depuis le début du web mais qui est de plus en plus obsolète.

    Une fois dans le cache l'image est affichée instantanément et c'est le but, si c'est juste pour l'effet de style il faut l'indiquer au navigateur en utilisant jquery avec un animate() par exemple.

    Pour les sites récents on a tendance à utiliser un petit gif de loading qui est remplacé par la div sur l'évènement onload de l'image, ainsi le gif indique qu'un chargement est en cours et une fois l'image chargée on peut l'afficher avec n'importe quel effet, fondu, slide....

  16. #16
    Membre régulier Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Ce n'est pas un effet de style qui est recherché. L'animation gif est en place depuis longtemps sur cette application. C'est donc pour une amélioration du service 1- pour savoir en combien de temps environ l'image va se charger (car c'est la grande inconnue quand on voit "loading ...") 2- c'est mieux de voir que quelque chose se passe 3- l'image contient du texte (ancien), le but est la lecture de ce texte qui peut du coup commencer avant son chargement complet. Personne n'a l'air convaincu, mais j'ai pu tester, et c'est très efficace dans ce contexte.
    Je ne peux(veux) pas manipuler les images côté serveur car elles se trouvent sur des serveurs distants indépendants (application cross-domain).
    Donc, fonctionne le mieux sur Opera, pas mal sur IE, FF en local seulement (?) et toujours pas sur Chrome. Il me reste la solution de detruire l'image (removeChild) et de la recréer (appendChild), ce qui n'est pas si simple dans mon cas.
    merci quand même
    BK

Discussions similaires

  1. Savoir si un JPEG est progressif
    Par jd440 dans le forum Langage
    Réponses: 4
    Dernier message: 10/06/2014, 09h24
  2. Jpeg Progressif & affichage miniature !?
    Par xxkirastarothxx dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 01/03/2013, 12h11
  3. [FLASH MX] Chargement dynamique de Jpeg progressif
    Par Pierre-Yves VAROUX dans le forum Flash
    Réponses: 3
    Dernier message: 13/02/2005, 15h16
  4. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo